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 ARPmtu N: définit l'unité de transmission maximalenetmask: spécifie le masque réseauaddress: 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é :
- La longueur du masque CIDR (plus le masque est long, plus la route est spécifique — priorité haute)
- 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 activeH: destination est un hôteG: 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-ens3Xcorrespondant 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=nodoit être présent dans chaque profil DHCP concerné. - Pour une interface DHCP disposant de routes manuelles,
PEERROUTES=noempê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(oua) : adresses IProute(our) : table de routagelink(oul) : interfaces réseau (couche liaison)neigh(oun) : 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).