Привет, Хабр! Хочу поделиться своей реализацией, видением MultiWan на оборудовании компании Mikrotik.

Какие вопросы решает эта инструкция.

  • Горячий резерв интернета, перестал работать один, подхватит другой.

  • Разделение пользователей / сетей на провайдеров.

  • Балансировка трафика (все провайдеры активны).

  • Qos, как управлять скоростью абонентов и определенным траффиком, с помощью Queue Tree и Simple Queue

Для кого эта инструкция

  • Вы уже познакомились с Router OS, умеют настраивать NAT и писать маршруты, но mangle для вас "темный лес".

  • Перебрали все гайды по MultiWan, но все равно, что то не понятно.

Исходные данные

  • Первый провайдер (ISP1) - мобильны интернет через другой Mikrotik по технологии Passthrough LTE (передача Ip адреса от модема на основной роутер)

  • Второй провайдер (ISP2) - проводной интернет, имеющий "частный" адрес

  • Третий провайдер (ISP3) - временный провайдер (доп канал для конференции, мероприятий и т.д.)

  • Четвертый, пятый, шестой провайдер - при необходимости

    В качестве провайдера так же может быть использовано VPN подключение, для того чтобы маршрутизировать определенные ресурсы, или сети, как пример - сеть бухгалтерии должна иметь выход в интернет, через центральный офис.

    В качестве роутера может быть любой роутер с ROS7, c необходимой вам производительностью и количеством портов. Почему LTE является основным подключением, а проводной резервным - особенность здания, в котором это осуществлено. Все скриншоты с "боевой" машины.

    Что именно будем реализовывать:

    1. Первая группа пользователей ходит в интернет сразу по двум провайдерам ISP1 и ISP 2 с балансировкой по соединениям

    2. Вторая группа пользователей ходит в интернет только через ISP3

    3. Qos необходимых провайдеров и пользователей, в нашем случае это первая группа пользователей

    4. Роутер адекватно выпускает свой трафик из любого подключения, корректно работает DSTNAT

Настраивать все бы будем на дефолтном конфиге от Mikrotik, в целом он не плохой, но не идеален, fastrack отключен.

1. Подготовка провайдеров

1.1 Определимся куда у нас будут подключены провайдеры и занесем их в лист WAN, это необходимо, как в целях безопасности, так и для правильной маршрутизации.

1.2.1 Настроим адреса или получим DHCP от провайдеров

Добавляем скрипт на DHCP, это нужно потому что, адрес мы от LTE получаем каждый раз разный, соответственно меняется и шлюз провайдера

Default Route можно не добавлять, мы его получим скриптом, но можно и включить, главное указать его стоимость, иначе он будет основным

1.2.2 Маленькая хитрость с DHCP

Добавляем скрипт в DHCP клиента
Добавляем скрипт в 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]

Описание скрипта

  1. В IP/route мы ищем запись, у которой есть комментарий ISP-1-GW, и в качестве Gateway подставляем Gateway который нам дает DHCP

  2. В Firewall Nat точно так же ищем комментарий ISP1 и в конструкции SRC-NAT в поле to adreess ставим адрес получаемый от DHCP

  3. В Firewall Mange ищем комментарий ISP1-out и в эту запись подставляется адрес из DHCP, об этом подробнее в части Mangle ниже

  4. Последние две записи нужны для подключение LTP клиентов через конкретно этого провайдера, поиск осуществляется так же по комментарию

1.3 Необходимо создать таблицы маршрутизации

Это необходимо, чтобы трафик от каждого провайдера был в своей таблице маршрутизации, и куда мы могли бы отправлять определённых пользователей.

Дополнительных таблиц нам нужно столько, сколько будет провайдеров.

Находится в Routing - table
Находится в Routing - table

1.4 Зададим необходимые маршруты, где ISP1 будет с дистанцией 1, ISP2 будет с дистанцией 2, ISP3 будет с дистанцией 3, это видно на следующей картинке

1.4.4 Дублируем каждый маршрут в свою таблицу. Это необходимо для того, чтобы в в своей таблице, свой провайдер был "дефолтным"

Для маршрутов которые работают через DHCP не забываем указать комментарий, именно по нему будет осуществляться поиск записи подставка правильного адреса шлюза.

Собираем все маршруты

Что мы тут видим?

От каждого провайдера есть "нули" в таблице main и эти же маршруты присутствуют в своих таблицах "rtab".

2. NAT

Мы не будем использовать action masquerade, вместо него мы будем использовать SRC-NAT

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

Важное замечание, необходимо так же указывать комментарии к правилам, в одном случае это делаем фаервол более читаемым, а во втором у нас есть скрипт в DHCP клиенте, который будет подставлять soure address в нужное поле, при получении нового адреса

На самом деле, если вдруг у вас все подключения по DHCP, или вы вдруг таскаете микротик везде с собой, то можно заранее указать все комментариях nat, mangle route, и скрипты в DHCP клиентах.

3. Магический Mangle для правильного прохождения траффика

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

Всего 9 правил, по 3 правила на провайдера.
Всего 9 правил, по 3 правила на провайдера.

Давайте разберем каждого провайдера по отдельности.

первое правило первого провайдера 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 и Балансировки достаточно большая и тесно связаны, то продолжение их будет в следующей части статьи.

Комментарии (8)


  1. lantonov
    03.12.2024 15:50

    Ееть одна интересная вещь что на LTE сеть динамический меняется взамимости от загрузки и ещё адрес может прилететь с маской /32 а шлюз вообще виртуальный например 10.64.64.0 и что ты сним будешь делать


    1. sh_023 Автор
      03.12.2024 15:50

      Это не совсем в тему поста, но отвечу на ваш вопрос, если происходит так, что прилетает /32 маска, а шлюз виртуальный, и если это замечено за провайдером, то в таком случае ЛТЕ модем через ppp соединение, да еще один нат к сожалению, и все будет работать.
      а так, пост о другом немного)


      1. lantonov
        03.12.2024 15:50

        Я просто говорю то об этом так как для стабильности работы модема желательно всегда убирать его nat чтобы он был ppp и почти всегда используется он ppp


      1. lantonov
        03.12.2024 15:50

        А об отвале можно узнать по Lcp так как там есть время жизни и если оно превышает то значит он завис


  1. michsh
    03.12.2024 15:50

    А чем вас не устраивает стандартная реализация на MikroTik?

    https://wiki.mikrotik.com/Manual:PCC


    1. sh_023 Автор
      03.12.2024 15:50

      PCC - это механизм распределения подключений, и он не отменяет ни правил, ни доп таблиц.


  1. imintsev
    03.12.2024 15:50

    Ждём продолжения


  1. imintsev
    03.12.2024 15:50

    Только есть замечание.
    При публикации гайдов по микроту было бы хорошо показывать не только скриншоты, но и команды терминала.
    Зачастую их читать удобнее