La configuration du routage avec systemd-networkd via une passerelle entraîne une erreur: Impossible de définir la route: le réseau est inaccessible

0

J'exécute plusieurs conteneurs LXC sur ma machine, dont certains ont leur propre adresse IP en dehors d'un réseau partagé avec l'hôte. Cette adresse IP, ainsi que le masque de réseau et la passerelle correspondants, m'ont été fournis par mon fournisseur de services Internet. J'utilise systemd 238 et j'ai essayé de suivre la configuration [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

L' systemd-networkderreur suivante apparaît dans les journaux:, Could not set route: Network is unreachablemais je ne peux pas vraiment l'expliquer. Si je ne spécifie pas de passerelle, le noyau peut très bien router vers ce réseau. Je suppose donc qu’il pourrait également acheminer le trafic vers la passerelle via cette même interface. Cela ne fonctionne même pas, si je spécifie une route avec Destination=10.0.0.65/32avant la route à 10.0.0.64/29, pour prendre le noyau par la main et expliquer comment atteindre ce réseau.

UPDATE: Dans l'intervalle, j'ai changé la configuration réseau de l'hôte de manière significative, mais il s'agissait des adresses IPv4 et des routes pour lesquelles il avait été configuré avec [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]: Pour des raisons de confidentialité, j'ai traduit les adresses IP réelles en adresses similaires sur des réseaux non routés.

devurandom
la source

Réponses:

1

L'erreur suivante apparaît dans les journaux de systemd-networkd: Could not set route: Network is unreachablemais je ne peux pas vraiment l'expliquer.

Eh bien, cela vous dit quel est le problème réel. Vous devez avoir le routeur dans le sous-réseau d'une des adresses IP attribuées à une interface réseau quelconque.

Dans votre cas, vous avez une adresse IP de 192.168.0.2avec et un masque de sous-réseau de 24. La passerelle est à 192.168.0.1laquelle doit être trouvé tel quel dans le sous-réseau.

Le problème se produit dans cette section:

[Route]
Destination=10.0.0.64/29
Gateway=10.0.0.65

Si vous n'avez pas d'autres fichiers de configuration systemd-networkd qui spécifient qu'une interface avec une adresse IP dans 10.0.0.64/29systemd-networkd ne sait pas comment atteindre la passerelle de 10.0.0.65. Notez que les noms de fichier régissent l'ordre dans lequel les fichiers sont traités car ils sont triés lexicalement avant leur exécution. Comme je l'ai indiqué ci-dessus, la passerelle doit être le saut suivant, ce qui signifie qu'elle se trouve dans un sous-réseau particulier connu de l'hôte.

Kevin K.
la source
J'ai aussi essayé ( « Cela ne fonctionne même pas, si ... » dans mon message original) de dire explicitement le noyau pour acheminer le trafic de la passerelle via cette interface: [Route] Destination=10.0.0.65/32 [Route] Destination=10.0.0.64/29 Gateway=10.0.0.65. Cela n'a pas fonctionné non plus. S'agissait-il simplement d'un problème d'ordre (c.-à-d. Que la route vers la passerelle n'était pas encore connue au moment de son utilisation) ou est-ce qu'il me manque quelque chose?
devurandom
1
La passerelle doit se trouver dans l’un de vos sous-réseaux. Par conséquent , le trafic d’acheminement de la passerelle via cette interface ne fonctionnera jamais. Pouvez-vous prolonger votre question avec la sortie des commandes ip -4 addret ip -4 route, s'il vous plaît?
Kevin K.
Merci, je le reçois maintenant. On ne peut pas router des sous-réseaux arbitraires via des passerelles arbitraires, car la passerelle n'aurait aucun moyen de répondre à ses paquets si elle ne disposait pas également d'une interface utilisant une adresse de la plage d'adresses que la passerelle pourrait atteindre.
devurandom