_Комментарий о PPP uplinks (таких как PPPoE): - важно в RouterOS до версии 7 Введение Предположим, что у нас есть несколько WAN-соединений, и мы хотим отслеживать, доступен ли интернет через каждое из них. Проблема может возникнуть в любом месте. Если ваша VPN не может подключиться — значит, проблем нет, ваш маршрут по умолчанию с gateway=это-vpn-соединение будет неактивен. Если ваш ADSL-модем отключен — тогда check-gateway=ping на стадии, и тоже проблем нет. Но что, если ваш модем работает, а телефонная линия отключена? Или у вашего интернет-провайдера возникла внутренняя проблема, и traceroute показывает всего несколько переходов — и затем останавливается... Некоторые люди используют инструмент NetWatch для мониторинга удаленных мест. Другие используют скрипты для периодической проверки удалённых хостов пингом. А затем отключают маршруты или меняют поведение маршрутизации другим способом. Но возможности RouterOS позволяют нам использовать только /ip route для такого контроля — без скриптов и netwatch вообще! Реализация Основная настройка Предположим, у нас есть два uplinks: GW1, GW2. Это могут быть адреса ADSL-модемов (например, 192.168.1.1 и 192.168.2.1), или адреса PPP-интерфейсов (например, pppoe-out1 и pptp-out1). Затем у нас есть какие-то правила маршрутной политики, так что весь исходящий трафик маркируется метками ISP1 (которые идут к GW1) и ISP2 (которые идут к GW2). И мы хотим отслеживать Host1 через GW1, и Host2 через GW2 — это могут быть популярные интернет-сайты, такие как Google, Yahoo и т.д. Сначала создайте маршруты к этим хостам через соответствующие шлюзы: /ip route
add dst-address=Host1 gateway=GW1 scope=11
add dst-address=Host2 gateway=GW2 scope=11 Теперь создадим правила для маркера маршрутизации ISP1 (одно для основного шлюза и другое для резервного): /ip route
add distance=1 gateway=Host1 target-scope=11 routing-mark=ISP1 check-gateway=ping
add distance=2 gateway=Host2 target-scope=11 routing-mark=ISP1 check-gateway=ping Эти маршруты будут разрешаться рекурсивно (см. Manual:IP/Route#Nexthop_lookup) и будут активными только если HostN доступен по пингу. Затем те же правила для маркера ISP2: /ip route
add distance=1 gateway=Host2 target-scope=11 routing-mark=ISP2 check-gateway=ping
add distance=2 gateway=Host1 target-scope=11 routing-mark=ISP2 check-gateway=ping Проверка нескольких хостов на каждый uplink Если Host1 или Host2 не работают в #Основной настройке, соответствующая линия считается тоже неработающей. Для резервирования мы можем использовать несколько хостов на каждый uplink: давайте отслеживать Host1A и Host1B через GW1, и Host2A и Host2B через GW2. Также мы будем использовать двойное рекурсивное разрешение, чтобы было меньше мест, где упоминается HostN. Сначала нам нужно создать маршруты к нашим проверяемым хостам: /ip route
add dst-address=Host1A gateway=GW1 scope=11
add dst-address=Host1B gateway=GW1 scope=11
add dst-address=Host2A gateway=GW2 scope=11
add dst-address=Host2B gateway=GW2 scope=11 Затем давайте создадим адреса для "виртуальных" переходов, которые будем использовать в дальнейших маршрутах. В качестве примера я использую 10.1.1.1 и 10.2.2.2: /ip route
add dst-address=10.1.1.1 gateway=Host1A scope=12 target-scope=11 check-gateway=ping
add dst-address=10.1.1.1 gateway=Host1B scope=12 target-scope=11 check-gateway=ping
add dst-address=10.2.2.2 gateway=Host2A scope=12 target-scope=11 check-gateway=ping
add dst-address=10.2.2.2 gateway=Host2B scope=12 target-scope=11 check-gateway=ping А теперь мы можем добавить маршруты по умолчанию для клиентов: /ip route
add distance=1 gateway=10.1.1.1 target-scope=12 routing-mark=ISP1
add distance=2 gateway=10.2.2.2 target-scope=12 routing-mark=ISP1
add distance=1 gateway=10.2.2.2 target-scope=12 routing-mark=ISP2
add distance=2 gateway=10.1.1.1 target-scope=12 routing-mark=ISP2 Обход 1 В версиях ROS по крайней мере до 4.10 есть ошибка, и если ваш Ethernet-интерфейс отключается (например, когда ваш напрямую подключенный ADSL-модем выключается) и затем включается, рекурсивные маршруты не пересчитываются (или что-то в этом роде), и весь трафик все еще идет через другой uplink. В качестве обходного пути можно использовать дополнительные правила для каждого HostN. При их добавлении всё пересчитывается корректно: /ip route
add dst-address=Host1 type=blackhole distance=20
add dst-address=Host2 type=blackhole distance=20 Спасибо Валенсу Рияди, на MUM в Польше в 2010 году он случайно упомянул, что использование атрибута 'scope' возможно для проверки удаленного хоста для реализации резервного копирования Мартина (Ibersystems) - он попросил решение, и я придумал то, что вы видите выше =) Роберт Урбан (treborr) - он столкнулся с проблемой, упомянутой в Обходе1, и мы вдвоем ее решили =)
add dst-address=Host1 gateway=GW1 scope=11
add dst-address=Host2 gateway=GW2 scope=11 Теперь создадим правила для маркера маршрутизации ISP1 (одно для основного шлюза и другое для резервного): /ip route
add distance=1 gateway=Host1 target-scope=11 routing-mark=ISP1 check-gateway=ping
add distance=2 gateway=Host2 target-scope=11 routing-mark=ISP1 check-gateway=ping Эти маршруты будут разрешаться рекурсивно (см. Manual:IP/Route#Nexthop_lookup) и будут активными только если HostN доступен по пингу. Затем те же правила для маркера ISP2: /ip route
add distance=1 gateway=Host2 target-scope=11 routing-mark=ISP2 check-gateway=ping
add distance=2 gateway=Host1 target-scope=11 routing-mark=ISP2 check-gateway=ping Проверка нескольких хостов на каждый uplink Если Host1 или Host2 не работают в #Основной настройке, соответствующая линия считается тоже неработающей. Для резервирования мы можем использовать несколько хостов на каждый uplink: давайте отслеживать Host1A и Host1B через GW1, и Host2A и Host2B через GW2. Также мы будем использовать двойное рекурсивное разрешение, чтобы было меньше мест, где упоминается HostN. Сначала нам нужно создать маршруты к нашим проверяемым хостам: /ip route
add dst-address=Host1A gateway=GW1 scope=11
add dst-address=Host1B gateway=GW1 scope=11
add dst-address=Host2A gateway=GW2 scope=11
add dst-address=Host2B gateway=GW2 scope=11 Затем давайте создадим адреса для "виртуальных" переходов, которые будем использовать в дальнейших маршрутах. В качестве примера я использую 10.1.1.1 и 10.2.2.2: /ip route
add dst-address=10.1.1.1 gateway=Host1A scope=12 target-scope=11 check-gateway=ping
add dst-address=10.1.1.1 gateway=Host1B scope=12 target-scope=11 check-gateway=ping
add dst-address=10.2.2.2 gateway=Host2A scope=12 target-scope=11 check-gateway=ping
add dst-address=10.2.2.2 gateway=Host2B scope=12 target-scope=11 check-gateway=ping А теперь мы можем добавить маршруты по умолчанию для клиентов: /ip route
add distance=1 gateway=10.1.1.1 target-scope=12 routing-mark=ISP1
add distance=2 gateway=10.2.2.2 target-scope=12 routing-mark=ISP1
add distance=1 gateway=10.2.2.2 target-scope=12 routing-mark=ISP2
add distance=2 gateway=10.1.1.1 target-scope=12 routing-mark=ISP2 Обход 1 В версиях ROS по крайней мере до 4.10 есть ошибка, и если ваш Ethernet-интерфейс отключается (например, когда ваш напрямую подключенный ADSL-модем выключается) и затем включается, рекурсивные маршруты не пересчитываются (или что-то в этом роде), и весь трафик все еще идет через другой uplink. В качестве обходного пути можно использовать дополнительные правила для каждого HostN. При их добавлении всё пересчитывается корректно: /ip route
add dst-address=Host1 type=blackhole distance=20
add dst-address=Host2 type=blackhole distance=20 Спасибо Валенсу Рияди, на MUM в Польше в 2010 году он случайно упомянул, что использование атрибута 'scope' возможно для проверки удаленного хоста для реализации резервного копирования Мартина (Ibersystems) - он попросил решение, и я придумал то, что вы видите выше =) Роберт Урбан (treborr) - он столкнулся с проблемой, упомянутой в Обходе1, и мы вдвоем ее решили =)
