Информация
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
Контакты
Новинка
Распродажа
Новости
Доставка
Оплата
Загрузки
  • Прошивки
    • WinBox
    • RouterOS
    • Мобильные приложения MikroTik
    • Архив
  • Changelogs
  • RouterOS
  • Мобильные приложения MikroTik
  • Архив
Форум
Настройка
    info@mikrotik.moscow
    +7 495 320-55-52
    Заказать звонок
    Mikrotik.moscow
    Каталог
    • Акции
      Акции
    • Маршрутизаторы
      Маршрутизаторы
    • Коммутаторы
      Коммутаторы
    • Радиомосты и уличные точки доступа
      Радиомосты и уличные точки доступа
    • Wi-Fi для дома и офиса
      Wi-Fi для дома и офиса
    • LTE/5G
      LTE/5G
    • Powerline адаптеры
      Powerline адаптеры
    • IoT устройства
      IoT устройства
    • Оборудование 60 ГГц
      Оборудование 60 ГГц
    • Материнские платы RouterBOARD
      Материнские платы RouterBOARD
    • Корпуса
      Корпуса
    • Интерфейсы
      Интерфейсы
    • SFP/QSFP трансиверы
      SFP/QSFP трансиверы
    • Аксессуары
      Аксессуары
    • Антенны
      Антенны
    • Архив
      Архив
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Скачать WinBox Скачать Прошивки Форум > RouterOS Форум > SwOS Форум > Железо
    Mikrotik.moscow
    Каталог
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Mikrotik.moscow
    Телефоны
    +7 495 320-55-52
    Заказать звонок
    0
    0
    0
    Mikrotik.moscow
    • +7 495 320-55-52
      • Назад
      • Телефоны
      • +7 495 320-55-52
      • Заказать звонок
    • info@mikrotik.moscow
    • г. Москва, ул. Бакунинская, 84
    • Пн-Пт: 09-00 до 18-00
      Сб-Вс: выходной


    • Кабинет
    • 0 Сравнение
    • 0 Избранное
    • 0 Корзина
    Главная
    Форум
    RouterOS
    КАК СДЕЛАТЬ: Dual WAN PCC с динамическим IP

    КАК СДЕЛАТЬ: Dual WAN PCC с динамическим IP

    Форумы: RouterOS, Аппаратное обеспечение, SwOS, Обратная связь, Объявления, Сторонние инструменты
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    КАК СДЕЛАТЬ: Dual WAN PCC с динамическим IP, RouterOS
     
    IntrusDave
    Guest
    #1
    0
    28.09.2016 15:41:00
    Привет, ребята, решил выложить свою настройку PCC, может кому-то пригодится. У меня есть два интернет-сервиса DOCSIS 3 (Charter Communications), у каждого динамический IP. WAN-интерфейсы называются «wan0» и «wan1». У меня два LAN-интерфейса — «lanBridge» и «iot_vlan». LAN между собой не связаны (не доверяю устройствам IoT в своей сети). По максимуму использую списки адресов и интерфейсов. Также включил скрипт, который каждые 5 минут обновляет маршруты при смене публичного IP. Внимание — скрипт НЕ сработает, если у вас на одном WAN-интерфейсе больше одного IP. Названия WAN-интерфейсов очень важны, нужно уметь их находить адрес и интерфейс:

    /interface ethernet
    set [ find default-name=ether9 ] comment="wan0" name=wan0
    set [ find default-name=ether10 ] comment="wan1" name=wan1

    Использую списки интерфейсов, чтобы упростить создание Mangle и фильтров:

    /interface list
    add name=lanLinks
    add name=wanLinks

    /interface list member
    add interface=iot_vlan list=lanLinks
    add interface=lanBridge list=lanLinks
    add interface=wan0 list=wanLinks
    add interface=wan1 list=wanLinks

    Расстояние по умолчанию для маршрутизатора у DHCP-клиента важно. Ставлю 100 для поддержки переключения при сбое:

    /ip dhcp-client
    add default-route-distance=100 disabled=no interface=wan0 use-peer-dns=no use-peer-ntp=no
    add default-route-distance=100 disabled=no interface=wan1 use-peer-dns=no use-peer-ntp=no

    Расстояние маршрутов PCC выставлено в 50, DHCP-клиент добавит остальные маршруты за вас.

    /ip route
    add comment=wan0 distance=50 gateway=66.215.192.1 routing-mark=to_wan0
    add comment=wan1 distance=50 gateway=66.215.176.1 routing-mark=to_wan1

    Это единственные NAT-правила, необходимые для работы PCC. Убедитесь, что они идут последними в цепочке srcnat.

    /ip firewall nat
    add action=masquerade chain=srcnat out-interface=wan0
    add action=masquerade chain=srcnat out-interface=wan1

    Порядок правил Mangle тоже важен. Использую списки адресов и интерфейсов, чтобы сократить количество записей.

    /ip firewall mangle
    add action=mark-connection chain=input comment=pcc_rule in-interface=wan0 new-connection-mark=wan0_conn passthrough=no
    add action=mark-connection chain=input comment=pcc_rule in-interface=wan1 new-connection-mark=wan1_conn passthrough=no
    add action=mark-routing chain=output comment=pcc_rule connection-mark=wan0_conn new-routing-mark=to_wan0 passthrough=no
    add action=mark-routing chain=output comment=pcc_rule connection-mark=wan1_conn new-routing-mark=to_wan1 passthrough=no
    add action=accept chain=prerouting comment=pcc_rule dst-address-list=privateNetworks in-interface-list=lanBridge
    add action=accept chain=prerouting comment=pcc_rule dst-address-list=wanSubnets in-interface-list=lanBridge
    add action=mark-connection chain=prerouting comment=pcc_rule dst-address-type=!local in-interface-list=lanLinks new-connection-mark=wan0_conn passthrough=yes per-connection-classifier=both-addresses-and-ports:2/0
    add action=mark-connection chain=prerouting comment=pcc_rule dst-address-type=!local in-interface-list=lanLinks new-connection-mark=wan1_conn passthrough=yes per-connection-classifier=both-addresses-and-ports:2/1
    add action=mark-routing chain=prerouting comment=pcc_rule connection-mark=wan0_conn in-interface-list=lanLinks new-routing-mark=to_wan0 passthrough=yes
    add action=mark-routing chain=prerouting comment=pcc_rule connection-mark=wan1_conn in-interface-list=lanLinks new-routing-mark=to_wan1 passthrough=yes

    Это используется в правилах Mangle, маршрутизирует локальный и шлюзовой трафик на нужный интерфейс.

    /ip firewall address-list
    add address=192.168.0.0/16 list=privateNetworks
    add address=172.16.0.0/16 list=privateNetworks
    add address=10.0.0.0/8 list=privateNetworks
    add address=66.215.192.0/22 comment=wan0 list=wanSubnets
    add address=66.215.176.0/22 comment=wan1 list=wanSubnets

    Правила фильтрации — полностью опциональны, они не нужны для работы PCC. Вот базовая рамка, которой пользуюсь:

    /ip firewall filter
    add action=accept chain=Filter connection-state=established,related
    add action=drop chain=Filter comment="Неверные пакеты (нет валидного текущего соединения)" connection-state=invalid
    add action=drop chain=Filter comment="Неверная комбинация TCP-флагов" protocol=tcp tcp-flags=!fin,!syn,!rst,!ack
    add action=drop chain=Filter comment="Неверная комбинация TCP-флагов" protocol=tcp tcp-flags=fin,syn
    add action=drop chain=Filter comment="Неверная комбинация TCP-флагов" protocol=tcp tcp-flags=fin,rst
    add action=drop chain=Filter comment="Неверная комбинация TCP-флагов" protocol=tcp tcp-flags=fin,!ack
    add action=drop chain=Filter comment="Неверная комбинация TCP-флагов" protocol=tcp tcp-flags=fin,urg
    add action=drop chain=Filter comment="Неверная комбинация TCP-флагов" protocol=tcp tcp-flags=syn,rst
    add action=drop chain=Filter comment="Неверная комбинация TCP-флагов" protocol=tcp tcp-flags=rst,urg
    add action=drop chain=Filter comment="Неверный TCP источник (порт 0)" protocol=tcp src-port=0
    add action=drop chain=Filter comment="Неверный TCP адресат (порт 0)" dst-port=0 protocol=tcp
    add action=drop chain=Filter comment="Неверный UDP источник (порт 0)" protocol=udp src-port=0
    add action=drop chain=Filter comment="Неверный UDP адресат (порт 0)" dst-port=0 protocol=udp
    add action=return chain=Filter comment="Возвращаемся к цепочке, из которой прыгнули"
    add action=jump chain=input comment="Проверка на плохой трафик в цепочке 'Filters'" jump-target=Filter
    add action=accept chain=input in-interface-list=lanLinks
    add action=accept chain=input dst-port=22,8291 protocol=tcp
    add action=drop chain=input in-interface-list=wanLinks
    add action=jump chain=forward comment="Проверка на плохой трафик в цепочке 'Filter'" jump-target=Filter
    add action=accept chain=forward in-interface=lanBridge out-interface-list=wanLinks
    add action=accept chain=forward in-interface=iot_vlan out-interface-list=wanLinks
    add action=drop chain=forward log=yes

    Этот скрипт должен запускаться каждые несколько минут. Он обновляет шлюзы и списки адресов под текущие шлюзы и подсети WAN:

    # Dynamic IP Updater

    :local wan0name "wan0";
    :local wan1name "wan1";
    :global wan0address;
    :global wan1address;

    :local wan0ip [/ip dhcp-client get [find interface="$wan0name"] value-name=address];
    :if ($wan0address != $wan0ip) do={
    :global wan0address [:pick $wan0ip 0 [:find $wan0ip "/"]];
    :local wan0gateway [/ip dhcp-client get [find interface="$wan0name"] value-name=gateway];
    :local wan0temp [/ip address get [find interface="$wan0name"] value-name=network]
    :local wan0subnet ($wan0temp . "/" . [:pick $wan0ip ([:find $wan0ip "/"]+1) [:len $wan0ip]])
    /ip route set [find comment="wan0"] gateway=$wan0gateway;
    /ip firewall address-list set [find comment="wan0"] address=$wan0subnet;
    }

    :local wan1ip [/ip dhcp-client get [find interface="$wan1name"] value-name=address];
    :if ($wan1address != $wan1ip) do={
    :global wan1address [:pick $wan1ip 0 [:find $wan1ip "/"]];
    :local wan1gateway [/ip dhcp-client get [find interface="$wan1name"] value-name=gateway];
    :local wan1temp [/ip address get [find interface="$wan1name"] value-name=network]
    :local wan1subnet ($wan1temp . "/" . [:pick $wan1ip ([:find $wan1ip "/"]+1) [:len $wan1ip]])
    /ip route set [find comment="wan1"] gateway=$wan1gateway;
    /ip firewall address-list set [find comment="wan1"] address=$wan1subnet;
    }

    Надеюсь, это поможет упростить настройку Dual WAN / Dynamic IP PCC для тех, кому это нужно. Если помог — буду благодарен за пару карма-поинтов!
     
     
     
    CoolTom
    Guest
    #2
    0
    03.05.2019 14:01:00
    Просто интересно: почему ты не добавил скрипт DHCP в /ip dhcp-client – Lease script? Он будет запускаться всегда (только) когда DHCP-клиент получает новый лиз или теряет существующий. Нет необходимости ставить его в расписание и ждать задержки при обновлении адресов... ?
     
     
     
    angphc
    Guest
    #3
    0
    07.11.2017 02:03:00
    Выглядит очень полезно, я пытаюсь разобраться в вашей конфигурации и скрипте, так как раньше никогда не использовал RouterOS. Интересно, где именно вы прописали  
    /ip route  
    add comment=wan0 distance=50 gateway=66.215.192.1 routing-mark=to_wan0  
    add comment=wan1 distance=50 gateway=66.215.176.1 routing-mark=to_wan1  
    Откуда взялись эти IP-адреса? Это специфично для вашего провайдера? Мне нужно выяснять их у своего провайдера или они просто для запуска, пока скрипт не определит шлюзы/маршруты?  
    Спасибо за усилия, что поделились этим руководством.  
    С уважением, Вилл
     
     
     
    Sob
    Guest
    #4
    0
    03.05.2019 14:50:00
    Возможно, потому что в старом RouterOS не было скриптов для аренды, и хотя эта функция появилась в 2016 году, иногда люди просто пропускают новые возможности или уже имеют старые рабочие решения, которые не хотят переделывать.
     
     
     
    anav
    Guest
    #5
    0
    03.05.2019 15:11:00
    Привет, @CoolTom! Проблема с этим скриптом, по крайней мере для меня, в том, что мой основной WAN — это Bell Fibre. Если по какой-то причине IP пропадает и переключается на кабель (в этом проблем нет), то обратно на основной (Bell) вернуться не получится, если IP изменится. Дело в том, что у них часто тоже меняется шлюз, и хотя новый шлюз определяется и фиксируется моим DHCP-клиентом, мне приходится вручную заходить в Winbox, смотреть новый шлюз и потом вставлять его в свои IP-правила (рекурсивного) маршрутизации. Есть ли способ в скрипте добавить эту функцию — чтобы гарантировать, что Bell WAN поднимется обратно, даже если изменятся и IP, и шлюз? Если да, то, скорее всего, начну использовать PCC и обе свои линии, в режиме балансировки нагрузки (PCC, но с приоритетом на основное подключение). @intrus dave (ты так близко к Канаде, у тебя сосед Онтарио).
     
     
     
    sindy
    Guest
    #6
    0
    03.05.2019 16:56:00
    Как предложил @Sob, пару лет назад стало возможно добавить скрипт в конфигурацию /ip dhcp-client, который клиент вызывает каждый раз, когда получает (или теряет) новый лизинг. И с помощью этого скрипта можно обновлять маршруты с IP-адресом нового шлюза. Да, некоторые имена переменных приходится угадывать, и приходится использовать нестандартный синтаксис вроде $“gateway-address”, потому что в них есть символы, отличные от букв и цифр, но это работает.
     
     
     
    anav
    Guest
    #7
    0
    03.05.2019 17:02:00
    Большое спасибо! (Sob&Sindy)
     
     
     
    djago
    Guest
    #8
    0
    11.09.2017 14:27:00
    Привет! Спасибо! Всё работает нормально с моей настройкой. Можно задать тебе вопрос по этому поводу? У меня проблемы с одним из провайдеров — связь периодически пропадает. Я пытаюсь пинговать через проблемный адаптер, но не могу выйти из роутера. Однако это не проблема провайдера, а настройка роутера. Не мог бы ты помочь? Спасибо!
     
     
     
    IntrusDave
    Guest
    #9
    0
    12.09.2017 03:41:00
    Вам нужно настроить статический маршрут, используя WAN, через который вы хотите, чтобы проходил пинг.
     
     
     
    djago
    Guest
    #10
    0
    14.09.2017 00:23:00
    Я ошибочно полагал, что инструмент ping должен быть независим от настроек и работать напрямую через интерфейс… Попробую, как ты предложил.
     
     
     
    CoolTom
    Guest
    #11
    0
    07.05.2019 15:46:00
    Спасибо за ответ, ребята! Я сейчас встал на LTE-настройке — 2 LTE-модема и 1 кабельный WAN через eth1. Eth1 работает через DHCP-клиент, там проблем нет. Использую MikroTik LTE-модемы. LTE-интерфейс получает IP не через DHCP-клиент, а MikroTik автоматически добавляет его как динамический адрес в /ip addresses. Это не проблема, я могу получить этот IP или сетевой адрес из адресов вместо dhcp client:

    :put [/ip address get [find interface="lte1"] value-name=address]
    :put ([/ip address get [find interface="lte1"] value-name=network] & 255.255.255.0)

    Но нет информации про шлюз. Динамическая маршрут по умолчанию от LTE создаётся с параметрами distance=1 dst-address=0.0.0.0/0 gateway=lte1.  
    Так что для LTE мне надо создавать маршруты без IP шлюза, а просто указывать интерфейс LTE как шлюз?
     
     
     
    sebastia
    Guest
    #12
    0
    07.05.2019 16:12:00
    LTE, вероятно, получает IP /32? Это точка-точка соединения, и в таком случае «шлюз» может определяться операционной системой (= IP на другом конце), поэтому интерфейса хватает.
     
     
     
    sindy
    Guest
    #13
    0
    07.05.2019 17:15:00
    Существует два типа поведения LTE-модемов. Первые эмулируют последовательные модемы и используют PPP, поэтому DHCP нет, и адрес шлюза не нужен, так как с удалённой стороны Point to Point-соединения может быть подключено только одно устройство, как объяснил @Sebastia. Вторые эмулируют сетевые карты, используют DHCP и таким образом предоставляют адрес шлюза по умолчанию. Проблема второго типа LTE в том, что DHCP-клиент добавляется «автодинамически», поэтому нельзя изменить его параметры и, соответственно, привязать к нему скрипт. Но хотя бы есть адрес шлюза, так что можно использовать рекурсивный поиск следующего хопа с помощью расписанного скрипта для обновления IP шлюза. С PPP LTE такого просто не получится из-за полного отсутствия адреса шлюза.
     
     
     
    CoolTom
    Guest
    #14
    0
    12.05.2019 10:30:00
    Привет, ребята, спасибо за ответ. Я использую Mikrotik LTE карту, так что у меня второй вариант. Вы правы, в Winbox сетевую маску не показывает, но если посмотреть через командную строку, то там стоит /32. Я могу получить:

    [admin@LTEstream] > put [/ip address get [find interface="lte1"] value-name=address]
    10.X.X.31/32

    [admin@LTEstream] > put [/ip address get [find interface="lte1"] value-name=network]
    10.X.X.31

    [admin@LTEstream] > put ([/ip address get [find interface="lte1"] value-name=network] & 255.255.255.0)
    10.X.X.0

    Так что, стоит ли мне в mangle использовать 10.X.X.0/32 как подключённую сеть (добавлять её в адресный список с комментарием "xx", чтобы перезаписывать старую)? Можете привести пример скрипта для «recursive next-hop search»? Чтобы запускать скрипт, я думаю, можно использовать триггер «если интерфейс lte1 меняет состояние на running», но пока не знаю, как это сделать) — реально ли запускать скрипт на основе такого события?
     
     
     
    sindy
    Guest
    #15
    0
    12.05.2019 11:32:00
    Почему ты думаешь, что содержимое поля комментария влияет на обработку правила? Никак ново добавленное правило не может перезаписать уже существующее. Можно поставить новое правило перед старым в цепочке, и тогда новое «затемнит» старое — если пакет подходит под новое правило, он вообще до старого не дойдет, хотя мог бы подойти и к нему. Либо можно изменить существующее правило, добавив новые условия сопоставления или убрав некоторые через команду unset. Либо полностью удалить старое правило.

    Рекурсивный поиск следующего хопа в контексте dual-wan имеет смысл для автоматического переключения без использования скриптов, в таком «программировании», где регулярно проверяется работоспособность каждого WAN-канала, оценивая его способность доставить пакет хосту в интернете. Так можно узнать не только, подключается ли провайдер, но и работает ли вообще интернет.

    Не уверен, можно ли использовать это, если у «connected next hop» нет IP — надо сначала проверить. Если нельзя, придется делать всё через собственные скрипты: менять конфигурацию или добавлять динамические элементы в списки адресов, чтобы фактически отключать какие-то правила файрвола. Такое изменение не приводит к записи на флеш.

    Знаю, ты, наверное, ожидал другого ответа, так что потерпи.

    Вот в чём суть — напрямую никак. Некоторые объекты в конфигурации могут запускать скрипт при событии (подключение, отключение, изменение состояния адреса), другие (например, интерфейсы LTE) — нет. Нет универсального способа задать изменение состояния конкретного объекта, чтобы он запустил скрипт.

    Поэтому единственный вариант — использовать планировщик задач, который будет периодически запускать скрипт, а тот проверять состояние объектов, сохранять его для следующего запуска и делать что-то или запускать другой скрипт, если текущее и сохранённое состояния отличаются.
     
     
     
    CoolTom
    Guest
    #16
    0
    12.05.2019 12:14:00
    Я неправильно выразился. Я думал, что это значит: найти элемент списка адресов с комментарием «wan0» и «перезаписать» его новым IP/подсетью — чтобы список адресов не рос за счет добавления всё новых и новых IP в адрес-лист.  
    /ip firewall address-list set [find comment=“wan0”] address=$wan0subnet;

    То есть ты меняешь адрес-лист и используешь его в правилах — менять сами правила не нужно. Правильно?  

    Почему ты думаешь, что содержимое поля комментария влияет на то, как обрабатывается правило? Остальное особо не помогает, но спасибо, что объяснил.
     
     
     
    sindy
    Guest
    #17
    0
    12.05.2019 12:30:00
    Правильно, таким образом вы заменяете поле адреса в существующем элементе списка адресов.
     
     
     
    CoolTom
    Guest
    #18
    0
    12.05.2019 14:02:00
    Кстати, как добавить строку «/32» в конец? Просто никак не получается…  
    /ip firewall address-list set [find comment=“wan0”] address=“[([/ip address get [find interface="lte1"] value-name=network]&255.255.255.0)]”.“/32”]
    /ip firewall address-list set [find comment=“wan0”] address=([/ip address get [find interface=“lte1”] value-name=network]&255.255.255.0)].“/32”
     
     
     
    sindy
    Guest
    #19
    0
    12.05.2019 14:50:00
    Две вещи: я не понимаю, зачем определять адрес сети /24, к которой принадлежит исходный адрес, а потом добавлять этот сетевой адрес как /32 — мне это кажется бессмысленным. К тому же, нужно использовать скобки, чтобы отделять операции разных типов (целочисленные, IP-маски, строковые) друг от друга:

    [me@MyTik] > put (192.168.1.3&255.255.255.0)
    192.168.1.0
    [me@MyTik] > put ((192.168.1.3&255.255.255.0)."/32")
    192.168.1.0/32
     
     
     
    CoolTom
    Guest
    #20
    0
    13.05.2019 08:46:00
    Это был, наверное, самый простой способ поставить в конце IP ноль, чтобы добавить всю подсеть в список адресов (чтобы управлять подключёнными сетями). /32 — это маска для «приватного IP провайдера в LTE». Если я укажу всю подсеть /24, должно получиться то же самое, по моему...
     
     
     
    Страницы: 1
    Читают тему
    +7 495 320-55-52
    info@mikrotik.moscow
    Электрозаводская, Бауманская
    Москва, ул. Бакунинская, 84с21
    Конфиденциальность Оферта
    © 2026 «Mikrotik.Moscow»
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры