systemd-networkd でデフォルトゲートウェイの順序を変更する方法

systemd-networkd でデフォルトゲートウェイの順序を変更する方法

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

関連情報