Всем привет! Я заметил много жалоб на проблему зависания ethernet-портов в rb435G. Вот простое решение, которое поможет избежать перезагрузок и потерь пакетов до тех пор, пока MikroTik не выпустит фикс в ROS:
Зайдите в Switch > switch1 и снимите галочку с "switch all ports".
Затем перейдите в System > Scripts, нажмите "+", дайте скрипту имя: ether и вставьте туда следующий код:
:if ([/ping 192.168.1.1 interval=1 count=10] =0) do={ log info "ether port is down"; /interface ethernet switch set 0 switch-all-ports=yes ; /interface ethernet switch set 0 switch-all-ports=no }
Обратите внимание, что 192.168.1.1 — это IP-адрес любого другого RB, подключенного к RB435G через Ethernet-порт. Вы можете заменить его под вашу конфигурацию.
Далее идём в System > Netwatch, нажимаем "+", в поле host вводим 192.168.1.1 (IP другого RB через Ethernet), выставляем интервал 00:00:10 и таймаут 1000 мс. Вкладка Down, пишем:
/system script run ether
В Netwatch скопируйте правило из пункта 3 и измените интервал на 00:00:15 (обратите внимание, этот шаг важен — в тестах я заметил, что роутер иногда плохо реагирует на первое правило, поэтому нужно обязательно это).
Можно добавить ещё одно с интервалом 00:00:20 на всякий случай — это необязательно.
Вот и всё. Я проверял на ROS 5.8 и 435G, всё работает отлично. Благодаря этому можно избежать перезагрузки watchdog, и потери пакетов будут намного меньше в моменты, когда ether-порты rb435G перестают отвечать.
Можете протестировать это и на 493G, но там нужно использовать такой код:
:if ([/ping 192.168.1.1 interval=1 count=10] =0) do={ log info "ether port is down"; /interface ethernet switch set 0 switch-all-ports=yes ; /interface ethernet switch set 0 switch-all-ports=no ; /interface ethernet switch set 1 switch-all-ports=yes ; /interface ethernet switch set 1 switch-all-ports=no }
У этого устройства два чипа. На самом деле я не тестировал на 493G, но, думаю, должно работать.
Если используете switch-all-ports = yes, то меняйте местами команды yes и no в скрипте.
Буду рад вашим комментариям!
Зайдите в Switch > switch1 и снимите галочку с "switch all ports".
Затем перейдите в System > Scripts, нажмите "+", дайте скрипту имя: ether и вставьте туда следующий код:
:if ([/ping 192.168.1.1 interval=1 count=10] =0) do={ log info "ether port is down"; /interface ethernet switch set 0 switch-all-ports=yes ; /interface ethernet switch set 0 switch-all-ports=no }
Обратите внимание, что 192.168.1.1 — это IP-адрес любого другого RB, подключенного к RB435G через Ethernet-порт. Вы можете заменить его под вашу конфигурацию.
Далее идём в System > Netwatch, нажимаем "+", в поле host вводим 192.168.1.1 (IP другого RB через Ethernet), выставляем интервал 00:00:10 и таймаут 1000 мс. Вкладка Down, пишем:
/system script run ether
В Netwatch скопируйте правило из пункта 3 и измените интервал на 00:00:15 (обратите внимание, этот шаг важен — в тестах я заметил, что роутер иногда плохо реагирует на первое правило, поэтому нужно обязательно это).
Можно добавить ещё одно с интервалом 00:00:20 на всякий случай — это необязательно.
Вот и всё. Я проверял на ROS 5.8 и 435G, всё работает отлично. Благодаря этому можно избежать перезагрузки watchdog, и потери пакетов будут намного меньше в моменты, когда ether-порты rb435G перестают отвечать.
Можете протестировать это и на 493G, но там нужно использовать такой код:
:if ([/ping 192.168.1.1 interval=1 count=10] =0) do={ log info "ether port is down"; /interface ethernet switch set 0 switch-all-ports=yes ; /interface ethernet switch set 0 switch-all-ports=no ; /interface ethernet switch set 1 switch-all-ports=yes ; /interface ethernet switch set 1 switch-all-ports=no }
У этого устройства два чипа. На самом деле я не тестировал на 493G, но, думаю, должно работать.
Если используете switch-all-ports = yes, то меняйте местами команды yes и no в скрипте.
Буду рад вашим комментариям!