La configuración de enrutamiento con systemd-networkd a través de una puerta de enlace da como resultado un error: no se pudo establecer la ruta: la red no es accesible

0

Ejecuto varios contenedores LXC en mi máquina, algunos de los cuales tienen su propia dirección IP fuera de una red compartida con el host. Mi ISP me proporcionó esta dirección IP, así como la máscara de red y la puerta de enlace correspondientes. Estoy usando systemd 238 e intenté la siguiente configuración [1]:

[Match]
Name=enpXsY

[Network]
Address=192.168.0.2/24
Gateway=192.168.0.1
IPForward=yes

[Route]
Destination=10.0.0.64/29
Gateway=10.0.0.65

En los systemd-networkdregistros veo el siguiente error: Could not set route: Network is unreachablepero realmente no puedo explicar esto. Si no especifico una puerta de enlace, el núcleo puede enrutar a esta red muy bien. Por lo tanto, supongo que también podría enrutar el tráfico a la puerta de enlace a través de esta misma interfaz. Esto ni siquiera funciona, si especifico una ruta Destination=10.0.0.65/32antes de la ruta hacia 10.0.0.64/29, para tomar el núcleo de la mano y explicar cómo llegar a esa red.

ACTUALIZACIÓN: Mientras tanto, cambié significativamente la configuración de red del host, pero estas fueron las direcciones IPv4 y las rutas con las que se configuró con [1]:

# ip -4 address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: enpXsY: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    inet 192.168.0.2/24 brd 192.168.0.255 scope global enpXsY
       valid_lft forever preferred_lft forever
4: lxcbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    inet 10.10.10.1/24 brd 10.10.10.255 scope global lxcbr0
       valid_lft forever preferred_lft forever

# ip -4 route
default via 192.168.0.1 dev enpXsY proto static 
192.168.0.0/24 dev enpXsY proto kernel scope link src 192.168.0.2
10.10.10.0/24 dev lxcbr0 proto kernel scope link src 10.10.10.1 

[1]: traduje las direcciones IP reales a direcciones similares en redes no enrutadas por razones de privacidad.

devurandom
fuente

Respuestas:

1

En los registros de systemd-networkd veo el siguiente error: Could not set route: Network is unreachablepero realmente no puedo explicar esto.

Bueno, esto te dice cuál es el problema real. Debe tener el enrutador dentro de la subred de una de las direcciones IP asignadas a cualquier interfaz de red.

En su caso, tiene una dirección IP de 192.168.0.2with y una máscara de subred de 24. La puerta de enlace es la 192.168.0.1que debe encontrarse, ya que está dentro de la subred.

El problema ocurre dentro de esta sección:

[Route]
Destination=10.0.0.64/29
Gateway=10.0.0.65

Si no tiene otros archivos de configuración systemd-networkd que especifiquen una interfaz con una dirección IP dentro de 10.0.0.64/29systemd-networkd, no sabrá cómo llegar a la puerta de enlace 10.0.0.65. Tenga en cuenta que los nombres de archivo regulan el orden en que se procesan los archivos, ya que se ordenan léxicamente antes de la ejecución. Como dije anteriormente, la puerta de enlace debe ser el siguiente salto, lo que significa que está dentro de una subred particular conocida por el host.

Kevin K.
fuente
También probé ( "Esto no funciona ni siquiera, si ..." en mi post original) para indicar explícitamente al núcleo para enrutar el tráfico de la puerta de entrada a través de esta interfaz: [Route] Destination=10.0.0.65/32 [Route] Destination=10.0.0.64/29 Gateway=10.0.0.65. Esto no funcionó bien. ¿Fue solo un problema de pedido (es decir, la ruta a la puerta de enlace aún no se conocía cuando se estaba usando) o me falta algo más?
devurandom
1
La puerta de enlace debe estar en una de sus subredes, por lo tanto, el tráfico de ruta para la puerta de enlace a través de esta interfaz nunca funcionará. ¿Puede extender su pregunta con la salida de los comandos ip -4 addry ip -4 route, por favor?
Kevin K.
Gracias, lo entiendo ahora. No se pueden enrutar subredes arbitrarias a través de puertas de enlace arbitrarias, porque la puerta de enlace no tendría forma de responder a los paquetes de uno, si tampoco se tiene una interfaz que use una dirección del rango de direcciones que la puerta de enlace podría alcanzar.
devurandom