Administration réseau sous Linux : du routage aux outils de configuration

Avant d'aborder les commandes de configuration réseau, il est essentiel de comprendre le mécanisme de transit des paquets et la prise de décision de routage au sein du noyau Linux. Cette compréhension constitue le socle pour maîtriser le routage et la mise en place de règles pare-feu.

Trajet d'un paquet dans le noyau Linux

Lorsqu'un hôte Linux envoie des données vers l'extérieur, le paquet traverse d'abord l'interface réseau entrante, puis le noyau effectue une décision de routage basée sur la destination. Deux cas se présentent :

  • Paquet destiné à la machine locale : le paquet passe de l'espcae noyau vers l'espace utilisateur où une application le traite. La réponse générée par l'application forme un nouveau paquet qui subit à son tour une décision de routage pour déterminer par quelle interface sortante il sera expédié.
  • Paquet destiné à un hôte tiers : le paquet doit être relayé d'une interface entrante vers une interface sortante. Cette opération requiert l'activation explicite du transfert IP (ip_forward), car un hôte Linux standard n'effectue pas cette relève par défaut, contrairement à un routeur dédié.

En revanche, sans activation du transfert de paquets, deux sous-réseaux connectés à des interfaces distinctes ne peuvent pas communiquer entre eux à travers la machine.

Activation du transfert de paquets

Deux méthodes permettent une activation temporaire :

# Écriture directe dans procfs
echo 1 > /proc/sys/net/ipv4/ip_forward

# Via l'utilitaire sysctl
sysctl -w net.ipv4.ip_forward=1

Pour une persistance après redémarrage, on écrit la directive dans un fichier de configuration sysctl. Sous les systèmes gérés par systemd (comme les distributions récentes de type CentOS/RHEL ou Debian/Ubuntu), le répertoire dédié est /etc/sysctl.d/ :

echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/forwarding.conf

Pour vérifier l'état courant :

sysctl net.ipv4.ip_forward
cat /proc/sys/net/ipv4/ip_forward
sysctl -a | grep ip_forward

Fichiers de configuration réseau essentiels

Profils d'interface réseau (ifcfg)

Le répertoire /etc/sysconfig/network-scripts/ contient les fichiers de profil d'interface, identifiables par le préfixe ifcfg-. Chaque fichier est lu au démarrage du service réseau. Voici un exemple de profil :

cat /etc/sysconfig/network-scripts/ifcfg-ens33
DEVICE="ens33"
BOOTPROTO="static"
ONBOOT=yes
TYPE="Ethernet"
DEFROUTE="yes"
PEERDNS="yes"
PEERROUTES="yes"
IPV6INIT="no"
NAME="Connexion filaire 1"
IPADDR=10.0.1.50
NETMASK=255.255.255.0
GATEWAY=10.0.1.1
DNS1=208.67.222.222
DNS2=1.1.1.1
DNS3=9.9.9.9

Le champ DEVICE doit correspondre au nom visible dans /sys/class/net/.

Configuration DNS : /etc/resolv.conf

Ce fichier définit les serveurs DNS et le comportement de résolution. Sa syntaxe se compose de plusieurs directives :

domain  nom_de_domaine          # Domaine local ajouté implicitement
search  liste_de_domaines       # Ordre de recherche (max 6, incompatible avec domain)
nameserver  IP1                 # Serveur DNS (max 3)
nameserver  IP2
nameserver  IP3
options timeout:N attempts:N    # Délai d'attente et nombre de tentatives

Comportement de la directive domain :

Lorsqu'on interroge un nom sans point (ex : serveur-web), le résolveur y ajoute automatiquement le domaine local, interrogeant donc serveur-web.exemple.com.

Un nom contenant un point mais sans point final (ex : serveur-web.prod) est traité comme FQDN : il est d'abord résolu tel quel, puis le domaine local est ajouté (serveur-web.prod.exemple.com).

Un nom terminé par un point (ex : serveur-web.prod.) est résolu exactement, sans aucune complétion.

Comportement de la directive search :

Elle fonctionne de manière similaire à domain, mais autorise une liste de domaines à parcourir séquentiellement. Par exemple, avec search alpha.com beta.com gamma.com, la requête serveur-web sera successivement résolue en serveur-web.alpha.com, serveur-web.beta.com, puis serveur-web.gamma.com.

Les directives domain et search sont mutuellement exclusives ; si les deux apparaissent, la dernière prend effet.

Règles udev et nommage des interfaces

Lors de la détection d'un nouveau périphérique réseau, le noyau expose ses informations via sysfs (monté sous /sys). Le daemon udevd consulte ensuite ses règles pour affecter un nom à l'interface. Sous CentOS 6, le fichier de règles par défaut est /etc/udev/rules.d/70-persistent-net.rules :

# Adaptateur réseau PCI e1000 — interface principale
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="02:42:ac:11:00:02", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

# Adaptateur réseau PCI e1000 — interface secondaire
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="02:42:ac:11:00:03", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"

Chaque règle associe des critères de correspondance (MAC, type, etc.) à un attribut de nommage. La valeur DEVICE dans les fichiers ifcfg-* doit correspondre au nom assigné ici.

Il est important de savoir que la suppression de ce fichier est sans conséquence : le noyau le régénère automatiquement lors de la détection des périphériques. Lors du clonage d'une machine virtuelle, des conflits d'adresse MAC peuvent survenir car les règles clonées ne correspondent plus aux nouvelles adresses matérielles. La solution consiste à vider le fichier et redémarrer.

Sous les distributions modernes, les règles udev intégrées se trouvent dans /usr/lib/udev/rules.d/ et le problème de conflit MAC lors du clonage est résolu automatiquement.

Association port/service : /etc/services

Ce fichier mappe les numéros de port aux noms de service :

grep '^ftp\|^ssh\|^http' /etc/services
ftp-data        20/tcp
ftp-data        20/udp
ftp             21/tcp
ftp             21/udp          fsp fspd
ssh             22/tcp                          # The Secure Shell (SSH) Protocol
ssh             22/udp                          # The Secure Shell (SSH) Protocol
http            80/tcp          www www-http    # WorldWideWeb HTTP
http            80/udp          www www-http    # HyperText Transfer Protocol

Configuration des interfaces et nom d'hôte

La commande ifconfig

Bien que considérée comme obsolète, ifconfig reste largement utilisée pour afficher et configurer les interfaces réseau. Ses modifications sont temporaires et perdues au redémarrage du service réseau.

ifconfig [ interface | -a ]
ifconfig interface [options]

Options principales :

  • up / down : active ou désactive l'interface
  • [-]arp : active ou désactive le protocole ARP
  • mtu N : définit l'unité de transmission maximale
  • netmask : spécifie le masque réseau
  • address : adresse IP à affecter

Exemples pratiques :

# Affecter une adresse IP secondaire avec masque CIDR
ifconfig ens33:1 192.168.50.30/24 up

# Activer une interface
ifconfig ens38 up

# Désactiver temporairement une interface
ifconfig ens38 down

# Désactiver ARP sur une interface
ifconfig ens38 -arp

Pour rendre les adresses secondaires permanentes, il faut créer un fichier de profil dédié, par exemple /etc/sysconfig/network-scripts/ifcfg-ens33:1, avec un champ DEVICE correctement défini.

La commande ifcfg

Utilitaire plus succinct pour gérer les adresses IP :

ifcfg INTERFACE [add|del [ADRESSE[/masque]] | stop]
# Ajouter une adresse sur une interface secondaire
ifcfg ens38:0 add 172.16.5.20/24

# Supprimer l'adresse
ifcfg ens38:0 del 172.16.5.20

# Désactiver complètement l'interface
ifcfg ens38 stop

La commande hostname

Au-delà de la simple gestion du nom d'hôte, cet outil offre des options pratiques :

hostname [-I] [-f] [-d] [-s] [nouveau_nom]
  • -I : liste toutes les adresses IP non-loopback (très pratique pour les scripts)
  • -f : affiche le FQDN complet
  • -d : extrait la partie domaine du FQDN
  • -s : extrait la partie hôte (avant le premier point)
$ hostname -I
10.0.1.50 172.16.5.20

La modification avec hostname est temporaire (elle écrit dans /proc/sys/kernel/hostname). Pour une persistance, on édite /etc/hostname (systèmes modernes) ou /etc/sysconfig/network (systèmes hérités).

Routage sous Linux

Le noyau Linux gère trois types de routes :

  • Route hôte : chemin vers une machine spécifique (route statique point à point)
  • Route réseau : chemin vers un sous-réseau entier
  • Route par défaut : pasage de dernier recours (couramment appelée « passerelle »)

Priorité de routage

Lorsque plusieurs routes peuvent acheminer un paquet vers la même destination, le noyau applique un ordre de priorité :

  1. La longueur du masque CIDR (plus le masque est long, plus la route est spécifique — priorité haute)
  2. La distance administrative (metric) lorsque les masques sont identiques

Ainsi, une route hôte (/32) prime sur une route réseau (/24), qui prime elle-même sur la route par défaut (/0). Quand deux routes ont le même masque, celle ayant le metric le plus faible l'emporte.

Exemple illustratif avec deux interfaces sur le même sous-réseau :

$ ip route show
default via 10.0.1.1 dev ens33 proto static metric 100
10.0.1.0/24 dev ens33 proto kernel scope link src 10.0.1.50 metric 100
10.0.1.0/24 dev ens38 proto kernel scope link src 10.0.1.60 metric 101

Les deux routes vers 10.0.1.0/24 ont un masque identique, mais ens33 (metric 100) sera préférée car sa distance administrative est inférieure.

La commande route

L'outil historique route permet d'afficher et manipuler la table de routage :

# Affichage de la table (sans résolution DNS)
route -n

# Ajout de routes
route add default gw 10.0.1.1                                    # Route par défaut
route add -net 172.20.0.0/16 gw 10.0.1.254                       # Route réseau
route add -net 10.10.0.0/16 dev ens33                             # Route réseau via interface
route add -host 192.168.50.100 gw 10.0.1.200                      # Route hôte

# Suppression de routes
route del default                                                  # Supprimer la passerelle par défaut
route del default gw 10.0.1.1                                     # Supprimer une passerelle spécifique
route del -net 172.20.0.0/16 gw 10.0.1.254                        # Supprimer une route réseau
route del -host 192.168.50.100                                     # Supprimer une route hôte

Les colonnes Metric et Ref sont héritées et ignorées par le noyau actuel. Les drapeaux (Flags) courants sont :

  • U : route active
  • H : destination est un hôte
  • G : utilisation d'une passerelle (saut suivant)

Routes permanentes

On crée un fichier /etc/sysconfig/network-scripts/route-ens3X correspondant à l'interface de sortie. La syntaxe est :

DESTINATION via SAUT_SUIVANT

Exemples :

# Route par défaut
default via 10.0.1.1

# Route réseau
172.20.0.0/16 via 10.0.1.254

# Route hôte (le dev est optionnel, déduit du nom de fichier)
192.168.50.100/32 via 10.0.1.200

Après modification, un redémarrage du service réseau applique les changements.

Contraintes importantes :

  • Le fichier ifcfg-ens3X correspondant doit exister, sinon la route est ignorée.
  • Si des interfaces utilisent DHCP et qu'une route par défaut est définie manuellement, le champ DEFROUTE=no doit être présent dans chaque profil DHCP concerné.
  • Pour une interface DHCP disposant de routes manuelles, PEERROUTES=no empêche les routes DHCP d'écraser les règles définies.

Tables ARP et résolution de voisinage

La commande arp (obsolète)

L'ARP (Address Resolution Protocol) résout une adresse IPv4 en adresse MAC. La commande arp consulte le cache ARP, dont les données proviennent de /proc/net/arp :

# Afficher le cache ARP sans résolution
arp -n

# Supprimer une entrée spécifique
arp -d 10.0.1.100 -i ens33

Pour vider entièrement le cache, on utilise désormais ip neigh :

# Vider tout le cache
ip neigh flush all

# Vider le cache d'une interface spécifique
ip neigh flush dev ens33

La commande arping

Cet outil envoie des requêtes ARP pour résoudre l'adressse MAC d'une cible ou vérifier sa disponibilité sur le réseau local.

arping [-fqbUD] [-c nombre] [-w délai] [-I interface] [-s source] destination

Options notables :

  • -f : quitte dès le premier réponse reçue
  • -q : mode silencieux
  • -b : broadcast uniquement (pas d'unicast)
  • -D : détection de conflit d'adresse
  • -U : mise à jour proactive du cache ARP du voisin
  • -c N : nombre de paquets à envoyer
  • -w délai : timeout d'attente de réponse
  • -I iface : interface d'émission
  • -s adresse : adresse source dans la requête

Exemples :

# Résoudre l'adresse MAC de 10.0.1.100 (quitte à la première réponse)
arping -f 10.0.1.100

# Envoyer exactement 4 sondes pour tester la disponibilité d'un voisin
arping -c 4 -I ens33 10.0.1.200

# Envoi sur ens38 avec source forcée à l'adresse de ens33
arping -c 1 -I ens38 -s 10.0.1.50 10.0.1.100

Dans ce dernier cas, la cible mémorisera l'association entre 10.0.1.50 et l'adresse MAC de ens38, ce qui constitue une forme rudimentaire de manipulation ARP.

La commande ip : outil unifié de gestion réseau

La commande ip, issue du paquet iproute2, remplace avantageusement tous les outils de configuration réseau classiques. Elle suit une syntaxe modulaire stricte :

ip [OPTIONS] OBJET { COMMANDE | help }

Les objets principaux sont :

  • addr (ou a) : adresses IP
  • route (ou r) : table de routage
  • link (ou l) : interfaces réseau (couche liaison)
  • neigh (ou n) : voisins ARP/NDP

Pour obtenir l'aide d'un objet spécifique : ip OBJET help ou consulter la page de manuel dédiée (ex : man ip-address, man ip-route).

ip addr — Gestion des adresses

Ajouter et supprimer des adresses :

# Ajouter une adresse avec masque explicite
ip addr add 192.168.50.30/24 dev ens33

# Ajouter avec un label pour visibilité dans ifconfig
ip addr add 192.168.50.30/24 dev ens33 label ens33:alias

# Supprimer une adresse
ip addr del 192.168.50.30/24 dev ens33

Afficher les adresses :

# Affichage complet (formes abrégées équivalentes)
ip addr show
ip a show
ip a s
ip a

Suppression en masse :

# Supprimer toutes les adresses d'une interface
ip addr flush dev ens38

# Supprimer uniquement les adresses secondaires
ip addr flush secondary dev ens38

ip route — Gestion de la table de routage

Manipulation des routes :

# Ajouter/modifier/remplacer une route réseau
ip route add 172.20.0.0/16 via 10.0.1.254
ip route change 172.20.0.0/16 via 10.0.1.253
ip route replace 172.20.0.0/16 via 10.0.1.252

# Route par défaut
ip route add default via 10.0.1.1
ip route add 0/0 via 10.0.1.1

# Supprimer une route
ip route del 172.20.0.0/16
ip route del default

Affichage avec filtrage :

# Affichage simple
ip route show
ip r

# Filtrer par destination avec masque racine (≥ prefix)
ip route show to root 10.0.0.0/8

# Filtrer par saut suivant
ip route show via 10.0.1.254

Flush et sauvegarde :

# Supprimer les routes associées à une interface
ip route flush dev ens38

# Sauvegarder la table courante
ip route save > /tmp/routes_backup.dat

# Restaurer la table (les routes existantes sont ignorées)
ip route restore < /tmp/routes_backup.dat

ip link — Gestion des interfaces (couche 2)

Modifier l'état d'une interface :

# Désactiver une interface
ip link set ens38 down

# Activer une interface
ip link set ens38 up

# Changer l'adresse MAC
ip link set ens38 address 02:42:ac:11:00:ff

# Renommer une interface (doit être inactive)
ip link set ens38 down
ip link set ens38 name eth1
ip link set eth1 up

Afficher les informations :

# Affichage standard
ip link show
ip -s link show dev ens33

# Affichage lisible (avec conversion d'unités)
ip -s -h link show dev ens33

L'option -s ajoute les statistiques de trafic (octets reçus/transmis, paquets, erreurs, paquets abandonnés).

Étiquettes: Linux networking routing iproute2 ifconfig

Publié le 16 juillet à 09h11