Aller au contenu
Réussir mon BTS SIO

Tape une notion, une commande ou le nom d'une épreuve.

Par exemple

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.

CommandeCe qu'elle montre ou fait
ip -br linkLes 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 ens18Le 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.177Par quelle interface et quelle passerelle partirait un paquet vers cette adresse
ip neighLe cache ARP : les adresses MAC des voisins
ip -s link show ens18Les compteurs de paquets et d'erreurs
console
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 :

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

OutilOù on le trouveFichiers
ifupdownDebian installée sans environnement de bureau (nos serveurs)/etc/network/interfaces et /etc/network/interfaces.d/
NetworkManagerDebian avec bureau, postes de travail, portables/etc/NetworkManager/system-connections/, piloté par nmcli ou nmtui
netplanUbuntu Server et Desktop/etc/netplan/*.yaml, qui génère la configuration de systemd-networkd ou de NetworkManager
systemd-networkdPossible 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 :

text
# /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
LigneSens
auto ens18Activer l'interface au démarrage
allow-hotplug ens18L'activer quand le noyau la détecte (équivalent pour une carte présente au démarrage)
iface ens18 inet staticConfiguration IPv4 fixe (inet dhcp pour le DHCP, inet6 pour IPv6)
address 192.168.10.225/28L'adresse et le masque, en notation CIDR
gateway 192.168.10.238La 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 :

text
# /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 :

text
# /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 :

text
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 :

bash
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 :

yaml
# /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.

bash
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 :

ÉtapeQuestionCommandeSi ça échoue
1La 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
2A-t-elle la bonne adresse et le bon masque ?ip -br aConfiguration, DHCP
3La passerelle répond-elle ?ping -c 3 192.168.10.238VLAN, masque, pare-feu de la passerelle
4Le routage sort-il ?ip route, ping -c 3 9.9.9.9, tracepath 9.9.9.9Route par défaut, NAT, règles du pare-feu
5Les noms se résolvent-ils ?dig deb.debian.org, dig @192.168.10.177 srv-ad.ad.sorbier.example/etc/resolv.conf, serveur DNS
6Le service écoute-t-il ?sudo ss -tulpn (sur le serveur)Service arrêté, mauvaise adresse d'écoute
7Le port est-il joignable depuis le client ?nc -zv 192.168.10.225 443, curl -I https://suivi.sorbier.examplePare-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 :

console
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 :

text
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 :

text
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 ».

  1. Calcule le réseau, la plage d'hôtes et l'adresse de diffusion de 192.168.10.180/29.
  2. Explique le message d'erreur.
  3. Quelles machines srv-journaux peut-il encore joindre ?
Voir la réponseMasquer la réponse de l'exercice 2
  1. Un /29 compte 8 adresses ; les blocs commencent à .176 : réseau 192.168.10.176, hôtes .177 à .182, diffusion .183.
  2. La passerelle 192.168.10.190 n'est pas dans le réseau .176/29 de l'interface : le noyau refuse une route par une passerelle qu'il ne sait pas joindre directement. srv-journaux n'a donc plus de route par défaut.
  3. Seulement les machines de .177 à .182 : srv-ad (.177), srv-fichiers (.178), srv-gestion (.179) et srv-ad2 (.181). Plus rien hors de ce bloc : ni srv-web en DMZ, ni le poste d'administration, ni Internet. Les journaux envoyés par les autres machines n'arrivent plus non plus, puisque srv-journaux ne 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 :

text
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.1 dans 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
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]

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é ?

Chapitre terminé !

Fais les 4 exercices avant de passer à la suite : c'est en t'entraînant que tout se fixe.

chapitres
–
de série
–
du cours
–
Chapitre suivant : SSH : connexion par clé, configuration et durcissementRevoir le sommaire du cours