Есть пример:
wiki.mikrotik.com/wiki/Advanced_Routing_Failover_w...
Я рассматриваю расширенный вариант с проверками 4 хостов (2 через ISP1, и еще 2 других хоста через ISP2). В общих чертах идея ясная, у меня все работает, но с доработками, но не в них вопрос, а в ясности процесса. На всякий случай, я видел статьи и на хабре и много где еще.
Хочется понять, что должно быть добавлено к официальному wiki, которое я привел выше.
Привожу код (пронумерую строки, ясное дело, в скрипте нумерации нет):
1) /ip route
2) add dst-address=Host1A gateway=GW1 scope=10
3) add dst-address=Host1B gateway=GW1 scope=10
4) add dst-address=Host2A gateway=GW2 scope=10
5) add dst-address=Host2B gateway=GW2 scope=10
6) add dst-address=GW1 gateway=Host1A scope=10 target-scope=10 check-gateway=ping
7) add dst-address=GW1 gateway=Host1B scope=10 target-scope=10 check-gateway=ping
8) add dst-address=GW2 gateway=Host2A scope=10 target-scope=10 check-gateway=ping
9) add dst-address=GW2 gateway=Host2B scope=10 target-scope=10 check-gateway=ping
check-gateway=ping проверяет доступность хоста, указанного как шлюз (Host1A...Host2B, я использовал 8.8.8.8, 8.8.4.4 и еще два других IP). Если он не доступен, то шлюз помечается как недействующий (офиц. wiki: Periodically (every 10 seconds) check gateway by sending either ICMP echo request (ping) or ARP request (arp). If no response from gateway is received for 10 seconds, request times out. After two timeouts gateway is considered unreachable. After receiving reply from gateway it is considered reachable and timeout counter is reset.).
Какие при этом должны быть прописаны дефолтные маршруты?
Первое, что приходит в голову (default listing v.1):
add dst-address=0.0.0.0/0 gateway=GW1 distance=1
add dst-address=0.0.0.0/0 gateway=GW2 distance=2
не будут работать как failover, т.к. даже если ISP1 рухнет и Host1A и Host1B станут недоступными, это никак не отразится на маршрутах по-умолчанию (0.0.0.0/0).
Вот такой вариант (default listing v.2):
/ip route add dst-address=0.0.0.0/0 gateway=Host1A distance=1 check-gateway=ping
/ip route add dst-address=0.0.0.0/0 gateway=Host2A distance=2 check-gateway=ping
мне ясен, он работает. Но он:
- работает вовсе не завися от строк 6)-9), они просто не нужны при таком раскладе.
- не дает преимущества проверки доступности сразу двух хостов через ISP1 и других двух хостов через ISP2
Если "доработать" пример из wiki, снабдить дефолтные маршруты метками ISP1 и ISP2 соответственно, то с помощью Netwatch можно создать задания, которые при недоступности Host1A выполнят что-то вроде:
/ip route disable [find comment="ISP1"]
а при доступности:
/ip route enable [find comment="ISP1"]
Все здорово, и так тоже работает.
Вопрос: почему в wiki по ссылке в начале вообще ничего не сказано про дефолтные маршруты? Подразумевается, что читающий сам допрет, что надо как-то изворачиваться? Зачем даны строки 6)-9) - я так и не понял их реальное функционирование. Можете прояснить для меня цепочку?