Chapitre 1116 minIntermédiaire
Configurer le réseau sous Linux : IP fixe, ifupdown, NetworkManager, netplan
Par Josselyn C., prof de BTS SIO. Mis à jour le .
À la fin de ce chapitre, tu sauras
- lire la configuration réseau avec la commande
ip; - configurer une adresse fixe avec ifupdown, NetworkManager ou netplan ;
- régler les serveurs DNS et le nom de la machine ;
- diagnostiquer une panne réseau couche par couche ;
- repérer les services exposés avec
ss.
4 exercices corrigés
Configurer le réseau d'un serveur Linux, c'est lui donner une adresse IP, un masque, une passerelle et des serveurs DNS, de façon temporaire avec la commande ip ou permanente dans les fichiers de l'outil réseau de la distribution : ifupdown (/etc/network/interfaces) sur un serveur Debian, NetworkManager sur un poste, netplan sur Ubuntu. Ce chapitre montre les trois, puis une méthode de diagnostic couche par couche avec ip, ping, ss et dig.
Les interfaces et la commande ip
La commande ip (paquet iproute2) remplace les anciennes ifconfig, route et netstat, absentes d'une installation Debian récente.
| Commande | Ce qu'elle montre ou fait |
|---|---|
ip -br link | Les interfaces et leur état (UP, DOWN), en une ligne chacune |
ip -br address (ip -br a) | Les adresses IP de chaque interface |
ip address show ens18 | Le détail d'une interface |
ip route (ip r) | La table de routage, dont la route par défaut |
ip route get 192.168.10.177 | Par quelle interface et quelle passerelle partirait un paquet vers cette adresse |
ip neigh | Le cache ARP : les adresses MAC des voisins |
ip -s link show ens18 | Les compteurs de paquets et d'erreurs |
clambert@srv-web:~$ ip address show ens18
2: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether bc:24:11:5a:3c:01 brd ff:ff:ff:ff:ff:ff
altname enp0s18
inet 192.168.10.225/28 brd 192.168.10.239 scope global ens18
valid_lft forever preferred_lft forever
inet6 fe80::be24:11ff:fe5a:3c01/64 scope link
valid_lft forever preferred_lft forever
clambert@srv-web:~$ ip route
default via 192.168.10.238 dev ens18
192.168.10.224/28 dev ens18 proto kernel scope link src 192.168.10.225
Le nom des interfaces. Linux nomme les cartes d'après leur emplacement matériel, pour que le nom ne change pas d'un démarrage à l'autre : en pour Ethernet, wl pour Wi-Fi, puis s18 (emplacement 18, le cas des VM Proxmox : ens18), p0s3 (bus PCI 0, emplacement 3, le cas de VirtualBox : enp0s3) ou o1 (carte intégrée à la carte mère : eno1). Commence toujours par ip -br link pour connaître le nom exact : toute la configuration en dépend.
Une configuration temporaire. ip modifie la configuration en mémoire, perdue au redémarrage. C'est utile pour un test ou un dépannage :
sudo ip address add 192.168.10.225/28 dev ens18
sudo ip link set ens18 up
sudo ip route add default via 192.168.10.238
sudo ip address flush dev ens18 # retire toutes les adresses de l'interface
Pour qu'une configuration survive au redémarrage, on l'écrit dans les fichiers de l'outil qui gère le réseau. Il y en a un seul par interface : deux outils qui configurent la même carte se marchent dessus.
| Outil | Où on le trouve | Fichiers |
|---|---|---|
| ifupdown | Debian installée sans environnement de bureau (nos serveurs) | /etc/network/interfaces et /etc/network/interfaces.d/ |
| NetworkManager | Debian avec bureau, postes de travail, portables | /etc/NetworkManager/system-connections/, piloté par nmcli ou nmtui |
| netplan | Ubuntu Server et Desktop | /etc/netplan/*.yaml, qui génère la configuration de systemd-networkd ou de NetworkManager |
| systemd-networkd | Possible partout, fréquent sur les images cloud et les conteneurs | /etc/systemd/network/*.network |
Debian : ifupdown et /etc/network/interfaces
Sur srv-web, l'installeur a écrit l'adresse saisie dans /etc/network/interfaces :
# /etc/network/interfaces
source /etc/network/interfaces.d/*
# L'interface de bouclage
auto lo
iface lo inet loopback
# La carte de la DMZ
allow-hotplug ens18
iface ens18 inet static
address 192.168.10.225/28
gateway 192.168.10.238
| Ligne | Sens |
|---|---|
auto ens18 | Activer l'interface au démarrage |
allow-hotplug ens18 | L'activer quand le noyau la détecte (équivalent pour une carte présente au démarrage) |
iface ens18 inet static | Configuration IPv4 fixe (inet dhcp pour le DHCP, inet6 pour IPv6) |
address 192.168.10.225/28 | L'adresse et le masque, en notation CIDR |
gateway 192.168.10.238 | La passerelle par défaut : le pare-feu, dernière adresse utilisable de la DMZ |
Les serveurs DNS ne se règlent pas dans ce fichier, sauf si le paquet resolvconf est installé (les lignes dns-nameservers que l'installeur y ajoute parfois sont alors lues). Sans lui, c'est le fichier /etc/resolv.conf qui fait foi :
# /etc/resolv.conf de srv-web
search sorbier.example
nameserver 192.168.10.238
Pour srv-journaux, dans le VLAN des serveurs, les serveurs DNS sont les deux contrôleurs de domaine, qui résolvent les noms internes et transmettent le reste :
# /etc/resolv.conf de srv-journaux
search ad.sorbier.example
nameserver 192.168.10.177
nameserver 192.168.10.181
Appliquer une modification. sudo ifdown ens18 && sudo ifup ens18 relance une interface, sudo systemctl restart networking relance toutes celles du fichier. Fais-le depuis la console de la VM (Proxmox, onglet Console), pas depuis une session SSH : une erreur de saisie coupe ta propre connexion, et tu n'as plus de moyen de corriger à distance. En DHCP (inet dhcp), Debian 13 utilise le client dhcpcd, qui remplace l'ancien isc-dhcp-client.
Le nom de la machine se règle avec sudo hostnamectl set-hostname srv-web, et /etc/hosts doit associer ce nom à la machine elle-même :
127.0.0.1 localhost
127.0.1.1 srv-web.sorbier.example srv-web
NetworkManager et nmcli
Sur une Debian avec bureau (ou un serveur où on l'installe exprès), NetworkManager gère les interfaces qui ne sont pas déclarées dans /etc/network/interfaces. On le pilote en ligne de commande avec nmcli, ou avec le menu texte nmtui :
nmcli device status # les interfaces et leur connexion
nmcli connection show # les profils de connexion, avec leur nom
sudo nmcli connection modify "Wired connection 1" \
ipv4.method manual \
ipv4.addresses 192.168.10.180/28 \
ipv4.gateway 192.168.10.190 \
ipv4.dns "192.168.10.177 192.168.10.181" \
ipv4.dns-search ad.sorbier.example
sudo nmcli connection up "Wired connection 1"
Le nom du profil varie selon la langue et l'installation : prends celui qu'affiche nmcli connection show. NetworkManager écrit lui-même /etc/resolv.conf à partir des DNS du profil. Une interface déclarée dans /etc/network/interfaces apparaît comme unmanaged (non gérée) dans nmcli device status : pour la confier à NetworkManager, il faut la retirer de ce fichier.
Ubuntu : netplan
Ubuntu décrit le réseau en YAML dans /etc/netplan/. Le même srv-journaux sous Ubuntu Server 24.04 ou 26.04 :
# /etc/netplan/50-cloud-init.yaml
network:
version: 2
ethernets:
ens18:
dhcp4: false
addresses:
- 192.168.10.180/28
routes:
- to: default
via: 192.168.10.190
nameservers:
addresses: [192.168.10.177, 192.168.10.181]
search: [ad.sorbier.example]
En YAML, l'indentation fait la structure : des espaces, jamais de tabulation, deux par niveau. La forme gateway4: qu'on trouve encore sur Internet est dépréciée : on écrit une route to: default.
sudo chmod 600 /etc/netplan/50-cloud-init.yaml # netplan avertit si le fichier est lisible par d'autres (il peut contenir des secrets Wi-Fi)
sudo netplan generate # vérifie la syntaxe
sudo netplan try # applique, et annule seul au bout de 120 s sans confirmation
sudo netplan apply # applique définitivement
netplan try est précieux à distance : si la nouvelle configuration te coupe, elle est annulée toute seule. Si le fichier a été écrit par cloud-init (installation sur une image cloud), désactive la gestion du réseau par cloud-init (network: {config: disabled} dans /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg), sinon il réécrit le fichier au démarrage. Ubuntu utilise aussi systemd-resolved : /etc/resolv.conf pointe vers 127.0.0.53, et resolvectl status montre les vrais serveurs DNS.
Diagnostiquer le réseau, couche par couche
Quand « le réseau ne marche pas », on remonte les couches dans l'ordre, et on s'arrête à la première qui échoue :
| Étape | Question | Commande | Si ça échoue |
|---|---|---|---|
| 1 | La carte est-elle connectée ? | ip -br link (UP, LOWER_UP) | Câble, carte virtuelle déconnectée dans l'hyperviseur, mauvais pont ou VLAN |
| 2 | A-t-elle la bonne adresse et le bon masque ? | ip -br a | Configuration, DHCP |
| 3 | La passerelle répond-elle ? | ping -c 3 192.168.10.238 | VLAN, masque, pare-feu de la passerelle |
| 4 | Le routage sort-il ? | ip route, ping -c 3 9.9.9.9, tracepath 9.9.9.9 | Route par défaut, NAT, règles du pare-feu |
| 5 | Les noms se résolvent-ils ? | dig deb.debian.org, dig @192.168.10.177 srv-ad.ad.sorbier.example | /etc/resolv.conf, serveur DNS |
| 6 | Le service écoute-t-il ? | sudo ss -tulpn (sur le serveur) | Service arrêté, mauvaise adresse d'écoute |
| 7 | Le port est-il joignable depuis le client ? | nc -zv 192.168.10.225 443, curl -I https://suivi.sorbier.example | Pare-feu local ou réseau |
dig est dans le paquet bind9-dnsutils, nc dans netcat-openbsd, tracepath dans iputils-tracepath. Un ping sans réponse ne prouve pas que la machine est éteinte : beaucoup de pare-feu bloquent ICMP. Un test de port avec nc ou curl est plus parlant.
ss liste les connexions et les ports en écoute :
clambert@srv-web:~$ sudo ss -tulpn
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
tcp LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=620,fd=6))
tcp LISTEN 0 511 0.0.0.0:443 0.0.0.0:* users:(("nginx",pid=620,fd=8))
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=540,fd=6))
tcp LISTEN 0 5 127.0.0.1:8080 0.0.0.0:* users:(("python3",pid=701,fd=3))
tcp LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=540,fd=7))
Les options : -t TCP, -u UDP, -l en écoute, -p le programme, -n les numéros plutôt que les noms. Lis la colonne Local Address : 0.0.0.0 (ou [::] en IPv6) signifie « sur toutes les interfaces », donc joignable depuis le réseau ; 127.0.0.1 signifie « seulement depuis la machine elle-même ». Ici, l'API n'écoute qu'en local, derrière nginx : c'est voulu. ss -tn sans -l montre les connexions établies.
Le filtrage local d'un serveur Debian (nftables) est présenté dans le cours Cybersécurité des infrastructures ; le calcul des masques et des plages d'adresses, dans Réseaux fondamentaux.
Exercices
Exercice 1 sur 4 Configurer srv-journaux en IP fixe Réussi À revoir
Écris la configuration permanente de srv-journaux sous Debian 13 (interface ens18, adresse 192.168.10.180 dans 192.168.10.176/28, passerelle 192.168.10.190, DNS srv-ad et srv-ad2, domaine ad.sorbier.example) : le contenu des fichiers, puis la commande pour appliquer et celles pour vérifier.
Voir la réponseMasquer la réponse de l'exercice 1
/etc/network/interfaces :
source /etc/network/interfaces.d/*
auto lo
iface lo inet loopback
auto ens18
iface ens18 inet static
address 192.168.10.180/28
gateway 192.168.10.190
/etc/resolv.conf :
search ad.sorbier.example
nameserver 192.168.10.177
nameserver 192.168.10.181
Depuis la console : sudo systemctl restart networking (ou sudo ifdown ens18 && sudo ifup ens18). Vérifications : ip -br a (l'adresse 192.168.10.180/28), ip route (default via 192.168.10.190), ping -c 3 192.168.10.190, dig srv-ad.ad.sorbier.example (réponse 192.168.10.177), dig deb.debian.org.
Tu avais trouvé ?
Exercice 2 sur 4 Un masque mal saisi Réussi À revoir
Moussa Diallo a écrit address 192.168.10.180/29 au lieu de /28. Au redémarrage du réseau, il obtient « Error: Nexthop has invalid gateway ».
- Calcule le réseau, la plage d'hôtes et l'adresse de diffusion de
192.168.10.180/29. - Explique le message d'erreur.
- Quelles machines
srv-journauxpeut-il encore joindre ?
Voir la réponseMasquer la réponse de l'exercice 2
- Un /29 compte 8 adresses ; les blocs commencent à
.176: réseau192.168.10.176, hôtes.177à.182, diffusion.183. - La passerelle
192.168.10.190n'est pas dans le réseau.176/29de l'interface : le noyau refuse une route par une passerelle qu'il ne sait pas joindre directement.srv-journauxn'a donc plus de route par défaut. - Seulement les machines de
.177à.182:srv-ad(.177),srv-fichiers(.178),srv-gestion(.179) etsrv-ad2(.181). Plus rien hors de ce bloc : nisrv-weben DMZ, ni le poste d'administration, ni Internet. Les journaux envoyés par les autres machines n'arrivent plus non plus, puisquesrv-journauxne peut pas leur répondre.
Tu avais trouvé ?
Exercice 3 sur 4 Lire la sortie de ss Réussi À revoir
Sur un serveur de test, sudo ss -tulpn affiche :
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=512,fd=6))
tcp LISTEN 0 80 0.0.0.0:3306 0.0.0.0:* users:(("mariadbd",pid=880,fd=21))
tcp LISTEN 0 511 127.0.0.1:6379 0.0.0.0:* users:(("redis-server",pid=901,fd=6))
udp UNCONN 0 0 0.0.0.0:111 0.0.0.0:* users:(("rpcbind",pid=455,fd=5))
Pour chaque ligne, dis qui peut joindre le service et ce que tu en penses pour un serveur web qui héberge sa propre base de données.
Voir la réponseMasquer la réponse de l'exercice 3
- 22 (sshd), toutes interfaces : normal pour l'administration, à condition qu'un pare-feu limite les sources au réseau d'administration et que seules les clés soient acceptées (chapitre 12).
- 3306 (MariaDB), toutes interfaces : la base est joignable depuis le réseau alors que seule l'application locale s'en sert. À restreindre à
127.0.0.1(bind-address = 127.0.0.1dans la configuration de MariaDB). - 6379 (Redis),
127.0.0.1: joignable seulement depuis la machine : correct. - 111/UDP (rpcbind) : utile seulement pour NFS. À désinstaller (
sudo apt purge rpcbind) sur un serveur web.
Tu avais trouvé ?
Exercice 4 sur 4 Traduire pour Ubuntu Réussi À revoir
Le même serveur srv-journaux est réinstallé sous Ubuntu Server 26.04 LTS. Écris son fichier netplan et les commandes pour l'appliquer sans risque de perdre la main à distance.
Voir la réponseMasquer la réponse de l'exercice 4
network:
version: 2
ethernets:
ens18:
dhcp4: false
addresses:
- 192.168.10.180/28
routes:
- to: default
via: 192.168.10.190
nameservers:
addresses: [192.168.10.177, 192.168.10.181]
search: [ad.sorbier.example]
Puis sudo chmod 600 /etc/netplan/*.yaml, sudo netplan generate pour la syntaxe, et sudo netplan try : si la connexion survit, on confirme avec Entrée ; sinon la configuration précédente revient seule au bout de 120 secondes. Vérification : ip -br a, ip route, resolvectl status.
Tu avais trouvé ?