![Como alterar a ordem do gateway padrão com systemd-networkd](https://rvso.com/image/164703/Como%20alterar%20a%20ordem%20do%20gateway%20padr%C3%A3o%20com%20systemd-networkd.png)
Eu tenho um contêiner lxd configurado com duas interfaces de rede (usando systemd-networkd).
O primeiro possui um endereço IP estático:
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
E a interface padrão do lxd (que usa DHCP):
testuser@lxd-7e5cbece-180b-427f-a8b1-b2c12f6e9d79:~$ cat /etc/systemd/network/eth0.network
[Match]
Name=eth0
[Network]
DHCP=ipv4
[DHCP]
SendHostname=True
Agora o problema é que a tabela de roteamento é gerada com 162.132.192.252
(de net0) como gateway padrão, mas eu gostaria que o gateway de eth0 fosse o gateway padrão.
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) Por que a tabela de roteamento é gerada nessa ordem? (primeiro net0 e depois eth0)
2) É possível alterar a ordem dos gateways padrão?
Responder1
Para qualquer pessoa que tenha o mesmo problema, você pode fazer isso usando métricas. Em vez de definir o Gateway padrão na seção [Rede], você pode adicionar uma rota padrão com uma métrica inferior à interface estática:
[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
Depois disso você pode fazer o mesmo para uma interface DHCP (observe que você não precisa definir o Gateway porque ele será fornecido pelo seu servidor DHCP):
[Match]
Name=eth0
[Network]
DHCP=ipv4
[DHCP]
SendHostname=True
UseDomains=True
[Route]
Destination=0.0.0.0/0
Metric=1000
Agora você obtém a tabela de roteamento desejada com a interface eth0 como gateway padrão:
> 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
Responder2
esta não é realmente uma questão de programação. Seria melhor perguntar coisas assim no StackExchange Unix e Linux.
Eu tive um cenário semelhante: múltiplas interfaces usando DHCP causando múltiplas rotas padrão.
O que eu fiz, pode funcionar para você também, foi dizer às interfaces onde não queremos as rotas DHCP que não as queremos. No .network
arquivo da interface, adicione a UseRoutes=false
opção DHCP como neste exemplo:
[Match]
Name=eno3
[Network]
DHCP=ipv4
[DHCP]
UseRoutes=false