Linux avancé : réseau avancé
Cette page approfondit les commandes réseau de base. Pour le filtrage, voir Pare-feu : diagnostic et règles réelles ; pour SSH, SSH : dépannage. Les adresses utilisées (192.0.2.x, 203.0.113.x) sont des adresses de documentation.
Les couches à vérifier, dans l’ordre
Section intitulée « Les couches à vérifier, dans l’ordre »| Couche | Question | Outil |
|---|---|---|
| Lien | L’interface est-elle active ? | ip -br link, ethtool |
| Adresse | A-t-elle la bonne adresse ? | ip -br addr |
| Route | Sait-on où envoyer le trafic ? | ip route |
| Voisins | Résolution d’adresses de la machine voisine | ip neigh |
| DNS | Les noms se résolvent-ils ? | resolvectl query |
| Transport | Le port est-il ouvert, en écoute ? | ss -tlnp, nc -vz |
| Application | Le service répond-il ? | curl -v |
Diagnostiquer de bas en haut : une couche inférieure défaillante explique tout ce qui est au-dessus.
ip : adresses, liens, routes
Section intitulée « ip : adresses, liens, routes »ip -br link # interfaces et étatip -br addr # adresses (format compact)ip -s link show eth0 # compteurs (erreurs, pertes)ip route # table de routageip route get 1.1.1.1 # quelle route/interface pour cette destinationip -6 routeip neigh # table ARP / voisinage IPv6ip rule # règles de routage par politiqueModifications temporaires (perdues au redémarrage) :
sudo ip addr add 192.0.2.10/24 dev eth0sudo ip addr del 192.0.2.10/24 dev eth0sudo ip link set eth0 upsudo ip route add 198.51.100.0/24 via 192.0.2.1sudo ip route replace default via 192.0.2.1sudo ip link set eth0 mtu 1400Pour une configuration permanente, passer par Netplan (voir plus bas).
ss : sockets et connexions
Section intitulée « ss : sockets et connexions »sudo ss -tlnp # TCP en écoute, avec processussudo ss -ulnp # UDPss -tn state established # connexions établiesss -tn dst 203.0.113.9 # vers une adressess -s # résumé (nombre de connexions par état)ss -tni # informations TCP détaillées (rtt, retransmissions)ss -tn state time-wait | wc -lÉtats utiles : ESTAB, LISTEN, TIME-WAIT (normal en nombre), SYN-RECV (très nombreux : possible saturation ou attaque), CLOSE-WAIT (nombreux : le programme ne ferme pas ses connexions).
Configuration réseau d’Ubuntu Server : fichiers YAML dans /etc/netplan/.
# /etc/netplan/50-cloud-init.yaml (ou 01-reseau.yaml)network: version: 2 renderer: networkd ethernets: eth0: addresses: [192.0.2.10/24, '2001:db8::10/64'] routes: - to: default via: 192.0.2.1 nameservers: addresses: [1.1.1.1, 9.9.9.9] search: [exemple.com]sudo chmod 600 /etc/netplan/*.yamlsudo netplan generate # vérifie la syntaxe et génèresudo netplan try # applique avec RETOUR AUTOMATIQUE si aucune confirmation (120 s)sudo netplan apply # applique définitivementsudo netplan status # état (versions récentes)| Besoin | Configuration |
|---|---|
| DHCP | dhcp4: true |
| Plusieurs adresses | Liste addresses |
| Route statique | routes: [{ to: 198.51.100.0/24, via: 192.0.2.254 }] |
| Pont | bridges: { br0: { interfaces: [eth0], addresses: [...] } } |
| VLAN | vlans: { vlan10: { id: 10, link: eth0, addresses: [...] } } |
| Agrégation | bonds: { bond0: { interfaces: [eth0, eth1], parameters: { mode: active-backup } } } |
| Wi-Fi (poste) | wifis avec renderer: NetworkManager |
Netplan peut utiliser networkd (serveurs) ou NetworkManager (postes de travail) comme moteur. Voir aussi Ubuntu Server : actions après l’installation pour l’adresse IP fixe.
DNS : systemd-resolved
Section intitulée « DNS : systemd-resolved »resolvectl status # serveurs DNS par interfaceresolvectl query exemple.com # résolution (et d'où vient la réponse)resolvectl query --type=MX exemple.comresolvectl flush-cachesresolvectl statisticscat /etc/resolv.conf # « nameserver 127.0.0.53 » : le résolveur local de systemd/etc/resolv.conf pointe vers 127.0.0.53 (le résolveur intégré) : les serveurs réels se trouvent dans resolvectl status. Ne pas éditer ce fichier à la main ; configurer DNS dans Netplan ou /etc/systemd/resolved.conf.d/.
Outils classiques (paquet dnsutils/bind9-dnsutils) :
dig exemple.com A +shortdig @1.1.1.1 exemple.com MXdig +trace exemple.com # chaîne de délégation complètedig -x 203.0.113.9 # résolution inversegetent hosts exemple.com # ce que voit réellement le système (hosts, DNS…)getent hosts suit la même logique que les programmes (/etc/hosts, DNS) : plus fidèle que dig pour savoir ce qu’une application obtiendra.
Capturer le trafic : tcpdump
Section intitulée « Capturer le trafic : tcpdump »sudo tcpdump -ni eth0 -c 20 # 20 paquetssudo tcpdump -ni eth0 port 443 and host 203.0.113.9sudo tcpdump -ni any port 53 # requêtes DNS (toutes interfaces)sudo tcpdump -ni eth0 'tcp[tcpflags] & tcp-syn != 0' # paquets SYNsudo tcpdump -ni eth0 -w /tmp/capture.pcap port 8080 # enregistrer pour Wiresharksudo tcpdump -r /tmp/capture.pcap -nnsudo tcpdump -A -s0 port 80 # contenu lisible (HTTP non chiffré)| Option | Rôle |
|---|---|
-n |
Pas de résolution de noms (plus rapide) |
-i eth0 / -i any |
Interface |
-c N |
S’arrêter après N paquets |
-w fichier |
Enregistrer (format pcap) |
Filtre (port 443, host X, net 10.0.0.0/8) |
Limiter la capture |
Mesurer la connectivité
Section intitulée « Mesurer la connectivité »ping -c 4 192.0.2.1mtr -rwc 20 exemple.com # traceroute + ping continu (paquet mtr-tiny)traceroute -n exemple.comnc -vz -w 3 serveur.exemple.com 443curl -v --connect-timeout 5 https://exemple.com/curl -w "dns:%{time_namelookup} connexion:%{time_connect} tls:%{time_appconnect} total:%{time_total}\n" -o /dev/null -s https://exemple.com/iperf3 -s # serveur de test de débit ; côté client : iperf3 -c serveursudo ethtool eth0 # vitesse, duplex, liensudo ethtool -S eth0 | grep -iE "err|drop"curl -w décompose le temps (DNS, connexion TCP, TLS, total) : excellent pour savoir où une lenteur se situe.
Ponts, VLAN, espaces de noms
Section intitulée « Ponts, VLAN, espaces de noms »sudo ip link add br0 type bridgesudo ip link set eth1 master br0sudo ip link set br0 upbridge link
sudo ip link add link eth0 name eth0.10 type vlan id 10sudo ip addr add 192.0.2.50/24 dev eth0.10sudo ip link set eth0.10 up
sudo ip netns add test # espace de noms réseau isolésudo ip netns exec test ip -br addrsudo ip netns delete testLes espaces de noms isolent la pile réseau (c’est la base des conteneurs : Docker : réseau, LXD : réseau). Utiles pour tester sans toucher la configuration principale. Pour une interface de test sans matériel : ip link add dummy0 type dummy.
Routage et transfert de paquets
Section intitulée « Routage et transfert de paquets »sysctl net.ipv4.ip_forwardecho 'net.ipv4.ip_forward=1' | sudo tee /etc/sysctl.d/99-routage.confecho 'net.ipv6.conf.all.forwarding=1' | sudo tee -a /etc/sysctl.d/99-routage.confsudo sysctl --systemPour faire d’une machine un routeur (ou une passerelle VPN) : activer le transfert et régler le pare-feu (règles route et traduction d’adresses : UFW : écrire des règles). Désactivé par défaut : n’activer que si nécessaire.
Paramètres réseau du noyau (sysctl)
Section intitulée « Paramètres réseau du noyau (sysctl) »sysctl -a 2>/dev/null | grep -E "^net\.core\.(somaxconn|netdev_max_backlog)|^net\.ipv4\.(tcp_max_syn_backlog|ip_local_port_range|tcp_fin_timeout)"| Paramètre | Rôle | Quand l’ajuster |
|---|---|---|
net.core.somaxconn |
File d’attente d’acceptation des connexions | Serveur web très sollicité (messages « listen queue overflow ») |
net.ipv4.ip_local_port_range |
Ports éphémères sortants | Épuisement de ports (très nombreuses connexions sortantes) |
net.ipv4.tcp_fin_timeout |
Durée de l’état FIN-WAIT |
Rarement |
net.ipv4.tcp_tw_reuse |
Réutilisation des connexions TIME-WAIT sortantes |
Client avec beaucoup de connexions courtes |
net.ipv4.conf.all.rp_filter |
Filtrage de chemin inverse | Routage asymétrique |
Ne modifier ces valeurs que sur mesure d’un problème précis (voir Noyau et démarrage). Les valeurs par défaut conviennent à la plupart des serveurs.
Dépannage
Section intitulée « Dépannage »| Symptôme | Piste |
|---|---|
| Pas d’accès à Internet, le réseau local fonctionne | Route par défaut absente (ip route), DNS (resolvectl status), pare-feu de l’hébergeur |
ping 1.1.1.1 répond, ping exemple.com échoue |
DNS : resolvectl query, serveurs dans Netplan |
| Connexion SSH perdue après un changement réseau | Utiliser netplan try ; accès console |
Temporary failure in name resolution |
systemd-resolved arrêté (systemctl status systemd-resolved), serveurs DNS injoignables |
| Beaucoup de retransmissions, lenteurs | ss -ti, MTU (ping -M do -s 1472), ethtool -S, câble ou lien |
| Service injoignable de l’extérieur | Écoute sur 127.0.0.1 seulement (ss -tlnp), pare-feu (Pare-feu : diagnostic), hébergeur |
| Deux interfaces, mauvaise route de retour | Routage asymétrique : règles de politique (ip rule) ou rp_filter |
RTNETLINK answers: File exists |
Adresse ou route déjà présente : ip route replace, ip addr show |
Ubuntu 24.04 et 26.04 : différences à connaître
Section intitulée « Ubuntu 24.04 et 26.04 : différences à connaître »Netplan et systemd-resolved sont utilisés sur les deux versions. La commande netplan status est disponible dans les versions récentes de Netplan. Les outils dig viennent du paquet bind9-dnsutils ; mtr du paquet mtr-tiny.
Pour aller plus loin
Section intitulée « Pour aller plus loin »- Manuels :
man ip,man ss,man netplan,man resolvectl, Netplan - Suite : Permissions et sécurité du système