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