Я пытаюсь использовать TCP Anycast без дополнительных протоколов для подключения одного клиента к одному из нескольких хостов с одинаковым anycast IP.
Моя топология выглядит следующим образом:
Сервер в середине - это машина Ubuntu, предоставляющая два маршрута для любого адреса.
Моя конфигурация многолучевой маршрутизации (на маршрутизаторе):
`10.11.12.13 proto static
nexthop via 192.168.2.1 dev enp0s9 weight 1
nexthop via 192.168.3.1 dev enp0s10 weight 1`
Адрес anycast - 10.11.12.13
и он связан с локальной обратной связью двух маршрутизаторов с правой стороны.
С левой стороны находится клиент с маршрутизатором посередине в качестве шлюза по умолчанию.
Сценарий 1: Маршрутизатор посередине начинает сеанс tcp с произвольным адресом в качестве пункта назначения.
Сценарий 2: клиент с левой стороны начинает сеанс tcp с произвольным адресом в качестве пункта назначения.
Наблюдение:
При запуске сеанса tcp с маршрутизатора (Ubuntu Linux) все работает как нужно. Пакет SYN передается по одному из каждого прыжка с равной вероятностью. Когда сеанс установлен, все пакеты этого сеанса проходят один и тот же переход, сохраняя соединение живым (успешная многопутевая маршрутизация на основе потока).
Проблема возникает в сценарии 2, когда я пытаюсь установить сеанс tcp от клиента в 192.168.1.1/24. Маршрутизатор всегда пересылает пакеты только на один из хостов (тот, который имеет суффикс IP 3.1). Если я отключу соединение eth2 с этим хостом, маршрутизатор перенаправит пакеты на второй хост. Но при повторном резервировании eth2 соединение переключается обратно на хост на 3.1, что приводит к разъединению между клиентом и хостом с суффиксом 2.1.
Я могу опубликовать только одну ссылку на видео, поэтому вот видео, показывающее, как оно выглядит с точки зрения клиента: https://youtu.be/kthYK9uEwvM
Обратите внимание, что tcp SYN от клиента всегда перенаправляется на хост с суффиксом 3.1 (нижний правый угол).
Терминалы:
Маршрутизатор: вверху слева, клиент: внизу слева, хост 2.1: вверху справа, хост 3.1: внизу справа.
Моя версия ядра - 4.4 ядра Linux. Сеанс tcp устанавливается с использованием netcat (сервер) и telnet (клиент).
Изменение веса следующего сообщения также влияет только на маршрутизацию от маршрутизатора (192.168.1.254> 10.11.12.13).
Почему маршрутизатор пересылает пакет SYN разным, когда пакет отправляется от клиента, чем когда он отправляется от самого маршрутизатора?
Спасибо за вашу помощь!