2つのネットワークインターフェイス(systemd-networkdを使用)で構成されたlxdコンテナがあります。
まず、固定IPアドレスがあります。
testuser@lxd-7e5cbece-180b-427f-a8b1-b2c12f6e9d79:~$ cat /etc/systemd/network/20-net0.network
[Match]
Name=net0
[Network]
Address=162.132.242.249/26
Gateway=162.132.192.252
DNS=162.132.192.252
DNS=162.132.170.6
lxdのデフォルトインターフェイス(DHCPを使用):
testuser@lxd-7e5cbece-180b-427f-a8b1-b2c12f6e9d79:~$ cat /etc/systemd/network/eth0.network
[Match]
Name=eth0
[Network]
DHCP=ipv4
[DHCP]
SendHostname=True
これで問題は、ルーティングテーブルが162.132.192.252
(net0から)デフォルトゲートウェイとして使用されるように作成されますが、eth0のゲートウェイをデフォルトゲートウェイとして使用したいということです。
testuser@lxd-7e5cbece-180b-427f-a8b1-b2c12f6e9d79:~$ sudo route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 162.132.242.252 0.0.0.0 UG 0 0 0 net0
0.0.0.0 10.245.111.1 0.0.0.0 UG 1024 0 0 eth0
10.245.111.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
10.245.111.1 0.0.0.0 255.255.255.255 UH 1024 0 0 eth0
162.132.242.192 0.0.0.0 255.255.255.192 U 0 0 0 net0
1)ルーティングテーブルはなぜこのような順序で作成されますか? (まずnet0、次にeth0)
2)デフォルトゲートウェイの順序を変更できますか?
答え1
同じ問題に直面している人なら、実際に指標を使ってこれを行うことができます。 [Network]セクションでデフォルトゲートウェイを定義する代わりに、静的インターフェイスに低いメトリックを使用してデフォルトパスを追加できます。
[Match]
Name=net0
[Network]
Address=162.132.242.249/26
DNS=162.132.192.252
DNS=162.132.170.6
[Route]
Gateway=162.132.192.252
Destination=0.0.0.0/0
Metric=1024
その後、DHCPインターフェイスを使用して同じことを実行できます。ゲートウェイはDHCPサーバーによって提供されるため、定義する必要はありません。
[Match]
Name=eth0
[Network]
DHCP=ipv4
[DHCP]
SendHostname=True
UseDomains=True
[Route]
Destination=0.0.0.0/0
Metric=1000
これで、eth0インターフェイスをデフォルトゲートウェイとして使用し、目的のルーティングテーブルを持つようになりました。
> ip route list
default dev eth0 proto static metric 1000
default dev net0 proto static metric 1024
default via 10.245.111.1 dev eth0 proto dhcp src 10.245.111.96 metric 1024
10.245.111.0/24 dev eth0 proto kernel scope link src 10.245.111.96
10.245.111.1 dev eth0 proto dhcp scope link src 10.245.111.96 metric 1024
162.132.242.192/26 dev net0 proto kernel scope link src 162.132.242.249
答え2
これは実際にはプログラミングの質問ではありません。 StackExchange UnixとLinuxでこのような質問をすることをお勧めします。
DHCP を使用する複数のインターフェイスにより、複数の基本パスが発生する同様の状況が発生しました。
あなたにも効果があるかもしれない私がしたことは、DHCPパスが必要ではないとインターフェイスに通知することです。.network
インターフェイスファイルにUseRoutes=false
次の例のようにDHCPオプションを追加します。
[Match]
Name=eno3
[Network]
DHCP=ipv4
[DHCP]
UseRoutes=false