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

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

sudo lshw -class network
  *-network:0               
       description: Ethernet interface
       product: NetXtreme BCM5720 2-port Gigabit Ethernet PCIe
       vendor: Broadcom Inc. and subsidiaries
       physical id: 0
       bus info: pci@0000:04:00.0
       logical name: eno1
       version: 00
       serial: b8:cb:29:97:26:61
       size: 1Gbit/s
       capacity: 1Gbit/s
       width: 64 bits
       clock: 33MHz
       capabilities: pm vpd msi msix pciexpress bus_master cap_list rom ethernet physical tp 10bt 10bt-fd 100bt 100bt-fd 1000bt 1000bt-fd autonegotiation
       configuration: autonegotiation=on broadcast=yes driver=tg3 driverversion=3.137 duplex=full firmware=FFV21.81.3 bc 5720-v1.39 ip=192.168.1.211 latency=0 link=yes multicast=yes port=twisted pair speed=1Gbit/s
       resources: irq:17 memory:91930000-9193ffff memory:91940000-9194ffff memory:91950000-9195ffff memory:91d00000-91d3ffff
  *-network:1
       description: Ethernet interface
       product: NetXtreme BCM5720 2-port Gigabit Ethernet PCIe
       vendor: Broadcom Inc. and subsidiaries
       physical id: 0.1
       bus info: pci@0000:04:00.1
       logical name: eno2
       version: 00
       serial: b8:cb:29:97:26:62
       size: 1Gbit/s
       capacity: 1Gbit/s
       width: 64 bits
       clock: 33MHz
       capabilities: pm vpd msi msix pciexpress bus_master cap_list rom ethernet physical tp 10bt 10bt-fd 100bt 100bt-fd 1000bt 1000bt-fd autonegotiation
       configuration: autonegotiation=on broadcast=yes driver=tg3 driverversion=3.137 duplex=full firmware=FFV21.81.3 bc 5720-v1.39 ip=192.168.3.201 latency=0 link=yes multicast=yes port=twisted pair speed=1Gbit/s
       resources: irq:18 memory:91900000-9190ffff memory:91910000-9191ffff memory:91920000-9192ffff memory: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=unless-stopped nginx:latest

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

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

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

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

default via 192.168.1.1 dev eno1 proto dhcp src 192.168.1.211 metric 100 
default via 192.168.3.1 dev eno2 proto dhcp src 192.168.3.201 metric 100 
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 
192.168.1.0/24 dev eno1 proto kernel scope link src 192.168.1.211 
192.168.1.1 dev eno1 proto dhcp scope link src 192.168.1.211 metric 100 
192.168.3.0/24 dev eno2 proto kernel scope link src 192.168.3.201 
192.168.3.1 dev eno2 proto dhcp scope link src 192.168.3.201 metric 100 

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

default via 192.168.3.1 dev eno2 proto dhcp src 192.168.3.201 metric 100 
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 
192.168.3.0/24 dev eno2 proto kernel scope link src 192.168.3.201 
192.168.3.1 dev eno2 proto dhcp scope link src 192.168.3.201 metric 100 

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

default via 192.168.3.1 dev eno2 proto dhcp src 192.168.3.201 metric 100 
default via 192.168.1.1 dev eno1 proto dhcp src 192.168.1.211 metric 100 
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 
192.168.1.0/24 dev eno1 proto kernel scope link src 192.168.1.211 
192.168.1.1 dev eno1 proto dhcp scope link src 192.168.1.211 metric 100 
192.168.3.0/24 dev eno2 proto kernel scope link src 192.168.3.201 
192.168.3.1 dev eno2 proto dhcp scope link src 192.168.3.201 metric 100 
0
задан 7 October 2021 в 12:29
1 ответ

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

default via 192.168.1.1 dev eno1 proto dhcp src 192.168.1.211 metric 100 
default via 192.168.3.1 dev eno2 proto dhcp src 192.168.3.201 metric 100

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

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

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

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

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

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

0
ответ дан 7 October 2021 в 12:57

Теги

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