Networking

雙 NIC 靜默拒絕來自一個介面的所有傳入流量

  • June 26, 2020

在我的伺服器中,我有兩個乙太網卡:

  • enp0s17, 本地 IP 192.168.0.7, 路由器的公共地址x.x.x.x, 網路遮罩255.255.255.255
  • enp0s18, 本地 IP 172.16.0.7, 路由器的公共地址y.y.y.y, 網路遮罩255.255.255.0

在這兩個網路上,兩個公共 IP 的任何傳入流量都****將路由到伺服器。因此,實際上任何 SSH、HTTP 等都x.x.x.x應該被轉發到192.168.0.7,任何流量都y.y.y.y應該被轉發到172.16.0.7.

不幸的是,這一次只適用於其中一個。有時(在斷開伺服器並重新連接到網際網路後,例如重新啟動後)這適用於enp0s17有時適用於enp0s18但從不同時適用於兩者。(因此,兩個路由器都正確路由,似乎是伺服器的問題。)

同樣的問題適用於使用curl --interface enp0s1X ....

另一方面,任何本地流量都在正確路由。在這兩個網路中,伺服器始終在其本地 IP 上可用。

有誰知道可能導致此問題的原因或如何解決?

出於測試目的,我完全禁用了防火牆,因此,這應該不是問題。

(這兩個介面也都使用 IPv6 前綴委託,但我只是將其排除在外,因為它工作正常。)

兩個路由器都是 Ubiquiti EdgeRouter。IP 由路由器上的 DHCP 伺服器靜態提供。網路配置是使用netplan. 使用 Ubuntu 20.04。

我的netplan配置:

network:
   version: 2
   renderer: networkd
   ethernets:
      enp0s17:
         dhcp4: yes
         dhcp6: yes
      enp0s18:
         dhcp4: yes
         dhcp6: yes

預設路由:

default via 192.168.0.1 dev enp0s17 proto dhcp src 192.168.0.7 metric 100 
default via 172.16.0.1 dev enp0s18 proto dhcp src 172.16.0.7 metric 100 
172.16.0.0/16 dev enp0s18 proto kernel scope link src 172.16.0.7 
172.16.0.1 dev enp0s18 proto dhcp scope link src 172.16.0.7 metric 100 
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 
172.18.0.0/16 dev br-b20299b5e473 proto kernel scope link src 172.18.0.1 
172.19.0.0/16 dev br-ba582f6855c2 proto kernel scope link src 172.19.0.1 
192.168.0.0/24 dev enp0s17 proto kernel scope link src 192.168.0.7 
192.168.0.1 dev enp0s17 proto dhcp scope link src 192.168.0.7 metric 100
default via 192.168.0.1 dev enp0s17 proto dhcp src 192.168.0.7 metric 100 
default via 172.16.0.1 dev enp0s18 proto dhcp src 172.16.0.7 metric 100 

你的問題是你有兩條預設路由——你只能有一條。您的傳入數據很好。但是當您的伺服器發送回复時,由於您有兩個預設路由,伺服器會在這兩個路由之間交替。,一半的數據包方向錯誤。

您需要為預設選擇一個介面,並且需要為其他網路添加顯式路由。

引用自:https://serverfault.com/questions/1023013