Рейтинг:0

Как получить доступ к серверу Ubuntu на двух разных общедоступных IP-адресах

флаг cn

Я борюсь с текущей проблемой:

Справочная информация: Ubuntu 20.04 на Dell R710

У меня есть 2 разных подключения к Интернету с 2 маршрутизаторами, поставляемыми провайдером. Я подключил eno2 к маршрутизатору isp1 и получил IP-адрес 192.168.2.102 через постоянную аренду DHCP. Я подключил eno3 к маршрутизатору isp2 и получил IP-адрес 192.168.88.254 через постоянную аренду DHCP.

IP а

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    ссылка/петля 00:00:00:00:00:00 брд 00:00:00:00:00:00
    инет 127.0.0.1/8 область хоста lo
       valid_lft навсегда
    inet6 :: 1/128 узел области видимости
       valid_lft навсегда
2: eno1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq состояние DOWN группа по умолчанию qlen 1000
    ссылка/эфир d4:be:d9:ee:7b:75 brd ff:ff:ff:ff:ff:ff
3: eno2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    ссылка/эфир d4:be:d9:ee:7b:77 brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.102/24 brd 192.168.2.255 область глобальная динамическая noprefixroute eno2
       valid_lft 41 588 секунд;
    inet6 fe80::d6be:d9ff:feee:7b77/64 ссылка на область действия
       valid_lft навсегда
4: eno3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    ссылка/эфир d4:be:d9:ee:7b:79 brd ff:ff:ff:ff:ff:ff
    inet 192.168.88.254/24 brd 192.168.88.255 область глобальная динамическая noprefixroute eno3
       valid_lft 486 сек. selected_lft 486 сек.
    inet6 fe80::d6be:d9ff:feee:7b79/64 ссылка на объем
       valid_lft навсегда
5: eno4: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq состояние DOWN группа по умолчанию qlen 1000
    ссылка/эфир d4:be:d9:ee:7b:7b brd ff:ff:ff:ff:ff:ff
...

netstat -rn

Таблица IP-маршрутизации ядра
Шлюз назначения Флаги Genmask MSS Window irtt Iface
0.0.0.0 192.168.88.1 0.0.0.0 УГ 0 0 0 eno3
0.0.0.0 192.168.2.1 0.0.0.0 УГ 0 0 0 eno2
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 докер0
192.168.2.0 0.0.0.0 255.255.255.0 У 0 0 0 ено2
192.168.88.0 0.0.0.0 255.255.255.0 U 0 0 0 eno3

Проблема в том, что я могу получить доступ к серверу только с 1 (случайного) общедоступного IP-адреса за раз, если он находится за пределами локальной сети. Если 77.xx.xx.158 (ISP 2) доступен, то 5.xx.xx.55 (ISP 1) недоступен и наоборот, случайным образом после каждой загрузки.

Мне нужно иметь доступ к серверу на любом из общедоступных IP-адресов в любой момент времени.

Заранее благодарю за любое возможное решение.

FedKad avatar
флаг cn
Это нормально, так как пакеты могут маршрутизироваться через любой из двух интерфейсов (и никаких предпочтений нет). Как вы «заходите» на свой сервер? Если это ssh, вы можете запустить один экземпляр ssh, прослушивающий порт, скажем, 22 и привязанный к одному интерфейсу, а другой экземпляр прослушивающий другой порт (скажем, 2222) и привязанный к другому интерфейсу.
Рейтинг:1
флаг br

У вас есть два маршрута по умолчанию в столкновении:

Таблица IP-маршрутизации ядра
Шлюз назначения Флаги Genmask MSS Window irtt Iface
0.0.0.0 192.168.88.1 0.0.0.0 УГ 0 0 0 eno3
0.0.0.0 192.168.2.1 0.0.0.0 УГ 0 0 0 eno2

Это ненормальная ситуация. Ваш ПК/сервер запутался, потому что нет точного правила для решения, какой из двух интерфейсов использовать в качестве шлюза в Интернет. Решение о маршрутизации зависит от метрик, динамически устанавливаемых для интерфейсов, или от других факторов, которые могут изменяться случайным образом. Поэтому иногда предпочтение отдается интерфейсу eno2, а иногда и eno3 в качестве основного шлюза.

Я предполагаю, что входящие пакеты извне внутрь достигают вашего сервера правильным путем в соответствии с IP-адресом, используемым в качестве пункта назначения (с точки зрения внешнего пользователя).

  • Пакет SYN TCP, отправленный из Интернета на публичный адрес ISP1, проходит через eno2
  • Пакет SYN TCP, отправленный из Интернета на публичный адрес ISP2, проходит через eno3

Вы можете проверить это с помощью Wireshark, Tshark или tcpdump.

Но ответный пакет (SYN ACK TCP) отправляется обратно ТОЛЬКО через ГЛАВНЫЙ ШЛЮЗ, выбранный системой в данный момент. Только один GW из двух является предпочтительным, а второй вообще НЕ ИСПОЛЬЗУЕТСЯ одновременно (за исключением того, что вы делаете какую-то специальную настройку). Это означает, что соединение, предназначенное для одного интерфейса, работает нормально, но второе соединение отвечает через неправильный интерфейс. Эта ситуация называется «асимметричной маршрутизацией». Пакет поступает через eno3, а ответ уходит через eno2, например.

Провайдеры обычно проверяют и отбрасывают такие пакеты, так как это похоже на сетевую атаку. Исходный IP-адрес не совпадает с сетевым адресом исходного интерфейса.

Решения вашего сервера о маршрутизации зависят НЕ от интерфейса, используемого для входящего пути пакетов, а от фактически предпочтительного основного исходящего шлюза. Входящий путь и исходящий путь отличаются для некоторого соединения, и это причина вашей проблемы.

Ситуация может быть решена с помощью расширенной маршрутизации (например,маршрутизация на основе политик и специальные отдельные таблицы/правила маршрутизации для каждого интерфейса). Найдите примеры iproute2.

Возможно, эти ссылки помогут вам:

https://www.thomas-krenn.com/en/wiki/Two_Default_Gateways_on_One_System

https://tweenpath.net/multiple-default-gateways-system/

Dan Hendli avatar
флаг cn
Спасибо! я буду изучать это

Ответить или комментировать

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