Policy based routing в Mikrotik

В этой заметке я не буду разъяснять, зачем нужен policy based routing — на эту тему дядюшка Гугл даст много ответов. Если кратко — то для любой группы хостов может быть создана своя собственная таблица маршрутизации, которые друг от друга никак не зависят. Таким образом, например, плохих клиентов, которые не заплатили вовремя можно заворачивать на специальный сервер, который покажет им большое и красивое сообщение. Да мало ли зачем нужны эти таблицы? Можно, например, раздавать трафик от двух провайдеров двум разным клиентам при помощи одного роутера. Сценарий — тьма. Приступи же к делу…

0_a7fbb_1512d7d5_L

На картинке типичная схема PBR: одних клиентов рулим одному провайдеру, других провайдеров — другому. Не спрашивайте, зачем — так надо…
Предположим, что у нас есть роутер, в первые два порта которого входят аплинки от двух провайдеров, а к третьему и четвертому подключены клиенты

для начала, создаем нужные IP интерфейсы, которые будут выступать шлюзами для клиентов:

/ip address add address=192.168.88.1/30 interface=ether3
/ip address add address=192.168.89.1/30 interface=ether4

Затем создаем интерфейсы, которые смотрят на провайдеров:

/ip address add address=1.1.1.2/30 interface=ether1
/ip address add address=2.2.2.2/30 interface=ether2

Теперь добавляем маршруты:

/ip route add gateway=1.1.1.1 routing-mark=ISP1
/ip route add gateway=2.2.2.1 routing-mark=ISP2

#Основным шлюзом для самого устройства будет первый провайдер

/ip route add gateway=1.1.1.1

Теперь добавляем правила маршрутизации:

/ip route rule add dst-address=192.168.88.0/24 action=lookup table=main
/ip route rule add dst-address=192.168.89.0/24 action=lookup table=main
/ip route rule add dst-address=1.1.1.0/30 action=lookup table=main
/ip route rule add dst-address=2.2.2.0/30 action=lookup table=main
/ip route rule add src-address=1.1.1.0/30 action=lookup table=ISP1
/ip route rule add src-address=2.2.2.0/30 action=lookup table=ISP2
/ip route rule add routing-mark=ISP1 action=lookup table=ISP1
/ip route rule add routing-mark=ISP2 action=lookup table=ISP2

Осталось прописать правила фаервола, которые промаркируют трафик нужным нам образом:

/ip firewall mangle add chain=prerouting src-address=192.168.88.0/24 action=mark-routing \
new-routing-mark=ISP1 passthrough=no
/ip firewall mangle add chain=prerouting src-address=192.168.89.0/24 action=mark-routing \
new-routing-mark=ISP2 passthrough=no
/ip firewall mangle add chain=prerouting action=mark-routing \
new-routing-mark=ISP2 passthrough=no

И пропишем правила NAT:

/ip firewall nat add chain=srcnat action=masquerade out-interface=ether1 src-address=192.168.88.0/24
/ip firewall nat add chain=srcnat action=masquerade out-interface=ether2 src-address=192.168.89.0/24

На этом все, PBR работает, и каждый из клиентов будет ходить только через указанного в настройках провайдера.

Статья без изменений взята отсюда:  http://nix.khd.ru/?p=133

UPDATE:
Если вы хотите разделить клиентов в рамках одной подсети:

1. Можно создать Address list, например назовём его ISP1_route, в данный лист добавить нужные IP:

/ip firewall address-list add address=192.168.89.5 list=ISP2_route
/ip firewall address-list add address=192.168.89.6 list=ISP2_route

2. В MANGLE прописываем правило:

/ip firewall mangle add chain=prerouting src-address-list=ISP2_route action=mark-routing \
new-routing-mark=ISP2 passthrough=no

Собственно так же нам потребуется настроенный NAT, его так же можно настроить на работу с адрес листами, если у вас много подсетей.
Создаётся адрес лист, например local, туда добавляем все нужные подсети. В настройках ната заменяем
src-address=
на
src-address-list=

Запись опубликована в рубрике Mikrotik. Добавьте в закладки постоянную ссылку.

6 комментариев на «Policy based routing в Mikrotik»

  1. Вячеслав говорит:

    Закралась опечаточка в :

    Теперь добавляем маршруты:
    /ip route add gateway=1.1.1.1 routing-mark=ISP1
    /ip route add gateway=2.2.2.2 routing-mark=ISP2

    Вторая команда, наверное, такая
    /ip route add gateway=2.2.2.1 routing-mark=ISP2

    • valec говорит:

      Хм, не заметил. Спасибо.

      • Алексей говорит:

        Наверное потому что на картинке у Вас шлюз 2.2.2.1 )))
        И потому что Вы вешаете адрес 2.2.2.2 на интерфейс, а далее маршрут на него же.
        /ip address add address=2.2.2.2/30 interface=ether2

        • valec говорит:

          Смешно и грустно, но я этого не заметил сразу. Приношу свои извинения 🙂 Ну и конечно же поправил.
          Причём в самом начале своего знакомства с микротик я регулярно обращался к этой статье и никогда не замечал ошибки 🙁

  2. Сергей говорит:

    Первая толковая статья об альтернативной маршрутизации на Mikrotik. В духе LARTC от Linux.
    Здесь есть альтернативные таблицы, правила и маркирование как таковое.

    В других руководствах по mutil WAN в mikrotik многое по-другому:
    — маркируют соединения в цепочке prerouting через mark-connection с passthrough=yes,
    — затем опять маркируют, но уже с mark-routing уже с passthrought=yes,
    — /ip rule вообще не используется
    Например, вот такая статья https://blog.linitx.com/load-balancing-multiple-internet-connections/

    Что хотел бы спросить: чем отличаются mark-connection от mark-routing? Чем они отличаются?
    Почему в других статьях не используется /ip rule? В чем соль их схемы вообще?

    Вдруг знаете. Спасибо

  3. Александр говорит:

    Долго я мучился, пока не наткнулся на эту статью. Настроил все за 15 минут.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *