Aller au contenu

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.

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.

Fenêtre de terminal
ip -br link # interfaces et état
ip -br addr # adresses (format compact)
ip -s link show eth0 # compteurs (erreurs, pertes)
ip route # table de routage
ip route get 1.1.1.1 # quelle route/interface pour cette destination
ip -6 route
ip neigh # table ARP / voisinage IPv6
ip rule # règles de routage par politique

Modifications temporaires (perdues au redémarrage) :

Fenêtre de terminal
sudo ip addr add 192.0.2.10/24 dev eth0
sudo ip addr del 192.0.2.10/24 dev eth0
sudo ip link set eth0 up
sudo ip route add 198.51.100.0/24 via 192.0.2.1
sudo ip route replace default via 192.0.2.1
sudo ip link set eth0 mtu 1400

Pour une configuration permanente, passer par Netplan (voir plus bas).

Fenêtre de terminal
sudo ss -tlnp # TCP en écoute, avec processus
sudo ss -ulnp # UDP
ss -tn state established # connexions établies
ss -tn dst 203.0.113.9 # vers une adresse
ss -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]
Fenêtre de terminal
sudo chmod 600 /etc/netplan/*.yaml
sudo netplan generate # vérifie la syntaxe et génère
sudo netplan try # applique avec RETOUR AUTOMATIQUE si aucune confirmation (120 s)
sudo netplan apply # applique définitivement
sudo 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.

Fenêtre de terminal
resolvectl status # serveurs DNS par interface
resolvectl query exemple.com # résolution (et d'où vient la réponse)
resolvectl query --type=MX exemple.com
resolvectl flush-caches
resolvectl statistics
cat /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) :

Fenêtre de terminal
dig exemple.com A +short
dig @1.1.1.1 exemple.com MX
dig +trace exemple.com # chaîne de délégation complète
dig -x 203.0.113.9 # résolution inverse
getent 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.

Fenêtre de terminal
sudo tcpdump -ni eth0 -c 20 # 20 paquets
sudo tcpdump -ni eth0 port 443 and host 203.0.113.9
sudo tcpdump -ni any port 53 # requêtes DNS (toutes interfaces)
sudo tcpdump -ni eth0 'tcp[tcpflags] & tcp-syn != 0' # paquets SYN
sudo tcpdump -ni eth0 -w /tmp/capture.pcap port 8080 # enregistrer pour Wireshark
sudo tcpdump -r /tmp/capture.pcap -nn
sudo 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
Fenêtre de terminal
ping -c 4 192.0.2.1
mtr -rwc 20 exemple.com # traceroute + ping continu (paquet mtr-tiny)
traceroute -n exemple.com
nc -vz -w 3 serveur.exemple.com 443
curl -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 serveur
sudo ethtool eth0 # vitesse, duplex, lien
sudo 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.

Fenêtre de terminal
sudo ip link add br0 type bridge
sudo ip link set eth1 master br0
sudo ip link set br0 up
bridge link
sudo ip link add link eth0 name eth0.10 type vlan id 10
sudo ip addr add 192.0.2.50/24 dev eth0.10
sudo ip link set eth0.10 up
sudo ip netns add test # espace de noms réseau isolé
sudo ip netns exec test ip -br addr
sudo ip netns delete test

Les 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.

Fenêtre de terminal
sysctl net.ipv4.ip_forward
echo 'net.ipv4.ip_forward=1' | sudo tee /etc/sysctl.d/99-routage.conf
echo 'net.ipv6.conf.all.forwarding=1' | sudo tee -a /etc/sysctl.d/99-routage.conf
sudo sysctl --system

Pour 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.

Fenêtre de terminal
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.

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.