路由在兩個內部 NIC 上的工作方式不同

路由在兩個內部 NIC 上的工作方式不同

在 mu Ubuntu 22.04 伺服器上,我有兩個內部網路卡和一個連接到網際網路的外部網路卡。我用 Netplan 定義了接口,如下所示:

network:
  ethernets:
    eno1:
      dhcp4: true
      dhcp4-overrides:
        route-metric: 100
    enp2s0:
      addresses:
        - 172.16.1.1/24
      nameservers:
        addresses:
        - 127.0.0.53
        - 8.8.8.8
        search:
        - wombats.org
      routes:
        - to: default
          via: 192.168.0.254
        - to: 172.16.1.0/24
          via: 172.16.1.1
          metric: 200
          table: 101
      routing-policy:
        - from: 172.16.1.0/24
          table: 101
    wlp8s0:
      dhcp4: no
      addresses:
        - 172.16.2.1/24
      routes:
        - to: 172.16.2.0/24
          via: 172.16.2.1
          metric: 20
          table: 102
      routing-policy:
        - from: 172.16.2.0/24
          table: 102
  version: 2

連接到 enp2s0 的電腦完美路由到網際網路和內部。當同一台電腦透過 wlp8s0 連接時,它甚至無法到達 enp2s0 管理的網路 (172.16.1.1/24)。這是兩個路由表:透過 enp2s0 連接:

ip r
default via 172.16.1.1 dev enxf8e43b9d4867 proto dhcp metric 100 
169.254.0.0/16 dev enxf8e43b9d4867 scope link metric 1000 
172.16.1.0/24 dev enxf8e43b9d4867 proto kernel scope link src 172.16.1.3 metric 100 
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown

透過 wlp8s0 連線:

ip r
default via 172.16.2.1 dev wlp0s20f3 proto dhcp metric 20600 
169.254.0.0/16 dev wlp0s20f3 scope link metric 1000 
172.16.2.0/24 dev wlp0s20f3 proto kernel scope link src 172.16.2.4 metric 600 
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown

顯著的差異是兩種配置中預設路由的度量。這不是來自 DHCP 伺服器,因為兩個子網路的設定相同。我嘗試禁用 ufw 並嘗試添加 iptables。但這一切並沒有改變結果。

我不明白為什麼我無法路由 wlp8s0 的流量!一個 NIC 是電纜,另一個 NIC 是 wifi,這一事實是否可以解釋這種差異?不應該,因為他們以相同的方式獲得服務 IP。

感謝您的協助。揚

答案1

這個問題的解決方案是雙重的:首先,需要在兩個介面(子網路)上完成偽裝:

-A POSTROUTING -s 172.16.1.0/24 -o eno1 -j MASQUERADE
-A POSTROUTING -s 172.16.2.0/24 -o eno1 -j MASQUERADE

那麼同樣重要的是介面是在有或沒有運營商的情況下啟動的。這在 /etc/netplan/00-installer-config.yaml 中使用以下行完成:

    enp2s0:
      ignore-carrier: true

wlp8s0 也是如此。如果你不

相關內容