Tengo un contenedor lxd configurado con dos interfaces de red (usando systemd-networkd).
El primero tiene una dirección IP estática:
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
Y la interfaz predeterminada de 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
Ahora el problema es que la tabla de enrutamiento se genera con 162.132.192.252
(desde net0) como puerta de enlace predeterminada, pero me gustaría que la puerta de enlace de eth0 fuera la puerta de enlace predeterminada.
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 qué se genera la tabla de enrutamiento en ese orden? (primero net0 y luego eth0)
2) ¿Es posible cambiar el orden de las puertas de enlace predeterminadas?
Respuesta1
Para cualquiera que tenga el mismo problema, puede hacerlo utilizando métricas. En lugar de definir la puerta de enlace predeterminada en la sección [Red], puede agregar una ruta predeterminada con una métrica más baja a la interfaz 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
Después de esto, puede hacer lo mismo para una interfaz DHCP (tenga en cuenta que no es necesario definir la puerta de enlace porque la proporcionará su servidor DHCP):
[Match]
Name=eth0
[Network]
DHCP=ipv4
[DHCP]
SendHostname=True
UseDomains=True
[Route]
Destination=0.0.0.0/0
Metric=1000
Ahora obtienes la tabla de enrutamiento deseada con la interfaz eth0 como puerta de enlace predeterminada:
> 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
Respuesta2
Esta no es realmente una cuestión de programación. Sería mejor que preguntaras cosas como esta en StackExchange Unix y Linux.
Tuve un escenario similar: múltiples interfaces que usan DHCP provocan múltiples rutas predeterminadas.
Lo que hice, puede que también funcione para usted, es decirle a las interfaces dónde no queremos las rutas DHCP que no las queremos. En el .network
archivo de la interfaz, agregue la UseRoutes=false
opción DHCP como en este ejemplo:
[Match]
Name=eno3
[Network]
DHCP=ipv4
[DHCP]
UseRoutes=false