Pull to refresh

Comments 13

Тут habr.com/post/331544 есть скрипт который учитывает состояние гонки при работе DHCP cllient, да еще его можно использовать и без DHCP для формирования маршрутов.
Спасибо. Хороший скрипт. Много труда в него вложено. Но начинающие в нем заблудятся.
Моя статья написана как раз для упрощения понимания решения проблемы с dhcp.
Уже давненько можно вешать скрипт на DHCP Client и этот огород с рекурсивными маршрутами не нужен.
и этот огород с рекурсивными маршрутами не нужен

Похоже, Вы вообще не понимаете для чего нужна рекурсивная маршрутизация.
Да, в dhcp-client скрипт появился давно, с выходом 6.39.rcxx Только многие его до сих пор «не заметили». Именно поэтому, такой вопрос возникает у людей с завидной периодичностью. О том и статья.
Почему бы просто с помощью скрипта не анализировать каналы, тем же пингом на 8.8.8.8 и на основе этих данных переключать провайдеров если надо. Реализовал себе такое и на динамическом айпи где шлюз и айпи может менятся и скрипт сам все меняет, и в mangle все конекты к провайдерам закинул, все работает как часы
Потому, что в RouterOS существует штатный инструмент «check-gateway», специально для этого созданный и не требуется городить костылей.

Интерфейс pppoe-rt — PPPoE от Ростелекома, в котором бывают разные адреса шлюзов, в зависимости к какому load-balancer брасу подключается роутер, поэтому надо в маршруте прописывать его явно (примерно как в статье), поэтому накостылял такой крипт, который создаёт новый профиль в разделе PPP, и который надо выбрать для использования в PPPoE Client подключении к Ростелекому.


:global pppoert [/ip address get [find interface="pppoe-rt"] network];
:local comment "https://habrahabr.ru/post/313342/"
:local dstaddr "8.8.4.4/32"

/ip route set gateway="$pppoert" [/ip route find where comment=$comment dst-address=$dstaddr]

Где переменные:
pppoert [/ip address get [find interface="pppoe-rt"] network] — ищём интерфейс Ростелекома согласно имени pppoe-rt;
comment "https://habrahabr.ru/post/313342/" — комментарий интерфейса, для более точного поиска;
dstaddr "8.8.4.4/32" — что указано в качестве Dst.Address


Сам скрипт:
/ppp profile add change-tcp-mss=yes name=pppoe-Rostelecom on-up=":global pppoert [/ip address get [find interface=\"pppoe-rt\"] network];\r\
    \n:local comment \"https://habrahabr.ru/post/313342/\"\r\
    \n:local dstaddr \"8.8.4.4/32\"\r\
    \n\r\
    \n/ip route set gateway=\"\$pppoert\" [/ip route find where comment=\$comment dst-address=\$dstaddr]\r\
    \n" use-compression=no use-encryption=no use-mpls=no use-upnp=yes
Для интерфейсов типа «точка-точка», таких как PPPoE, допустимо в качестве шлюза использовать имя самого интерфейса. И да, там есть проблема — рекурсивный маршрут не строится когда gateway=интерфейс.
Спасибо за скриптик.

К сожалению это не работало в <= 6.43.8, маршрут был всегда неактивным.

Вообще, если нужно просто обновлять дефолтный маршрут для запасного провайдера можно просто в dhcp поставить distance побольше (в меню advanced)
Для запасного — да. Но если речь об основном провайдере, который выдаёт адреса и маршрут по DHCP, то приходится использовать скрипт.
Спасибо… Кажется, теперь я понял как вообще работают рекурсивные маршруты :-)
У вас ошибка в значении scope в «Создание пары маршрутов».
Вместо
/ip route add dst-address=8.8.4.4 gateway=127.0.0.1 scope=30 target-scope=30 comment=«isp1route» disabled=yes
должно быть
/ip route add dst-address=8.8.4.4 gateway=127.0.0.1 scope=10 comment=«isp1route» disabled=yes
Sign up to leave a comment.

Articles