Привет, Хабр! Хочу поделиться своей реализацией, видением MultiWan на оборудовании компании Mikrotik.
Какие вопросы решает эта инструкция.
Горячий резерв интернета, перестал работать один, подхватит другой.
Разделение пользователей / сетей на провайдеров.
Балансировка трафика (все провайдеры активны).
Qos, как управлять скоростью абонентов и определенным траффиком, с помощью Queue Tree и Simple Queue
Для кого эта инструкция
Вы уже познакомились с Router OS, умеют настраивать NAT и писать маршруты, но mangle для вас "темный лес".
Перебрали все гайды по MultiWan, но все равно, что то не понятно.
Исходные данные
Первый провайдер (ISP1) - мобильны интернет через другой Mikrotik по технологии Passthrough LTE (передача Ip адреса от модема на основной роутер)
Второй провайдер (ISP2) - проводной интернет, имеющий "частный" адрес
Третий провайдер (ISP3) - временный провайдер (доп канал для конференции, мероприятий и т.д.)
Четвертый, пятый, шестой провайдер - при необходимости
В качестве провайдера так же может быть использовано VPN подключение, для того чтобы маршрутизировать определенные ресурсы, или сети, как пример - сеть бухгалтерии должна иметь выход в интернет, через центральный офис.
В качестве роутера может быть любой роутер с ROS7, c необходимой вам производительностью и количеством портов. Почему LTE является основным подключением, а проводной резервным - особенность здания, в котором это осуществлено. Все скриншоты с "боевой" машины.
Что именно будем реализовывать:
Первая группа пользователей ходит в интернет сразу по двум провайдерам ISP1 и ISP 2 с балансировкой по соединениям
Вторая группа пользователей ходит в интернет только через ISP3
Qos необходимых провайдеров и пользователей, в нашем случае это первая группа пользователей
Роутер адекватно выпускает свой трафик из любого подключения, корректно работает DSTNAT
Настраивать все бы будем на дефолтном конфиге от Mikrotik, в целом он не плохой, но не идеален, fastrack отключен.
1. Подготовка провайдеров
1.1 Определимся куда у нас будут подключены провайдеры и занесем их в лист WAN, это необходимо, как в целях безопасности, так и для правильной маршрутизации.
/interface list member add interface=ether9-WAN-Akado list=WAN
/interface list member add interface=WAN-LTE list=WAN
/interface list member add interface=ether16-internet-event list=WAN
1.2.1 Настроим адреса или получим DHCP от провайдеров
Добавляем скрипт на DHCP, это нужно потому что, адрес мы от LTE получаем каждый раз разный, соответственно меняется и шлюз провайдера
/ip/dhcp-client/add interface=WAN-LTE add-default-route=no use-peer-dns=no use-peer-ntp=no
Default Route можно не добавлять, мы его получим скриптом, но можно и включить, главное указать его стоимость, иначе он будет основным
1.2.2 Маленькая хитрость с DHCP
/ip/route/set gateway=$"gateway-address" numbers=[find comment=ISP-1-GW]
/ip/firewall/nat/set to-addresses=$"lease-address" numbers=[find comment=ISP1]
/ip/firewall/mangle/set src-address=$"lease-address" numbers=[find comment=ISP1-out]
/interface/l2tp-client/set src-address=$"lease-address" numbers=[find comment=ISP1]
/interface/l2tp-client/set src-address=$"lease-address" numbers=[find comment=VPS-LTE]
/ip dhcp-client
add add-default-route=no interface=WAN-LTE script="/ip/route/set gateway=\$\"g\
ateway-address\" numbers=[find comment=ISP-1-GW]\r\
\n/ip/firewall/nat/set to-addresses=\$\"lease-address\" numbers=[find comm\
ent=ISP1]\r\
\n/ip/firewall/mangle/set src-address=\$\"lease-address\" numbers=[find co\
mment=ISP1-out]\r\
\n/interface/l2tp-client/set src-address=\$\"lease-address\" numbers=[find\
\_comment=ISP1]\r\
\n/interface/l2tp-client/set src-address=\$\"lease-address\" numbers=[find\
\_comment=VPS-LTE]" use-peer-dns=no use-peer-ntp=no
Описание скрипта
В IP/route мы ищем запись, у которой есть комментарий ISP-1-GW, и в качестве Gateway подставляем Gateway который нам дает DHCP
В Firewall Nat точно так же ищем комментарий ISP1 и в конструкции SRC-NAT в поле to adreess ставим адрес получаемый от DHCP
В Firewall Mange ищем комментарий ISP1-out и в эту запись подставляется адрес из DHCP, об этом подробнее в части Mangle ниже
Последние две записи нужны для подключение LTP клиентов через конкретно этого провайдера, поиск осуществляется так же по комментарию
1.3 Необходимо создать таблицы маршрутизации
Это необходимо, чтобы трафик от каждого провайдера был в своей таблице маршрутизации, и куда мы могли бы отправлять определённых пользователей.
Дополнительных таблиц нам нужно столько, сколько будет провайдеров.
/routing/table/add fib name=rtabl-ISP1
/routing/table/add fib name=rtabl-ISP2
/routing/table/add fib name=rtabl-ISP3
1.4 Зададим необходимые маршруты, где ISP1 будет с дистанцией 1, ISP2 будет с дистанцией 2, ISP3 будет с дистанцией 3, это видно на следующей картинке
1.4.4 Дублируем каждый маршрут в свою таблицу. Это необходимо для того, чтобы в в своей таблице, свой провайдер был "дефолтным"
Для маршрутов которые работают через DHCP не забываем указать комментарий, именно по нему будет осуществляться поиск записи подставка правильного адреса шлюза.
Собираем все маршруты
Что мы тут видим?
От каждого провайдера есть "нули" в таблице main и эти же маршруты присутствуют в своих таблицах "rtab".
2. NAT
Мы не будем использовать action masquerade, вместо него мы будем использовать SRC-NAT
/ip firewall nat add action=src-nat chain=srcnat comment=ISP1 out-interface=WAN-LTE to-addresses=адрес
/ip firewall nat add action=src-nat chain=srcnat comment=ISP2 out-interface=ether9-WAN-Akado to-addresses=адрес
Важное замечание, необходимо так же указывать комментарии к правилам, в одном случае это делаем фаервол более читаемым, а во втором у нас есть скрипт в DHCP клиенте, который будет подставлять soure address в нужное поле, при получении нового адреса
На самом деле, если вдруг у вас все подключения по DHCP, или вы вдруг таскаете микротик везде с собой, то можно заранее указать все комментариях nat, mangle route, и скрипты в DHCP клиентах.
3. Магический Mangle для правильного прохождения траффика
На каждого провайдера нам необходимо добавить несколько правил, для того, чтобы роутер мог "ответить" правильно, то есть если трафик пришел с первого провайдера, с первого интерфейса, то роутер ответит провайдеру с этого же интерфейса.
/ip firewall mangle add action=mark-connection chain=prerouting comment=ISP1 in-interface=WAN-LTE new-connection-mark=con-isp1 passthrough=yes add action=mark-routing chain=prerouting connection-mark=con-isp1 in-interface-list=!WAN log=yes new-routing-mark=rtab-ISP1 passthrough=yes
/ip firewall mangle add action=mark-routing chain=output comment=ISP1-out new-routing-mark=rtab-ISP1 passthrough=yes src-address=10.40.45.27
/ip firewall mangle add action=mark-connection chain=prerouting comment=ISP2 connection-mark=no-mark in-interface=ether9-WAN-Akado new-connection-mark=con-isp2 passthrough=yes
/ip firewall mangle add action=mark-routing chain=prerouting connection-mark=con-isp2 in-interface-list=!WAN new-routing-mark=rtab-ISP2 passthrough=yes
/ip firewall mangle add action=mark-routing chain=output new-routing-mark=rtab-ISP2 passthrough=yes src-address=10.10.230.10
/ip firewall mangle add action=mark-connection chain=prerouting comment=ISP3 connection-mark=no-mark in-interface=ether16-internet-event new-connection-mark=con-isp3 passthrough=yes
/ip firewall mangle add action=mark-routing chain=prerouting connection-mark=con-isp3 in-interface-list=!WAN new-routing-mark=rtab-ISP3 passthrough=yes
/ip firewall mangleadd action=mark-routing chain=output new-routing-mark=rtab-ISP3 passthrough=yes src-address=213.171.50.102
Давайте разберем каждого провайдера по отдельности.
первое правило первого провайдера ISP1 (он же LTE)
Этим правилом мы говорим - из интерфейса WAN-LTE (у нас это первый провайдер ISP1) все пакеты маркируй "con-isp1". Название маркировки "con-isp1" - произвольное, пишите его так, чтобы вы понимали, откуда идут эти пакеты, это так-же будет необходимо при построении QOS
Второе правило первого провайдера ISP1
Вот тут хочу заострить особое внимание на конструкцию правила. Тут роутеру мы говорим, все пакеты, которые имеют маркировку con-isp1 (мы создали ее первым правилом) не из Interface list WAN отправляй в таблицу rtab-ISP1 (на самом деле дай метку маршрута, но смысл не изменится)
Во многих инструкциях такой конструкции я не встречал, и с их примерами у меня не работало.
Третье правило первого провайдера ISP1
Здесь все просто, указываем адрес источника наш ip адрес и направляем его в таблицу rtap-ISP1
Важное дополнение, на скриншоте указан комментарий ISP1-out, по этому комментарию исходящий адрес подставляется автоматически с помощью скрипта в DHCP клиенте.
Остальные провайдеры настраиваются точно так же.
В целом три провайдера настроены и работают, но между ними нет ни резервирования, ни переключения, в случае когда линк есть, но интернета нет. Решить эту проблему в некоторых случаях может помочь опция chek gateway в настройках маршрута, или так называемый файловер, его мы настроем в следующей части статьи.
Так как тема QOS и Балансировки достаточно большая и тесно связаны, то продолжение их будет в следующей части статьи.
UPD: добавил команды по просьбам трудящихся.