==== Service qui ne fonctionnent pas depuis VPN : timeout — routes parasites systemd-networkd ====
=== Symptôme ===
Client VPN (''10.1.100.20'') : montage NFS de ''cahute'' (''192.168.1.9'') en timeout.
Port 2049 ouvert (''nc'' OK), mais ''mount.nfs4'' bloque. Ping serveur KO.
=== Diagnostic ===
Aller correct (routé dans ''wg''), retour perdu. ''tcpdump'' côté serveur : SYN reçus, **aucun** SYN-ACK.
tcpdump -ni enp3s0 host 10.1.100.20 # SYN entrants, 0 retour
ip route get 10.1.100.20 from 192.168.1.9
→ 10.1.100.20 ... dev veth6bb30cd # retour envoyé dans un veth Docker !
Cause racine : **systemd-networkd gère les interfaces ''veth'' de Docker**. À chaque conteneur, il tente un DHCP dessus, échoue, tombe en IPv4LL (''169.254.x'') et ajoute des routes ''default'' / ''0.0.0.0 dev vethX'' parasites qui captent le trafic vers ''10.1.100.0/24''. Le veth « coupable » change à chaque redémarrage de conteneur.
ip route show | grep -E "veth|^0.0.0.0"
0.0.0.0 dev vethXXXX scope link
default dev vethXXXX scope link
169.254.0.0/16 dev vethXXXX proto kernel scope link src 169.254.x.x
systemctl is-active systemd-networkd # active
=== Correctif permanent ===
Exclure les interfaces virtuelles Docker de la gestion networkd :
# /etc/systemd/network/10-docker-veth-unmanaged.network
[Match]
Name=veth* docker* br-*
[Link]
Unmanaged=yes
systemctl restart systemd-networkd
# purge des routes déjà posées (non rétroactif) :
ip route flush dev vethXXXX # pour chaque veth concerné
=== Validation ===
ip route show | grep -E "veth|^0.0.0.0" # doit être vide
Le fichier ''.network'' est permanent → routes parasites plus jamais recréées.
**À confirmer par un reboot** (conteneurs relancés, table toujours propre).
=== Notes ===
* Le ping ICMP peut être filtré alors que NFS (TCP 2049) répond → tester le port, pas le ping.
* Rustine temporaire écartée : ''ip route add 10.1.100.0/24 via 192.168.1.90 dev enp3s0''.