Многостраничная маршрутизация OpenBSD, если возникла проблема

521
user3488973

Я пытаюсь управлять настройкой «отработки отказа» для частной сети под управлением NAT с двумя не очень стабильными соединениями WAN (LTE / 3g).

Топология довольно типична: хосты из внутренней сети подключаются к внутреннему интерфейсу [int_if] блока OpenBSD, затем трафик передается через NAT с PF на один из двух внешних интерфейсов [ext_if1 и ext_if2] .

LAN---->[int_if]--NAT--[ext_if1 or ext_if2]---->WAN1 or WAN2 (depending on kernel decision). 

Я использую статические IP-адреса на обоих выходных интерфейсах, каждый в отдельной подсети и с маршрутами по умолчанию для нескольких путей к блокам маршрутизатора LTE / 3g интернет-провайдера, как описано в Faq OpenBSD для балансировки нагрузки с одинаковой стоимостью.

К сожалению, я страдаю от этого раздражающего поведения:

  1. Многолучевые маршруты не работают, если они установлены в файле hostname.interface . В этом случае оба маршрута по умолчанию присутствуют в таблице маршрутизации, но без флагов «P». Пока я не сбрасываю маршруты и не устанавливаю их снова вручную, весь трафик передается только через один из двух шлюзов, выбранный, как я полагаю, в зависимости от алфавитного порядка имени интерфейса. Выглядит так, как если бы он был просто «стандартным» шлюзом по умолчанию, не задействованным многолучевым распространением ( net.inet.ip.multipathконечно, установлено 1).

  2. Хотя многолучевые маршруты по умолчанию, установленные «вручную», похоже, работают хорошо - в таблице маршрутизации появляется флаг «P», а neststat -r показывает растущий трафик на обоих маршрутах, а также последовательность команд traceroute, а затем возникает еще один беспорядок.

  3. ping -I one_of_ext_if's_ip some.internet.host работает, я бы сказал ... случайно, не в зависимости от фактического состояния соединения с провайдером. Иногда использование ip-адреса вместо cname помогает на одном интерфейсе, в то время как другой «предпочитает» cname. Пинги случайным образом аннулируются, в то время как трафик http из локальной сети сбалансирован по нагрузке без задержек. Я не блокирую исходящий трафик с помощью PF, так что это не главное, отключение pf вообще ничего не меняет (кроме отключения локальной сети от мира). Если все вернуть обратно к стандартному, единственная настройка шлюза по умолчанию устраняет проблему - я могу вручную переключаться между обоими маршрутами по умолчанию, и пингс подойдет, если интернет-провайдер жив.

Я провел две ночи в поиске и тестировании Google, чтобы выяснить, что я делаю неправильно, и до сих пор не понимаю, почему этот конфиг работает так странно. И, конечно же, понятия не имею, как я могу отслеживать соединения для переключения при сбое с помощью ifstated, когда pinging world не работает, даже если мои провайдеры еще живы. И когда они действительно умерли на какое-то время, балансировка нагрузки отправила запросы локальной сети, чтобы лишить возможности обнаружить необнаруженное мертвое соединение.

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

Я ценю любую помощь ...

1

0 ответов на вопрос