2 つの内部 NIC でルーティングが同じように動作しない

2 つの内部 NIC でルーティングが同じように動作しない

Ubuntu 22.04 サーバーには、インターネットに接続された内部 NIC が 2 つと外部 NIC が 1 つあります。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 経由で接続された 2 つのルーティング テーブルは次のとおりです。

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 のトラフィックをルーティングできない理由がわかりません。1 つの NIC がケーブルで、もう 1 つが Wi-Fi であるという事実が、この違いを説明していますか? どちらも同じように IP が提供されるのであれば、違いは説明できません。

ご協力ありがとうございます。Jan

答え1

この問題の解決策は 2 つあります。まず、両方のインターフェース (サブネット) でマスカレードを実行する必要があります。

-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も同様です。

関連情報