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

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

1 ответ1

0

Похоже, это проблема ipv4.
Использование ipv6 и Linux Ubuntu с ядром 4.4 с почти такой же настройкой работало, как и ожидалось. Ссылка на изображение топологии
Хотя сообщения ping ICPM всегда направляются через первый nexthop, сообщения tcp равномерно распределяются по следующим. Установленные tcp-сессии кажутся стабильными (поэтому ядро правильно определяет потоки).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .