Gestion réseau Linux
Le document Util-Linux présente la gestion des flux utilisé par des processus et la découverte des machines sur le réseau.
Configuration de base
Sans Network Manager
Vérifier le nom et l'état de l'interface :
Activer l'interface (la passer en "UP") :
Obtenir une adresse IP : Le simple fait d'activer l'interface ne vous connecte pas ; il faut une configuration IP. * Via DHCP (automatique, le plus courant) :
(Note : Sidhclient n'est pas installé, essayez dhcpcd en1ps0).
* **Configuration statique (si pas de DHCP) :**
```bash
sudo ip addr add 192.168.1.XX/24 dev en1ps0
sudo ip route add default via 192.168.1.1
```
Avec Network Manager
Voire le status des connexion
Activer une connexion :
Ajouter une connexion DHCP :
Configuration statique :
nmcli connection modify "MaConnexion" ipv4.addresses 192.168.1.XX/24 ipv4.gateway 192.168.1.1 ipv4.dns "8.8.8.8" ipv4.method manual
nmcli connection up "MaConnexion"
Résolution de nom
resolvconf
Les fichiers dans /etc/resolvconf/resolv.conf.d/ sont assemblés pour générer le fichier /etc/resolv.conf final :
1. head : Le contenu est placé tout en haut (priorité maximale).
2. (Données dynamiques) : Les DNS fournis par votre routeur/DHCP arrivent ensuite.
3. tail : Le contenu est ajouté à la fin (serveurs de secours).
En ajoutant votre ligne nameserver X.X.X.X à la suite du texte existant dans head, ce serveur sera toujours le premier interrogé, quel que soit le réseau auquel vous vous connectez.
On peut en rajouter plusieurs dans le head.
Pour voir la configuration actuelle :
systemd-resolved
systemd-resolved est un service système qui fournit la résolution de noms de réseau aux applications locales.
Vérifier l'état et la configuration actuelle :
Tester la résolution d'un nom :
Lien symbolique recommandé pour /etc/resolv.conf : Pour que les applications utilisent le stub local de systemd-resolved :
Vider le cache DNS :
Configurer des DNS statiques :
Éditer le fichier /etc/systemd/resolved.conf :
Tailscale
Installation Debian
sudo apt install curl
curl -fsSL https://pkgs.tailscale.com/stable/debian/bullseye.noarmor.gpg | sudo tee /usr/share/keyrings/tailscale-archive-keyring.gpg >/dev/null
curl -fsSL https://pkgs.tailscale.com/stable/debian/bullseye.tailscale-keyring.list | sudo tee /etc/apt/sources.list.d/tailscale.list
sudo apt update
sudo apt install tailscale
sudo tailscale up --accept-routes --accept-dns=false --stateful-filtering=false
Vous êtes connecté
Configuration avancé
Si le périphérique qu'on à ajouté est un serveur ou un périphérique accessible à distance, on doit de désactiver l’expiration de la clé pour éviter d’avoir à vous authentifier périodiquement.
Ajouter une route :
echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.conf
echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p /etc/sysctl.conf
sudo tailscale up --advertise-routes=10.3.1.0/24 --snat-subnet-routes=true --stateful-filtering=false --accept-routes --accept-dns=false
Pour que le client Linux accepte la route :
Pour le refuser :
Pour utiliser tailscale dans un conteneur lxc :
accepter le noeud en "exit node" :
echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.conf
echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p /etc/sysctl.conf
sudo tailscale up --advertise-exit-node --accept-routes --stateful-filtering=false
zerotier
Installation Debian
sudo apt install curl gnupg1 -y
curl -s https://install.zerotier.com | sudo bash
sudo zerotier-cli join 28e7a7697309d93a
Configuration avancé
Si installation dans un conteneur aller dans le ficher de config du conteneur (/etc/pve/lxc/num.conf) :
Pour désinstaller ZeroTier :
sudo apt remove zerotier-one -y && \
sudo rm -rf /etc/apt/sources.list.d/zerotier.list && \
sudo rm -rf /var/lib/zerotier-one
Executer dans un conteneur Zerotier :
sudo docker run -d --name zerotierclient --restart unless-stopped --cap-add NET_ADMIN --device /dev/net/tun zerotier/zerotier:latest xxx
IPv6
Diagnostiquer la connectivité IPv6
# Vérifier l'adresse IPv6 publique assignée
ip -6 addr show dev eno1
# Vérifier la table de routage IPv6 (chercher "default")
ip -6 route show
ip -6 route show default
# Identifier la gateway IPv6 (routeur annoncé par RA)
ip -6 neigh show dev eno1
# Tester la sortie IPv6 vers Internet
curl -6 --max-time 5 https://ipv6.icanhazip.com
# Vérifier qu'un service écoute bien en IPv6
ss -tlnp | grep 443
# Doit montrer [::]:443, pas uniquement 0.0.0.0:443
Problème fréquent : route par défaut IPv6 manquante
Le routeur peut annoncer un préfixe IPv6 via SLAAC (Router Advertisement) sans pour autant inclure une route par défaut. L'adresse est alors bien assignée à l'interface, mais les paquets de réponse ne savent pas par où sortir → les clients semblent ne jamais obtenir de réponse.
Symptômes :
ip -6 route show default→ videcurl -6 https://ipv6.icanhazip.com→Could not connect- Les clients externes (4G/5G) ne parviennent pas à se connecter
Trouver la gateway (adresse link-local du routeur) :
ip -6 neigh show dev eno1
# Chercher l'entrée avec le flag "router"
# Exemple : fe80::e65d:51ff:fe35:980 lladdr e4:5d:51:35:09:80 router STALE
Ajouter la route manuellement (temporaire) :
Configuration IPv6 persistante avec ifupdown
Sur Debian/Ubuntu sans NetworkManager ni netplan, la configuration réseau passe par /etc/network/interfaces.
La commande inet6 auto active SLAAC (adresse dérivée du MAC via EUI-64, donc stable). Le post-up ajoute la route par défaut manquante à chaque activation de l'interface :
# /etc/network/interfaces
allow-hotplug eno1
auto eno1
iface eno1 inet static
address 192.168.1.250/24
gateway 192.168.1.1
# IPv6 via SLAAC + route par défaut forcée
iface eno1 inet6 auto
post-up ip -6 route replace default via fe80::e65d:51ff:fe35:980 dev $IFACE || true
Note :
replaceau lieu deaddévite l'erreur si la route existe déjà (ex : après unifupsansifdown). Le|| trueempêche l'échec du script au boot.
Appliquer sans redémarrer :
sudo ifdown eno1 && sudo ifup eno1
# Ou simplement ajouter la route manuellement pour tester
sudo ip -6 route replace default via fe80::GATEWAY_LL dev eno1
Forcer la découverte IPv6 (SLAAC) et gérer le forwarding (Docker)
Lorsqu'un routeur (comme une box internet) envoie ses annonces réseau (Router Advertisements) peu fréquemment, une machine Linux configurée en auto (SLAAC) peut mettre plusieurs minutes après un redémarrage avant d'obtenir son adresse IPv6. De plus, l'activation de l'IP forwarding (souvent par Docker) désactive par défaut l'acceptation de ces annonces par le noyau.
1. Forcer l'acceptation des annonces avec le forwarding activé :
Il faut configurer sysctl pour forcer l'acceptation des RA (valeur 2) même si la machine agit comme un routeur :
# /etc/sysctl.d/99-ipv6-accept-ra.conf
net.ipv6.conf.all.accept_ra=2
net.ipv6.conf.default.accept_ra=2
net.ipv6.conf.eno1.accept_ra=2
sudo sysctl -p /etc/sysctl.d/99-ipv6-accept-ra.conf
2. Solliciter activement le routeur avec ndisc6 :
Pour ne pas attendre l'annonce passive du routeur (notamment au boot), installez l'outil ndisc6 :
Docker et IPv6
Par défaut, les réseaux bridge Docker n'ont pas l'IPv6 activé. Les containers n'obtiennent pas d'adresse IPv6 et Traefik ne peut pas router le trafic IPv6 vers eux, même si l'OS hôte a une IP IPv6.
Activer IPv6 sur un réseau dans docker-compose.yaml :