Привет, я использовал скрипт failover с http://wiki.mikrotik.com/wiki/Failover_Scripting. Теперь у меня проблема: переключение на резервное соединение автоматически происходит на eth2 и обратно не возвращается. Моя конфигурация:
# ------------------- header ------------------- # Скрипт от Tomas Kirnak, версия 1.0.7 # Если вы используете этот скрипт или редактируете и # повторно используете его, пожалуйста, сохраняйте этот заголовок. # # Для дополнительной информации и подробностей # об этом скрипте посетите страницу вики по адресу # http://wiki.mikrotik.com/wiki/Failover_Scripting # ------------------- header -------------------
# ------------- начало редактирования ------------- # Отредактируйте переменные ниже под свои нужды
# Укажите имена WAN-интерфейсов :local InterfaceISP1 ether1 :local InterfaceISP2 ether2
# Укажите IP шлюзов (или имена интерфейсов в случае PPP) :local GatewayISP1 192.168.0.1 :local GatewayISP2 192.168.1.1
У меня такая же проблема. Похоже, это происходит из-за того, что команда ping не может отправлять пакеты на IP-адреса через шлюз с маршрутом, у которого большее расстояние. То есть, как только увеличивается расстояние основного маршрута, оно уже никогда не уменьшается. Кто-нибудь знает подробности, как это заставить работать?
Зачем использовать такой огромный скрипт? Допустим, у вас есть два WAN-порта, оба с маскарадом. Для каждого порта у вас есть один маршрут по умолчанию: один с дистанцией 12, второй с дистанцией 13. Затем вы выбираете какой-то публичный IP, который хотите проверить через первый шлюз. Для него нужно задать статический маршрут с дистанцией 1. Также вы ставите на него статический маршрут-черную дыру с дистанцией 99. После этого настраиваете netwatch для проверки этого тестового IP. Если проверка не проходит, просто меняете дистанцию 12 у маршрута по умолчанию на 22 с помощью netwatch в состоянии «down»: /ip route set distance=22 [find distance=12]; Если тестовый IP становится доступен, меняете маршрут обратно с помощью того же netwatch в состоянии «up»: /ip route set distance=12 [find distance=22]; И всё. Аналогично можно сделать для второго маршрута или для любого количества WAN-портов, когда хотите организовать фейловер.
Это могло бы сработать, но почему тогда не проходит ping через второй интерфейс, у которого метрика выше, чем у первого? У меня несколько Mikrotik, и только на одном всё работает. В первом случае интернет приходит по DHCP, во втором у провайдера PPPoE. Если на интерфейсах стоят статические адреса — это не работает. Почему?
Процедура маршрутизации всегда выбирает самый подходящий активный маршрут. Если подходит несколько маршрутов, побеждает тот, у которого меньшее расстояние.