Назад | Перейти на главную страницу

Требуется простое решение для аварийного переключения Linux WAN

Я бьюсь головой об стену, чтобы придумать умное и простое решение для аварийного переключения WAN. Это для установки SOHO с двумя разными внешними IP-адресами. Требуется только отработка отказа исходящего соединения.

Брандмауэр - это Debian GNU / Linux, поэтому решение должно использовать Linux и быть программным.

Я хочу иметь возможность не только обнаруживать, если один из маршрутизаторов выходит из строя (это легко с iproute2), но и когда их соединения обрываются. Оба маршрутизатора не имеют SNMP или некоторых других стандартов RMON.

Есть ли что-то вроде утилиты ping, где я могу указать используемый по умолчанию маршрут?

Таким образом, я мог оптимально отслеживать обе ссылки с помощью небольшого скрипта. Или мне пойти другим путем?

Маршруты хоста к "канареечным" IP-адресам - это то, что вы ищете.

Выберите IP-адрес на дальней стороне каждого маршрутизатора, который будет использоваться в качестве «канарейки» для мониторинга с помощью PING (или HTTP GET, или любой другой метрики сбоев, которую вы хотите использовать). Добавьте статический маршрут с сетевой маской / 32 на брандмауэре для этого «канареечного» IP-адреса, чтобы отправить его на соответствующий маршрутизатор.

Если бы я отслеживал «10.0.0.1» через маршрутизатор «192.168.178.254», я бы добавил маршрут с route add 10.0.0.1 gw 192.168.178.254. После добавления этого маршрута весь трафик на 10.0.0.1 будет маршрутизироваться через шлюз 192.168.178.254. Если Интернет-соединение на дальней стороне 192.168.178.254 не работает, трафик на 10.0.0.1 никогда не будет доставлен в пункт назначения (PING не вернется и т. Д.).

Использование таких маршрутов хоста должно позволить вам написать простой сценарий для замены шлюза по умолчанию в случае сбоя одного из подключений к Интернету.

Это немного сложнее, поскольку я предполагаю, что ваши маршрутизаторы не могут экспортировать свои маршруты осмысленным образом. Если вам хочется вникнуть в это, помните, что когда вы отправляете пакет локально, IP-адрес по-прежнему является удаленным хостом, а MAC-адрес (в любом случае в Ethernet) основан на таблице маршрутов хостов и кэше arp.

Если вы опустите свое программное обеспечение на уровень ниже и используете ядро пакет вызовов для формирования сообщения, вы можете написать этот IP-пакет с выбранным вами MAC-адресом. Затем пакет будет использовать выбранный вами маршрутизатор в качестве первого перехода. Используйте это для проверки связи и отслеживания ответов, и вы сможете проверить подключение, не меняя настройки системы.

Конечно, для этого вам потребуются некоторые повышенные разрешения в вашей программе.

В противном случае предложенные Эваном записи в таблице принудительной одноадресной маршрутизации позволят вам не писать вещи, которые обращаются к ядру. Для любого метода, в котором маршрутизатор не участвует в сообщении вам, вам необходимо находиться в DMZ, иначе вы не сможете выбрать, куда будут идти ваши пакеты, если только вы каким-то образом не закончите исходная маршрутизация включен.

Если вы хотите использовать в качестве «канарейки» какой-либо кластер высокой доступности (например, yahoo.com или google.com), который использует циклический DNS и несколько IP-адресов (возможно, из нескольких диапазонов), эти маршруты хоста не очень полезны.

На хосте Linux у обычной утилиты ping есть два полезных аргумента:

ping -I <interface> example.com Ping будет отправлять пакеты с указанного интерфейса. Используйте его, если ваш хост имеет отдельный интерфейс для каждого соединения.

ping -m <interface> example.com Ping будет отправлять «отмеченные» исходящие пакеты; ядро может использовать эти метки для выбора исходящего маршрута. Полезно, если вы получаете доступ к обоим каналам восходящей связи через единый интерфейс. Для этого требуются правила маршрутизации IP на основе меток, которые вы, вероятно, будете использовать в любом случае на хосте с несколькими WAN (для отправки ответов на запросы из Интернета по той же ссылке, а не по маршруту по умолчанию). Вот очень краткое описание того, как сделать такую ​​маршрутизацию.