Configuration réseau d'un serveur Debian 13
Dans cet article, je vais m'intéresser de plus près à la configuration du réseau sur un serveur Debian. Dans la mesure du possible, je vais privilégier une approche pratique et pragmatique, en m'appuyant sur trois cas de figure de mon quotidien :
-
Exemple n° 1 : serveur LAN
-
Exemple n° 2 : serveur dédié
-
Exemple n° 3 : routeur
Note pour les chipoteurs
Le terme serveur LAN est une distinction purement pragmatique qui désigne une machine telle qu'on la trouve dans le local de serveurs d'une école, d'une mairie ou d'une PME, par opposition à un serveur dédié installé dans un datacenter.
Reportez-vous à mon précédent article pour la configuration post-installation de ces machines.
Discours de la méthode
Si vous avez déjà utilisé d'autres systèmes Linux ou BSD, vous savez probablement que la configuration du réseau constitue l'un des éléments qui différencient les distributions entre elles.
À titre d'exemple, les distributions de la famille Red Hat Enterprise Linux
vous obligent de passer par NetworkManager pour la configuration du réseau
depuis la version 7.0. Les anciennes versions de Red Hat Enterprise Linux
permettaient de configurer le réseau en éditant une série de fichiers texte
dans /etc/sysconfig/network-scripts avant que les ingénieurs Red Hat ne
décident de nous imposer leur dose de merdification habituelle.
NetworkManager sur un serveur ?
NetworkManager est un outil de gestion de réseau qui a révolutionné l'utilisation de Linux sur les ordinateurs portables, c'est-à-dire sur des machines qui doivent pouvoir se connecter à différents réseaux de manière itinérante.
Sur un serveur en revanche, NetworkManager constitue tout au plus une couche d'abstraction supplémentaire en infraction totale avec la philosophie Unix et le principe KISS.
Debian fournit NetworkManager dans ses dépôts et l'installe même par défaut
sur toutes les configurations de type poste de travail.
Sur un système minimal de type serveur en revanche, NetworkManager n'est pas
installé, et Debian permet de configurer le réseau de façon saine et simple, en
éditant une poignée de fichiers de configuration pérennes avec une syntaxe
simple et transparente.
Désactiver l'IPv6
L'IPv6 est le protocole réseau du futur et nous l'utiliserons donc dans le futur. En attendant, nous pouvons sereinement le désactiver s'il ne nous sert à rien.1
Concrètement, il me faut modifier deux paramètres du noyau. Pour ce faire, je
peux éditer un fichier /etc/sysctl.d/disable-ipv6.conf comme ceci :
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
Je prends en compte les modifications :
Désormais on n'utilise plus que l'IPv4 :
$ ip addr show dev enp3s0
2: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc ...
link/ether b0:83:fe:90:4d:64 brd ff:ff:ff:ff:ff:ff
altname enxb083fe904d64
inet 192.168.2.3/24 brd 192.168.2.255 scope global enp3s0
valid_lft forever preferred_lft forever
Cette configuration est persistante, c'est-à-dire que vous la retrouverez au prochain redémarrage.
Reconfigurer OpenSSH
Pour faire les choses proprement, on va reconfigurer le serveur SSH en lui
indiquant qu'on utilise uniquement l'IPv4. Ouvrez le fichier
/etc/ssh/sshd_config avec les privilèges nécessaires et repérez la stance
suivante :
Décommentez et éditez les options AddressFamily et ListenAddress comme
ceci :
Prenez en compte les modifications :
Exemple n° 1 : serveur LAN
Lorsque j'ai installé ma machine locale, j'ai opté pour une configuration
DHCP provisoire. Sous le capot, cette configuration a été inscrite dans le
fichier /etc/network/interfaces :
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
allow-hotplug enp3s0
iface enp3s0 inet dhcp
La syntaxe du fichier /etc/network/interfaces
Les directives utilisées dans le fichier /etc/network/interfaces sont
assez intuitives, à l'exception de allow-hotplug qui désigne une
interface susceptible d'être activée dès lors qu'elle est détectée par
udev. Jetez un œil dans interfaces(5) pour en savoir plus.
Je connais déjà mon adresse IP (192.168.2.3/24). Je me renseigne sur la
passerelle et le serveur DNS :
$ ip route show default
default via 192.168.2.1 dev enp3s0 proto dhcp src 192.168.2.3 ...
$ cat /etc/resolv.conf
# Generated by dhcpcd from enp3s0.dhcp
# /etc/resolv.conf.head can replace this line
domain microlinux.lan
nameserver 192.168.2.1
# /etc/resolv.conf.tail can replace this line
Je dispose de toutes les infos nécessaires pour définir une configuration réseau statique :
auto lo
iface lo inet loopback
# LAN
allow-hotplug enp3s0
iface enp3s0 inet static
address 192.168.2.3/24
gateway 192.168.2.1
J'assainis la configuration inscrite dans /etc/hosts :
À ce stade je redémarre la machine :2
Il ne me reste plus qu'à inscrire les infos DNS dans /etc/resolv.conf :
Exemple n° 2 : serveur dédié
Voyons comment se passent les choses sur mon serveur dédié fraîchement
installé. Je jette un œil dans le fichier /etc/network/interfaces généré par
l'installateur de Scaleway, et je suis surpris de trouver une configuration
DHCP :
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
allow-hotplug enp1s0
iface enp1s0 inet dhcp
J'aimerais bien la remplacer par une configuration statique. Dans un premier temps, je vais récupérer les paramètres réseau en vigueur :
$ ip addr show dev enp1s0
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc ...
link/ether 00:08:a2:0c:4d:1e brd ff:ff:ff:ff:ff:ff
altname enx0008a20c4d1e
inet 195.154.114.174/24 brd 195.154.114.255 scope global ...
valid_lft 378052666sec preferred_lft 330773807sec
$ ip route show default
default via 195.154.114.1 dev enp1s0 proto dhcp src 195.154.114.174 ...
$ cat /etc/resolv.conf
# Generated by dhcpcd from enp1s0.dhcp
# /etc/resolv.conf.head can replace this line
domain online.net
nameserver 51.159.47.26
nameserver 51.159.47.28
# /etc/resolv.conf.tail can replace this line
J'édite /etc/network/interfaces en conséquence :
auto lo
iface lo inet loopback
# WAN
allow-hotplug enp1s0
iface enp1s0 inet static
address 195.154.114.174/24
gateway 195.154.114.1
Là aussi, j'assainis la configuration inscrite dans /etc/hosts :
Je redémarre le serveur :
Je me reconnecte et j'inscris les infos DNS dans /etc/resolv.conf :
Exemple n° 3 : routeur
Dans l'exemple ci-dessous, mon routerboard PC Engines est censé faire
office de passerelle entre les deux réseaux 192.168.2.0/24 et
192.168.3.0/24.
Pour commencer, je définis une configuration statique pour l'interface externe
enp1s0 :
auto lo
iface lo inet loopback
# WAN
allow-hotplug enp1s0
iface enp1s0 inet static
address 192.168.2.251/24
gateway 192.168.2.1
J'édite /etc/hosts en fonction de mon réseau interne :
À ce stade, je redémarre mon routeur :
Je me reconnecte et j'inscris les infos DNS dans /etc/resolv.conf :
À présent, je peux éditer /etc/network/interfaces et ajouter mon interface
enp2s0 :
# /etc/network/interfaces
auto lo
iface lo inet loopback
# WAN
allow-hotplug enp1s0
iface enp1s0 inet static
address 192.168.2.251/24
gateway 192.168.2.1
# LAN
allow-hotplug enp2s0
iface enp2s0 inet static
address 192.168.3.1/24
Pas la peine de redémarrer pour prendre en compte cette nouvelle configuration :
Voilà le résultat :
$ ip addr
...
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc ...
link/ether 00:0d:b9:4b:5b:5c brd ff:ff:ff:ff:ff:ff
altname enx000db94b5b5c
inet 192.168.2.251/24 brd 192.168.2.255 scope global enp1s0
valid_lft forever preferred_lft forever
3: enp2s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc ...
link/ether 00:0d:b9:4b:5b:5d brd ff:ff:ff:ff:ff:ff
altname enx000db94b5b5d
inet 192.168.3.1/24 brd 192.168.3.255 scope global enp2s0
valid_lft forever preferred_lft forever
...
Configurer un bridge
Ce n'est peut-être pas inutile de mentionner un cas de figure que je peux rencontrer dans mon quotidien professionnel : la mise en place d'un bridge. Concrètement, lorsque je veux installer et configurer un hyperviseur KVM sur une machine locale, j'aurai besoin d'un bridge si je veux retrouver mes machines virtuelles dans le même sous-réseau.
Prenons l'exemple de la machine sandbox.microlinux.lan configurée plus haut.
Voici sa configuration actuelle :
auto lo
iface lo inet loopback
# LAN
allow-hotplug enp3s0
iface enp3s0 inet static
address 192.168.2.3/24
gateway 192.168.2.1
J'installe les outils nécessaires pour mettre en place un bridge :
Je définis mon bridge dans /etc/network/interfaces :
auto lo
iface lo inet loopback
# LAN
auto enp3s0
iface enp3s0 inet manual
# Bridge
auto br0
iface br0 inet static
bridge_ports enp3s0
hwaddress ether b0:83:fe:90:4d:64
address 192.168.2.3/24
gateway 192.168.2.1
Définir l'adresse MAC du bridge
Vous aurez remarqué que j'attribue l'adresse MAC de l'interface enp3s0 à
mon bridge. Je peux très bien le faire dans une configuration simple
comme celle-ci. Si cela vous choque, dites-vous que c'est le fonctionnement
par défaut des systèmes Red Hat Enterprise Linux.
Je prends en compte cette nouvelle configuration :
Et voici mon bridge flambant neuf :
$ ip addr
...
2: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc ...
link/ether b0:83:fe:90:4d:64 brd ff:ff:ff:ff:ff:ff
altname enxb083fe904d64
4: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc ...
link/ether b0:83:fe:90:4d:64 brd ff:ff:ff:ff:ff:ff
inet 192.168.2.3/24 brd 192.168.2.255 scope global br0
valid_lft forever preferred_lft forever
Pour l'anecdote, rien ne m'empêche d'utiliser cette méthode pour configurer un bridge sur un serveur dédié dans un datacenter. Le principe est exactement le même. Voici la configuration réseau par défaut de ma Dedibox :
auto lo
iface lo inet loopback
# WAN
allow-hotplug enp1s0
iface enp1s0 inet static
address 195.154.114.174/24
gateway 195.154.114.1
J'installe les outils nécessaires :
J'édite /etc/network/interfaces pour mettre en place le bridge :
auto lo
iface lo inet loopback
# WAN
auto enp1s0
iface enp1s0 inet manual
# Bridge
auto br0
iface br0 inet static
bridge_ports enp1s0
hwaddress ether 00:08:a2:0c:4d:1e
address 195.154.114.174/24
gateway 195.154.114.1
Je prends en compte la nouvelle configuration :
Et voilà le résultat :
$ ip addr
...
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc ...
link/ether 00:08:a2:0c:4d:1e brd ff:ff:ff:ff:ff:ff
altname enx0008a20c4d1e
3: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc ...
link/ether 00:08:a2:0c:4d:1e brd ff:ff:ff:ff:ff:ff
inet 195.154.114.174/24 brd 195.154.114.255 scope global br0
valid_lft forever preferred_lft forever
Et maintenant ?
La suite au prochain numéro, où nous allons mettre en place un pare-feu pour toutes ces machines.
-
Payez-moi un euro pour chaque Taliban du réseau qui prononce sa fatwa lorsque je me permets de désactiver l'IPv6 sur une machine où je ne m'en sers pas, et je peux envisager de prendre ma retraite.
↩
-
Je vous vois frétiller sur vos chaises pour me sommer d'utiliser
sudo systemctl networking restartpour prendre en compte la nouvelle configuration sans redémarrage. Essayez donc... et demandez-vous par la suite pourquoi la configuration de votre fichier/etc/resolv.confdisparaît mystérieusement au prochain redémarrage. ↩
La rédaction de cette documentation demande du temps et des quantités significatives de café espresso. Vous appréciez ce blog ? Offrez un café au rédacteur en cliquant sur la tasse.

