Chapitre 5. Configuration du réseau

Table des matières

5.1. L’infrastructure de base du réseau
5.1.1. Résolution du nom d’hôte
5.1.2. Nom de l’interface réseau
5.1.3. Plage d’adresses réseau du réseau local (« LAN »)
5.1.4. La gestion du périphérique réseau
5.2. Configuration moderne de réseau pour ordinateur de bureau
5.2.1. Outils graphiques de configuration du réseau
5.3. Configuration moderne de réseau sans interface graphique
5.4. The modern network configuration for cloud
5.4.1. The modern network configuration for cloud with DHCP
5.4.2. The modern network configuration for cloud with static IP
5.4.3. The modern network configuration for cloud with Network Manger
5.5. Configuration réseau de bas niveau
5.5.1. Commandes Iproute2
5.5.2. Opérations sûres de bas niveau sur le réseau
5.6. Optimisation du réseau
5.6.1. Rechercher le MTU optimal
5.6.2. Optimisation de TCP sur le réseau Internet
5.7. Infrastructure de netfilter
[Astuce] Astuce

Pour un guide actualisé de la gestion réseau sous Debian, lire le Guide de l’administrateur Debian - configurer le réseau (« The Debian Administrator's Handbook — Configuring the Network »).

[Astuce] Astuce

Sous systemd, networkd peut être utilisé pour gérer les réseaux. Consultez systemd-networkd(8).

Passons en revue l’infrastructure de base du réseau sur un système Debian moderne.

Tableau 5.1. Liste des outils de configuration du réseau

paquets popularité taille type description
network-manager V:388, I:458 15413 config::NM NetworkManager (démon) : gère automatiquement le réseau
network-manager-gnome V:122, I:372 5583 config::NM NetworkManager (frontal de GNOME)
netplan.io V:1, I:4 249 config::NM+networkd Netplan (generator): Unified, declarative interface to NetworkManager and systemd-networkd backends
ifupdown V:611, I:981 199 config::ifupdown outil standard pour activer ou désactiver le réseau (spécifique à Debian)
isc-dhcp-client V:215, I:982 2866 config::low-level client DHCP
pppoeconf V:0, I:5 186 config::helper assistant de configuration d’une connexion PPPoE
wpasupplicant V:351, I:513 3846 config::helper client prenant en charge WPA et WPA2 (IEEE 802.11i)
wpagui V:0, I:2 770 config::helper client graphique (Qt) pour wpa_supplicant
wireless-tools V:178, I:244 292 config::helper outils pour manipuler les « Extensions Linux sans fil » (Linux Wireless Extensions)
iw V:34, I:477 302 config::helper outil de configuration des périphériques sans fil de Linux
iproute2 V:727, I:969 3637 config::iproute2 iproute2, IPv6 et autres configurations avancées du réseau : ip(8), tc(8), etc
iptables V:315, I:747 2408 config::Netfilter outils d’administration pour le filtrage des paquets et NAT (Netfilter)
iputils-ping V:199, I:997 120 test tester l’accessibilité d’une machine distante par nom de machine ou adresse IP (iproute2)
iputils-arping V:3, I:41 49 test tester l’accessibilité réseau d’une machine distante spécifiée par une adresse ARP
iputils-tracepath V:2, I:32 45 test tracer le chemin du réseau vers une machine distante
ethtool V:96, I:266 735 test afficher ou modifier les paramètres d’un périphérique Ethernet
mtr-tiny V:5, I:47 156 test::low-level tracer le chemin réseau vers une machine distante (curses)
mtr V:4, I:41 209 test::low-level tracer le chemin réseau vers une machine distante (curses et GTK)
gnome-nettool V:1, I:19 2492 test::low-level outils pour des opérations d’informations habituelles sur le réseau (GNOME)
nmap V:25, I:202 4498 test::low-level cartographie réseau / balayage de ports (Nmap, console)
tcpdump V:16, I:177 1340 test::low-level analyseur de trafic réseau (Tcpdump, console)
wireshark I:45 28 test::low-level analyseur de trafic réseau (Wireshark, GTK)
tshark V:2, I:25 398 test::low-level analyseur de trafic réseau (console)
tcptrace V:0, I:2 401 test::low-level produit un résumé des connexions à partir d’une sortie de tcpdump
snort V:0, I:0 2203 test::low-level système souple de détection d’intrusion par le réseau (Snort)
ntopng V:0, I:1 15904 test::low-level afficher l’utilisation du réseau dans le navigateur web
dnsutils V:19, I:298 272 test::low-level clients réseau fournis par BIND : nslookup(8), nsupdate(8), dig(8)
dlint V:0, I:4 53 test::low-level vérifier les zones d’information DNS en utilisant des requêtes du serveur de noms
dnstracer V:0, I:1 61 test::low-level tracer une chaîne de serveurs DNS jusqu’à la source

La résolution du nom d’hôte est actuellement prise en charge aussi par le mécanisme NSS (Name Service Switch). Le flux de cette résolution est le suivant :

  1. Le fichier « /etc/nsswitch.conf » avec une entrée comme « hosts: files dns » donne l’ordre de la résolution du nom d’hôte (cela remplace l’ancienne fonctionnalité de l’entrée « order » dans « /etc/host.conf »).

  2. La méthode files est d’abord appelée. Si le nom d’hôte est trouvé dans le fichier « /etc/hosts », elle retourne toutes les adresses valables qui y correspondent et quitte. (Le fichier « /etc/host.conf » contient « multi on ».)

  3. La méthode dns est appelée. Si le nom d’hôte est trouvé par une requête au Système de noms de domaine Internet (DNS) (« Internet Domain Name System ») identifié par le fichier « /etc/resolv.conf », elle retourne toutes les adresses valables correspondantes et quitte.

A typical workstation may be installed with its host name set to, e.g., "host_name" and its optional domain name set to an empty string. Then, "/etc/hosts" looks like the following.

127.0.0.1 localhost
127.0.1.1 host_name

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Chaque ligne commence par une adresse IP et est suivie du nom d’hôte associé.

L’adresse IP 127.0.1.1 en deuxième ligne de cet exemple pourrait ne pas être présente sur d’autres systèmes de type UNIX. L’installateur Debian ajoute cette entrée pour les systèmes sans adresse IP permanente en tant que contournement pour certains programmes (par exemple GNOME) comme expliqué dans le bogue nº 719621.

Le nom_hote correspond au nom d’hôte défini dans « /etc/hostname ».

Pour un système avec une adresse IP permanente, cette adresse IP devrait être utilisée à la place de 127.0.1.1.

Pour un système avec une adresse IP permanente et un nom de domaine complètement qualifié (FQDN) fourni par le système de noms de domaine (DNS), les nom_hote et nom_domaine canoniques devraient être utilisés ici, plutôt que le simple nom_hote.

« /etc/resolv.conf » est un fichier statique si le paquet resolvconf n’est pas installé. S’il est installé, c’est un lien symbolique. Dans tous les cas, il contient des informations qui initialisent les routines du résolveur. Si le DNS est trouvé à l’IP=« 192.168.11.1 », il contient ce qui suit :

nameserver 192.168.11.1

Le paquet resolvconf fait de ce « /etc/resolv.conf » un lien symbolique et gère son contenu automatiquement par le script hook.

For the PC workstation on the typical adhoc LAN environment, the hostname can be resolved via Multicast DNS (mDNS) in addition to the basic files and dns methods.

  • Sur les systèmes Debian, Avahi fournit un cadre pour le « Multicast DNS Service Discovery ».

  • Il est l’équivalent de Apple Bonjour/Apple Rendezvous.

  • Le greffon de la bibliothèque libnss-mdns fournit une résolution de nom d’hôte à l’aide de mDNS pour la fonction « GNU Name Service Switch (NSS) » de « GNU C Library (glibc) ».

  • Le fichier « /etc/nsswitch.conf  devrait contenir une section telle que « hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4 ».

  • A host name suffixed with the ".local" pseudo-top-level domain is resolved by sending a mDNS query message in a multicast UDP packet using IPv4 address "224.0.0.251" or IPv6 address "FF02::FB".

La résolution du nom de machine par le protocole obsolète NETBios over TCP/IP utilisé par les systèmes Windows plus anciens peut être fournie en installant le paquet winbind. Le fichier « /etc/nsswitch.conf » devra avoir une entrée semblable à « hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4 wins » afin d’activer cette fonctionnalité (les systèmes Windows récents utilisent normalement la méthode dns pour la résolution de nom d’hôte).

[Note] Note

L'expansion de nom de domaine de premier niveau générique « generic Top-Level Domains (gTLD) » dans le système de noms de domaine est en cours de réalisation. Soyez attentifs aux conflits de noms lors du choix d'un nom de domaine utilisé uniquement au sein d'un réseau local « LAN ».

Les interfaces réseau sont ordinairement initialisées dans « networking.service » pour l’interface lo et « NetworkManager.service » pour les autres interfaces sur les systèmes de bureau modernes de Debian sous systemd.

Debian peut gérer la connexion réseau via un logiciel démon de gestion tel que NetworkManager (NM) (gestionnaire de réseau et paquets associés).

  • Ils sont fournis avec leur propre interface utilisateur graphique (GUI) et en ligne de commandes.

  • Ils ont leur propre démon en tant que sytème dorsal.

  • Ils permettent une connexion facile de votre système à Internet.

  • Ils permettent une gestion facile de la configuration du réseau filaire ou sans fil.

  • Ils nous permettent de configurer le réseau indépendamment de l’ancien paquet « ifupdown ».

[Note] Note

Ne pas utiliser ces outils de configuration automatique du réseau sur un serveur. Ils ont été prévus principalement pour les utilisateurs de système de bureau tournant sur des ordinateurs portables.

Ces outils modernes de configuration du réseau doivent être configurés correctement afin d’éviter des conflits avec l’ancien paquet ifupdown et son fichier de configuration « /etc/network/interfaces ».

La documentation officielle de NM sous Debian sont fournies par « /usr/share/doc/network-manager/README.Debian ».

Essentiellement, la configuration réseau pour un ordinateur de bureau est faite de la manière suivante :

  1. Rendez l’utilisateur du bureau, par exemple toto, membre du groupe « netdev » à l’aide de la commande suivante (vous pouvez aussi le faire automatiquement à l’aide de D-bus sous les environnements de bureau modernes comme GNOME et KDE) :

    $ sudo adduser foo netdev
  2. Gardez la configuration de « /etc/network/interfaces » aussi simple que possible comme ce qui suit :

    auto lo
    iface lo inet loopback
  3. Redémarrez NM de la manière suivante :

    $ sudo systemctl restart network-manager
  4. Configurez votre réseau à l’aide d’une interface graphique.

[Note] Note

Afin d’éviter les conflits avec ifupdown, seules les interfaces qui ne sont pas listées dans « /etc/network/interfaces » sont gérées par NM.

[Astuce] Astuce

Si vous désirez étendre les possibilités de configuration de NM, veuillez récupérer les modules d’extension appropriés et les paquets supplémentaires tels que network-manager-openconnect, network-manager-openvpn-gnome, network-manager-pptp-gnome, mobile-broadband-provider-info, gnome-bluetooth, etc.

Sous systemd, le réseau peut aussi être configuré dans /etc/systemd/network/. Voir : systemd-resolved(8), resolved.conf(5), et systemd-networkd(8).

Cela permet une configuration moderne de réseau sans interface graphique.

Une configuration de client DHCP peut être réglée en créant « /etc/systemd/network/dhcp.network ». Par exemple :

[Match]
Name=en*

[Network]
DHCP=yes

Une configuration de réseau statique peut être réglée en créant « /etc/systemd/network/static.network ». Par exemple :

[Match]
Name=en*

[Network]
Address=192.168.0.15/24
Gateway=192.168.0.1

The modern network configuration for cloud may use cloud-init and netplan.io packages (see Section 3.2.4, « Cloud system initialization »).

The netplan.io package supports systemd-networkd and NetworkManager as its network configuration backends, and enables the declarative network configuration using YAML data. When you change YAML:

  • Run "netplan generate" command to generate all the necessary backend configuration from YAML.

  • Run "netplan apply" command to apply the generated configuration to the backends.

See "Netplan documentation", netplan(5), netplan-generate(8), and netplan-apply(8).

See also "Cloud-init documentation" (especially around "Configuration sources" and "Netplan Passthrough") for how cloud-init can integrate netplan.io configuration with alternative data sources.

Pour la configuration réseau de bas niveau sous Linux, utilisez les programmes iproute2 (ip(8), ...) .

Vous pouvez utiliser de manière sûre les commandes de réseau de bas niveau de la manière suivante car elles ne modifient pas la configuration du réseau :


[Astuce] Astuce

Certains de ces outils de configuration du réseau se trouvent dans « /sbin/ ». Il vous faudra peut-être utiliser le chemin complet vers la commande comme « /sbin/ifconfig » ou ajouter « /sbin » à la liste « $PATH » dans votre fichier « ~/.bashrc ».

L’optimisation générique du réseau est en dehors des buts de cette documentation. Je ne parle que des sujets pertinents pour une connexion de l’utilisateur grand public.


NM fixe normalement le MTU (Maximum Transmission Unit) .

Dans certains cas, vous souhaiterez peut-être définir le MTU manuellement après des essais de ping(8) avec l’option « -M do » pour envoyer un paquet ICMP avec différentes tailles de paquet de données. Le MTU est la taille maximale possible de paquet de données sans fragmentation IP, plus 28 octets pour l’IPv4 et plus 48 octets pour l’IPv6. Par exemple, ce qui suit trouve un MTU pour la connexion IPv4 de 1460 et un MTU pour la connexion IPv6 de 1500.

$ ping -4 -c 1 -s $((1500-28)) -M do www.debian.org
PING  (149.20.4.15) 1472(1500) bytes of data.
ping: local error: message too long, mtu=1460

---  ping statistics ---
1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0ms

$ ping -4 -c 1 -s $((1460-28)) -M do www.debian.org
PING  (130.89.148.77) 1432(1460) bytes of data.
1440 bytes from klecker-misc.debian.org (130.89.148.77): icmp_seq=1 ttl=50 time=325 ms

---  ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 325.318/325.318/325.318/0.000 ms
$ ping -6 -c 1 -s $((1500-48)) -M do www.debian.org
PING www.debian.org(mirror-csail.debian.org (2603:400a:ffff:bb8::801f:3e)) 1452 data bytes
1460 bytes from mirror-csail.debian.org (2603:400a:ffff:bb8::801f:3e): icmp_seq=1 ttl=47 time=191 ms

--- www.debian.org ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 191.332/191.332/191.332/0.000 ms

Ce processus est la découverte du chemin MTU (PMTU) (RFC1191) et la commande tracepath(8) peut l’automatiser.


En plus de ces lignes directrices basiques, vous devriez connaitre ce qui suit :

  • Toute utilisation d’une méthode de tunneling (VPN, etc.) peut réduire le MTU optimal en raison de la surcharge qu’elle engendre.

  • La valeur de MTU ne doit pas excéder la valeur expérimentale déterminée de PMTU .

  • La valeur de MTU la plus élevée est généralement meilleure lors que les autres limitations sont remplies.

La taille maximum de segment (MSS : « maximum segment size ») est utilisée comme mesure de remplacement de la taille des paquets. La relation entre MSS et MTU est la suivante :

  • MSS = MTU - 40 pour IPv4

  • MSS = MTU - 60 pour IPv6

[Note] Note

Les optimisations basées sur iptables(8) (consultez Section 5.7, « Infrastructure de netfilter ») peuvent limiter la taille des paquets au MSS, ce qui est utile pour le routeur. Consultez "TCPMSS" dans iptables(8).

Le débit de TCP peut être maximisé en ajustant les paramètres de taille de tampon TCP comme cela est décrit dans « Guide de réglage de TCP » (« TCP Tuning Guide ») et « réglage de TCP » (« TCP tuning ») pour les réseaux WAN modernes de haut débit et de faible latence. À ce jour, les paramètres par défaut de Debian fonctionnent bien même lorsque mon réseau local est connecté par l’intermédiaire d’un service rapide sur fibre optique (FTTP) à 1Gb/s.

Netfilter fournit l’infrastructure pour un pare-feu dynamique (« stateful firewall ») et la traduction d’adresses réseau (NAT) (« network address translation ») avec des modules du noyau de Linux (consultez Section 3.8.1, « Initialisation des modules du noyau »).


L’outil netfilter principal de l’espace utilisateur est iptables(8). Vous pouvez configurer vous-même netfilter de manière interactive depuis l’interpréteur de commandes, enregistrer son état avec iptables-save(8) et le restaurer par l’intermédiaire d’un script d’init avec iptables-restore(8) lors du redémarrage du système.

Des scripts d’assistant tels que shorewall facilitent ce processus.

Consultez les documentations se trouvant sur http://www.netfilter.org/documentation/ (ou dans « /usr/share/doc/iptables/html/ »).

[Astuce] Astuce

Bien qu’elles aient été écrites pour Linux 2.4, la commande iptables(8) et la fonction netfilter du noyau s’appliquent toutes deux aux séries 2.6 et 3.x du noyau Linux.