Многопутевая маршрутизация TCP Anycast: маршрутизатор всегда предпочитает один следующий переход другому

294
Benny93

Я пытаюсь использовать TCP Anycast без дополнительных протоколов для подключения одного клиента к одному из нескольких хостов с одинаковым anycast IP.
Моя топология выглядит следующим образом:

Link to image of topology

Сервер в середине - это машина 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 разным, когда пакет отправляется с клиента, чем когда он отправляется с самого маршрутизатора?

Спасибо за вашу помощь!

0
Ссылка на видео, показывающее сценарий 1: [https://youtu.be/JYoxcsVEbsc] (https://youtu.be/JYoxcsVEbsc) Benny93 6 лет назад 0

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

0
Benny93

It seems like this is a problem of ipv4.
Using ipv6 and a linux kernel 4.4 ubuntu machine with nearly the same setup worked as expected. Link to image of topology
Although ICPM ping messages always get routet through the first nexthop, tcp messages are equaly distributed along the nexthops. Established tcp sessions seem to be stable (thus the kernel identifies flows correctly).

Похожие вопросы