Notes et transcriptions du cours “Administrez un système Linux” disponible sur la plateforme Openclassrooms.
La plupart du temps, votre serveur Linux sera installé au fin fond d'une salle blanche avec nombreux de ses cousins, et son administration s'effectuera à distance via un terminal. Mais ce mode opératoire n'est rendu possible qu'à la condition que votre serveur soit lui-même connecté sur un réseau.
Dans ce chapitre, je vous propose de voir tout ce qui concerne la configuration réseau d'un serveur Linux, que ce soit :
La configuration du réseau sous Linux est un aspect qui varie fortement entre les distributions. En effet, chaque distribution aura tendance à installer les outils qui lui sont propres pour gérer le réseau. Vous pourrez notamment trouver NetworkManager
, Connection-Manager
, ou encore dhcpcd
.
Nous faire abstraction de ces différents outils et passer en revue la configuration manuelle du réseau via un processus démon. Ce processus gère :
Normalement, avec cette méthode, vous serez en mesure de configurer le réseau sur toutes les distributions.
Je vous expliquerai les différences qu’il y a entre les branches RedHat et Debian lorsque ce sera nécessaire.
Premier élément de configuration réseau du serveur : son nom réseau.
Le nom réseau d'un serveur Linux (aussi appelé “system hostname”) sert d'identifiant par défaut de la machine pour tous les services et applications qui s'exécutent en local et pour beaucoup de services et d'applications lorsque ceux-ci communiquent sur le réseau.
Prenez l'exemple d'un serveur de fichiers logs centralisés sur un réseau interne : toutes les communications logs des serveurs du réseau seront préfixées de leur nom réseau, ce qui permettra au service de centralisation des logs de savoir d'où viennent tels ou tels fichiers.
Si tous les serveurs de logs ont le même nom réseau (par exemple localhost qui est proposé pendant le processus d'installation), difficile de reconnaître l'origine des fichiers communiqués.
# Afficher le nom d'hote cat /proc/sys/kernel/hostname # Equivalent sysctl kernel.hostname # Commande disponible avec SystemD hostnamectl status
Pour modifier le nom d'hote:
# Modification non permanente hostnamectl set-hostname newName # Modifier /etc/hostname pour conserver le nom d'hote
Lorsque de nombreux serveurs sont gérés par la même entitié, des nomenclatures de nom réseau sont mises en place généralement allant de la reprise de noms célèbres de villes du monde (sydney, beijing, bamako, etc.), en passant par des noms de personnages mythologiques diverses (heimdall, zeus, osiris, etc.), ou encore à des noms réseaux purement analytiques reprenant par exemple leur localisation ou leurs objectifs en termes de services (srv10s40, web10front, mailintra, etc.).
Une fois le nom d’hôte positionné, il est ensuite nécessaire de passer à la configuration de la carte réseau.
Avant toute configuration, il est nécessaire de s'assurer que le noyau Linux a bien détecté les cartes réseaux connectées d'une manière ou d'une autre sur la machine.
La commande dmesg(pour “display message”) permet d'afficher les messages du noyau pendant le processus de démarrage et notamment lorsque ce dernier charge les pilotes des périphériques qui vérifient si un matériel connecté leur est compatible.
# Afficher les messages noyau dmesg # Filtrer pour obtenir les informations relatives au réseau dmesg | grep Network # Les périphériques réseau reconnus par le noyau sont listés # dans le répertoire /sys/class/net ls -l /sys/class/net
Pour les plus anciens d'entre nous, la commande permettant de configurer une interface réseau de manière dynamique était ifconfig
.
Cependant cette commande et le package associé net-tools
ne sont plus maintenus depuis 2009. Notamment parce que la communauté de développeurs considérait qu’elles n’étaient pas optimisées, ne profitant pas non plus des nouvelles fonctionnalités des noyaux Linux. Ainsi la commande ifconfig
mais également des commandes comme netstat
, que j'ai beaucoup utilisées, ont disparu.
Heureusement pour nous, le package iproute2
fournit les commandes qui remplacent les précédentes.
En l'occurrence, désormais, sur toutes les distributions Linux, vous pouvez configurer de manière dynamique les cartes réseaux avec la commande ip
.
Voyons comment utiliser la commande ip pour gérer vos interfaces réseaux et notamment leur attribuer une adresse de manière dynamique.
# Lister les liens réseaux existants ip link show # Lister les adresses IP attribuées aux liens existants ip addr show # Ajouter une adresse à une interface ip addr add 192.168.1.10/24 dev enp0s3 # Lister les adresses de la carte enp0s3 ip addr show enp0s3 # Supprimer l'adresse de l'interface ip addr del 192.168.1.10/24 dev enp0s3
Ces modifications dynamiques ne seront pas conservées après redémarrage de la machine.
Toutes les configurations de réseau sur les cartes gérées par la commande ip
sont dynamiques. Elles seront donc perdues entre chaque “reboot” du serveur.
Pour configurer de manière statique les cartes réseaux de Linux, il est nécessaire de saisir les informations dans des fichiers de configuration qui vont être lus pendant le boot du serveur.
Sous Debian et ses dérivés, le répertoire de configuration des interfaces réseaux est /etc/network
.
Le fichier interfaces
permet de déclarer cette configuration de manière statique.
# Configuration de l'interface loopback auto lo iface lo inet loopback # Configuration DHCP pour l'interface enp0s3 allow-hotplug enp0s3 iface enp0s3 inet dhcp iface enp0s3 inet6 auto # Configuration statique pour l'interface enp0s8 auto enp0s8 iface enp0s8 inet static address 192.168.1.10 netmask 255.255.255.0
Redémarre le service réseau après modification des fichiers de configuration :
systemctl restart networking.service
Pour les distributions REDHAT et dérivés (notamment CentOS), le répertoire de configuration des cartes est /etc/sysconfig/network-scripts/
. Ce répertoire contient notamment un fichier préfixé ifcfg-
pour chaque carte reconnue par le système.
TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no #BOOTPROTO=dhcp BOOTPROTO=none DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=enp0s8 UID=54ccbe6a-9136-4706-b8b0-e20595dc7a8c DEVICE=enp0s8 ONBOOT=yes IPADDR=192.168.0.10 NETMASK=255.255.255.0
On redémarre le service:
systemctl restart network
À ce stade, les cartes réseaux sont configurées, mais il est encore nécessaire d'indiquer les configurations pour les paquets qui en sortent. On parle de :
Pour gérer de manière dynamique les routes et passerelles sur le serveur Linux, encore une fois, le package iproute2
est votre outil de préférence.
Voyons comment utiliser la commande ip
du package iproute2
pour gérer les routes associées aux cartes réseaux du système. Cela permet par exemple de :
# Afficher les routes ip route list # Modifier la route par défaut # Supprimer la route ip route del default via 192.168.1.1 # Ajouter la nouvelle route ip route add default via 192.168.1.254 dev enp0s3 # Ajouter une route permettant de joindre le réseau # 192.168.10.0 par l'interface enp0s8 ip route add 192.168.10.0/24 via 192.168.33.254 dev enp0s8
Le paramétrage via ip est dynamique, pour que les routes soient permanentes, il faut les déclarer dans les fichiers de configuration des cartes réseau :
# Configuration de l'interface loopback auto lo iface lo inet loopback # Configuration DHCP pour l'interface enp0s3 allow-hotplug enp0s3 iface enp0s3 inet dhcp iface enp0s3 inet6 auto # Configuration statique pour l'interface enp0s8 auto enp0s8 iface enp0s8 inet static address 192.168.1.10 netmask 255.255.255.0 # Passerelle par défaut pour le réseau 192.168.1.0/24 gateway 192.168.1.254 # Enregistre la route après chargement de l'interface post-up ip route add 192.168.10.0/24 via 192.168.1.254 dev enp0s8
TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no #BOOTPROTO=dhcp BOOTPROTO=none DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=enp0s8 UID=54ccbe6a-9136-4706-b8b0-e20595dc7a8c DEVICE=enp0s8 ONBOOT=yes IPADDR=192.168.0.10 NETMASK=255.255.255.0 GATEWAY=192.168.0.254
Les routes statiques doivent être déclarées dans un fichier dédié :
default via 192.168.0.254 192.168.10.0/24 via 192.168.0.254 dev enp0s8
Enfin, dernier point de configuration réseau du serveur, les services de résolutions de noms de domaine, ou DNS pour Domain Name System. Ce service permet au serveur d'effectuer la résolution des noms de domaines en adresse IP, afin d'envoyer des requêtes selon le protocole du service destinataire.
Vous utilisez ce service tous les jours avec votre navigateur, lorsque vous saisissez une URL dans la barre d’adresse afin d'accéder à un site web. Votre navigateur, par l'intermédiaire d'un service de résolution de nom, émet une requête pour demander la résolution de l'URL en une adresse IP identifiant de manière unique le serveur qui héberge le site web.
Sur un serveur Linux, il est nécessaire de configurer les services de résolutions de noms de domaine. En règle générale, il s'agit simplement d'indiquer dans un fichier de configuration les adresses IP des serveurs hébergeant les services de résolution de noms de domaine.
Cette configuration est identique entre les distributions DEBIAN et les distributions dérivées REDHAT. Cela se passe dans les fichiers /etc/hosts
et /etc/resolv.conf
.
Analysons ces fichiers pour comprendre le fonctionnement des résolutions de noms sur un serveur Linux. On en profitera pour observer la configuration du fichier /etc/nsswitch.conf
qui est très importante.
C'est le fichier /etc/nswitch.conf
qui détermine les méthodes de résolutions de noms employées par le système et leur ordre d'appel.
En général pour la résoltion des noms d'hotes on a l'entrée :
... hosts: files dns ...
Pour résoudre des noms d'hôte le système s'appuie donc en priorité sur les fichiers locaux et dans un second temps sur le service dns.
Le fichier déclarant les noms d'hotes est le fichier /etc/hosts
. Il contient les correspondances IP FQDN
Lorsque le système s'appuie dans un second temps sur la résolution DNS, un autre fichier de configuration est lu : /etc/resol.conf
qui permet d'indiquer quels serveurs DNS le système doit consulter
domain home search home nameserver 192.168.0.1 nameserver 8.8.8.8 nameserver 8.8.4.4 ...
domain
(facultative) permet de compléter automatiquement les noms non pleinement qualifiés ;search
(facultative) indique au système quel domaine utiliser pour résoudre des noms d'hotes non pleinement qualifié. Dans ce chapitre, vous avez effectué toutes les actions nécessaires à la connexion du serveur Linux sur un réseau :
N'oubliez pas de rebooter volontairement votre serveur afin de simuler une perte de courant électrique et de vous assurer que votre configuration est à nouveau bien établie lorsque la machine redémarre.
L'étape suivante pour administrer votre serveur, c’est la prise en main à distance via SSH.