So ändern Sie die Reihenfolge des Standard-Gateways mit systemd-networkd

So ändern Sie die Reihenfolge des Standard-Gateways mit systemd-networkd

Ich habe einen lxd-Container mit zwei Netzwerkschnittstellen konfiguriert (mit systemd-networkd).

Der erste hat eine statische IP-Adresse:

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

Und die Standardschnittstelle von lxd (die DHCP verwendet):

testuser@lxd-7e5cbece-180b-427f-a8b1-b2c12f6e9d79:~$ cat /etc/systemd/network/eth0.network 
[Match]
Name=eth0

[Network]
DHCP=ipv4

[DHCP]
SendHostname=True

Nun besteht das Problem darin, dass die Routing-Tabelle mit (von net0) als Standard-Gateway generiert wird 162.132.192.252, ich aber gerne hätte, dass das Gateway von eth0 das Standard-Gateway ist.

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) Warum wird die Routing-Tabelle in dieser Reihenfolge generiert? (zuerst net0 und dann eth0)

2) Ist es möglich, die Reihenfolge der Standard-Gateways zu ändern?

Antwort1

Für alle, die das gleiche Problem haben: Sie können dies tatsächlich mithilfe von Metriken tun. Anstatt das Standard-Gateway im Abschnitt [Network] zu definieren, können Sie der statischen Schnittstelle eine Standardroute mit einer niedrigeren Metrik hinzufügen:

[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

Anschließend können Sie dasselbe für eine DHCP-Schnittstelle tun (beachten Sie, dass Sie das Gateway nicht definieren müssen, da dies von Ihrem DHCP-Server bereitgestellt wird):

[Match]
Name=eth0

[Network]
DHCP=ipv4

[DHCP]
SendHostname=True
UseDomains=True

[Route]
Destination=0.0.0.0/0
Metric=1000

Nun erhalten Sie die gewünschte Routing-Tabelle mit der Schnittstelle eth0 als Standard-Gateway:

> 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 

Antwort2

Dies ist eigentlich keine Programmierfrage. Solche Fragen sollten Sie besser bei StackExchange Unix & Linux stellen.

Ich hatte ein ähnliches Szenario: Mehrere Schnittstellen mit DHCP, die mehrere Standardrouten verursachten.

Ich habe es so gemacht (und es funktioniert vielleicht auch bei Ihnen): Ich habe den Schnittstellen, an denen wir keine DHCP-Routen haben möchten, mitgeteilt, dass wir sie nicht haben möchten. Fügen Sie in der Datei für die Schnittstelle die DHCP- Option wie in diesem Beispiel .networkhinzu :UseRoutes=false

[Match]
Name=eno3

[Network]
DHCP=ipv4

[DHCP]
UseRoutes=false

verwandte Informationen