Рейтинг:0

Маршрутизация не работает должным образом при подключении двух сетевых карт

флаг jp

Мы используем сервер с 2-портовой картой Gigabit Ethernet PCIe NetXtreme BCM5720. У него есть два порта, каждый из которых соответствует разным физическим идентификаторам и логическим именам;

sudo lshw -сеть класса
  *-сеть:0               
       описание: Интерфейс Ethernet
       продукт: NetXtreme BCM5720 2-портовый Gigabit Ethernet PCIe
       поставщик: Broadcom Inc. и дочерние компании
       физический идентификатор: 0
       информация о шине: pci@0000:04:00.0
       логическое имя: eno1
       версия: 00
       серийный номер: b8:cb:29:97:26:61
       размер: 1 Гбит/с
       пропускная способность: 1 Гбит/с
       ширина: 64 бита
       часы: 33 МГц
       возможности: pm vpd msi msix pciexpress bus_master cap_list rom ethernet Physical tp 10bt 10bt-fd 100bt 100bt-fd 1000bt 1000bt-fd автосогласование
       конфигурация: автосогласование=на широковещании=да драйвер=tg3 версия драйвера=дуплекс 3.137=полная прошивка=FFV21.81.3 bc 5720-v1.39 ip=192.168.1.211 задержка=0 ссылка=да многоадресная рассылка=да порт=скорость витой пары=1 Гбит/ с
       ресурсы: irq:17 память:91930000-9193ffff память:91940000-9194ffff память:91950000-9195ffff память:91d00000-91d3ffff
  *-сеть:1
       описание: Интерфейс Ethernet
       продукт: NetXtreme BCM5720 2-портовый Gigabit Ethernet PCIe
       поставщик: Broadcom Inc. и дочерние компании
       физический идентификатор: 0,1
       информация о шине: pci@0000:04:00.1
       логическое имя: eno2
       версия: 00
       серийный номер: b8:cb:29:97:26:62
       размер: 1 Гбит/с
       пропускная способность: 1 Гбит/с
       ширина: 64 бита
       часы: 33 МГц
       возможности: pm vpd msi msix pciexpress bus_master cap_list rom ethernet Physical tp 10bt 10bt-fd 100bt 100bt-fd 1000bt 1000bt-fd автосогласование
       конфигурация: автосогласование=на широковещании=да драйвер=tg3 версия драйвера=дуплекс 3.137=полная прошивка=FFV21.81.3 bc 5720-v1.39 ip=192.168.3.201 задержка=0 ссылка=да многоадресная рассылка=да порт=скорость витой пары=1 Гбит/ с
       ресурсы: irq:18 память:91900000-9190ffff память:91910000-9191ffff память:91920000-9192ffff память:91d40000-91d7ffff

Как видно из вывода, им присваиваются IP-адреса в разных подсетях.

Подсеть 192.168.3 выходит наружу, а 192.168.1 — только внутрь. Мы настроили переадресацию портов в нашем маршрутизаторе таким образом, чтобы входящий трафик на порты 80 и 443 направлялся на 192.168.3.201. Цель состоит в том, чтобы запускать веб-приложения на этом сервере, оставляя ssh открытым во внутренней сети для обслуживания.

Это работает... отчасти

Для проверки мы запускаем образ докера nginx по умолчанию.

docker run -d -p 192.168.3.201:80:80 -p 192.168.3.201:443:443 --restart=если не остановлен nginx:последний

Изначально мы НЕ можем получить доступ к веб-интерфейсу извне. Однако, если мы тянем кабель Ethernet к eno0, он внезапно работает. Что действительно поражает меня, так это то, что он действительно продолжает работать при повторном подключении eno0.

Это очень воспроизводимо. После перезагрузки системы не работает, но отключив/повторно подключив eno0 и он вдруг снова работает.

Чего нам не хватает?

Добавлен вывод ip-маршрута согласно предложению JFL; у реббота;

по умолчанию через 192.168.1.1 dev eno1 proto dhcp src 192.168.1.211 метрика 100 
по умолчанию через 192.168.3.1 dev eno2 proto dhcp src 192.168.3.201 метрика 100 
172.17.0.0/16 dev docker0 ссылка на область ядра proto src 172.17.0.1 
192.168.1.0/24 dev eno1 ссылка на область ядра proto src 192.168.1.211 
192.168.1.1 dev eno1 proto dhcp scope link src 192.168.1.211 метрика 100 
192.168.3.0/24 dev eno2 ссылка на область ядра proto src 192.168.3.201 
192.168.3.1 dev eno2 proto dhcp scope link src 192.168.3.201 метрика 100 

При отключении eno0;

по умолчанию через 192.168.3.1 dev eno2 proto dhcp src 192.168.3.201 метрика 100 
172.17.0.0/16 dev docker0 ссылка на область ядра proto src 172.17.0.1 
192.168.3.0/24 dev eno2 ссылка на область ядра proto src 192.168.3.201 
192.168.3.1 dev eno2 proto dhcp scope link src 192.168.3.201 метрика 100 

После переподключения eno0

по умолчанию через 192.168.3.1 dev eno2 proto dhcp src 192.168.3.201 метрика 100 
по умолчанию через 192.168.1.1 dev eno1 proto dhcp src 192.168.1.211 метрика 100 
172.17.0.0/16 dev docker0 ссылка на область ядра proto src 172.17.0.1 
192.168.1.0/24 dev eno1 ссылка на область ядра proto src 192.168.1.211 
192.168.1.1 dev eno1 proto dhcp scope link src 192.168.1.211 метрика 100 
192.168.3.0/24 dev eno2 ссылка на область ядра proto src 192.168.3.201 
192.168.3.1 dev eno2 proto dhcp scope link src 192.168.3.201 метрика 100 
JFL avatar
флаг pk
JFL
Можете добавить вывод "ip route" до и после отключения/повторного подключения?
Рейтинг:0
флаг pk
JFL

ваша проблема в том, что вы настроили шлюз на обоих интерфейсах, как показано:

по умолчанию через 192.168.1.1 dev eno1 proto dhcp src 192.168.1.211 метрика 100 
по умолчанию через 192.168.3.1 dev eno2 proto dhcp src 192.168.3.201 метрика 100

Оба имеют одинаковую метрику, поэтому система должна выбрать одну. Способ выбора зависит от используемой операционной системы.

Какие бы критерии ни использовала ваша ОС, она выбирает маршрут, который выходит из интерфейса eno1 при загрузке, поэтому трафик не отправляется в Интернет.

Когда вы отключаете сетевой адаптер, остается только один шлюз (правильный), поэтому он работает.

Тот факт, что он все еще работает после повторного подключения eno1, показывает, что ваша ОС, вероятно, использует «самый старый» маршрут (вы можете видеть, что порядок этих двух маршрутов меняется на противоположный после повторного подключения).

Чтобы исправить это, вам нужно удалить шлюз по умолчанию на внутренней сетевой карте и при необходимости заменить его маршрутами к вашей внутренней сети. Если у вас нет другой внутренней сети, кроме 192.168.1.X/X, вам не нужны эти маршруты.

Поскольку вы используете DHCP, вам необходимо удалить параметр «маршрутизатор» из области 192.168.3.X/X или вместо этого использовать статический IP-адрес (если вам нужно оставить параметр маршрутизатора для других хостов).

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

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