Cet article rassemble les notes que j'ai prises sur les différentes manières de paramétrer le réseau sous Linux, lors de mes tests pour l'installation de nouveaux systèmes.

Interfaces et routage : Outils dépréciés

Paquet net-tools

Ce paquet fournit, entre autres, les commandes ifconfig, qui permet d'afficher et modifier la configuration des interfaces réseau, et netstat, qui permet d'afficher des informations et statistiques sur les connexions réseau (connexions ouvertes, tables de routage, etc.).

Il est déprécié, au profit du paquet iproute2 (ip link, ip address, ss, etc.).

Exemples d'utilisation de la commande ifconfig :

$ # Affichage des informations sur toutes les interfaces
$ ifconfig
$ # Affichage des informations sur l'interface eth0
$ ifconfig eth0
$ # Activation de l'interface eth0
$ sudo ifconfig eth0 up
$ # Définition de l'adresse IP de l'interface eth0
$ sudo ifconfig eth0 192.168.1.2/24

Exemples d'utilisation de la commande netstat :

$ # Affichage de toutes les connexions en cours
$ netstat
$ # Affichage des tables de routage
$ netstat --route

Paquet ifupdown

Ce paquet fournit les commandes ifup et ifdown, qui permettent d'activer ou désactiver les interfaces.

Il est déprécié, au profit du paquet iproute2, la commande ip link remplaçant avantageusement les commandes ifup et ifdown. Ce paquet est cependant encore souvent installé sur les systèmes Debian pour la configuration persistente des interfaces dans le fichier /etc/network/interfaces qu'il permet, ou simplement comme dépendance d'autres paquets, tels que resolvconf.

Exemples d'utilisation des commandes ifup et ifdown :

$ # Activation de l'interface eth0
$ sudo ifup eth0
$ # Désactivation de l'interface eth1
$ sudo ifdown eth1

Le contenu du fichier /etc/network/interfaces peut être découpé en plusieurs fichiers, qui seront alors placés dans le répertoire /etc/network/interfaces.d/. Le format de ces fichiers est le suivant :

<mode> <interface>
iface <interface> inet <method>
    option value
    option value

Note :

  • mode est le mode d'activation de l'interface. Les valeurs les plus souvent utilisées sont auto (activé au démarrage du système) et allow-hotplug (activation lors de la connexion physique).
  • interface est le nom de l'interface à configurer. Ce nom peut correspondre à une interface physique, ou virtuelle (eth0, br0, lo, etc.).
  • method est la méthode d'attribution de la configuration pour cette interface. Les valeurs les plus souvent utilisées sont dhcp (client DHCP) et static (configuration statique définie dans ce fichier).

Par exemple :

# Interface loopback
auto lo
iface lo inet loopback

# Configuration de l'interface eth0 en client DHCP, activée lors du branchement d'un câble
allow-hotplug eth0
iface eth0 inet dhcp

# Configuration de l'interface eth1 avec une adresse statique, activée lors du démarrage du système
auto eth1
iface eth1 inet static
    address 192.168.1.1
    netmask 255.255.255.0
    gateway 192.168.1.254
    post-up /path/post-up-script
    pre-down /path/pre-down-script

Interfaces et routage : Outils spécifiques

Paquet iproute2

Ce paquet fournit, entre autres, ces commandes :

  • ip dispose de sous commandes qui permettent d'afficher et modifier la configuration des interfaces réseau, et du routage
  • ss remplace netstat pour l'affichage des informations sur les connexions réseau en cours d'utilisation

Voici celles que j'utilise :

  • ip link : Gestion de l'état des connexions

    $ # Affichage de l'état de toutes les connexions
    $ ip link
    $ # Affichage de l'état de connexion de l'interface eth1
    $ ip link show eth1
    $ # Affichage de l'état des connexions actives uniquement
    $ ip link show up
    $ # Activation de l'interface eth0
    $ sudo ip link set eth0 up
    
  • ip address : Gestion de la configuration des interfaces

    $ # Affichage de la configuration de toutes les interfaces
    $ ip address
    $ # Affichage de la configuration de l'interface eth0
    $ ip address show eth0
    $ # Ajout d'une adresse IP sur l'interface eth1
    $ sudo ip address add 192.168.1.10/24 dev eth1
    $ # Suppression d'une adresse IP sur l'interface eth1
    $ sudo ip address del 192.168.1.10/24 dev eth1
    $ # Réinitialisation de la configuration de l'interface eth1
    $ sudo ip address flush eth1
    
  • ip route : Gestion du routage

    $ # Affichage des tables de routage
    $ ip route
    $ # Réinitialiser les tables de routage
    $ sudo ip route flush
    $ # Ajouter une nouvelle route
    $ sudo ip route add 192.168.2.0/24 via 192.168.1.1
    $ sudo ip route add 192.168.2.0/24 dev eth0
    $ # Modifier une route existante
    $ sudo ip route change 192.168.2.0/24 via 192.168.1.254
    $ # Supprimer une route
    $ sudo ip route del 192.168.2.0/24
    $ # Sauvegarde et restauration des tables de routage
    $ ip route save > routes.backup
    $ sudo ip route restore < routes.backup
    
  • ss : Affichage des statistiques sur les connexions réseau

    Contrairement à la commande netstat, ss est bien plus rapide, puisqu'elle lit les informations directement les informations dans /proc. De plus, elle dispose de filtres, pour n'afficher que les connexions correspondant à certains critères.

    $ # Affichage de toutes les connexions
    $ ss
    $ # Affichage uniquement des connexions TCP, UDP ou unix actives
    $ ss --tcp
    $ ss --udp
    $ ss --unix
    $ # Affichage de toutes les connexions quel que soit leur état
    $ ss --all
    $ # Affichage des en écoute (serveurs)
    $ ss --listening
    $ # Affichage du nom du processus associé aux connexions
    $ ss --processes
    $ # Résolution inverse du nom correspondant aux adresses IP des connexions (ce paramètre ralentit l'affichage)
    $ ss --resolve
    $ # Affichage des connexions sortantes vers le port 22 (SSH)
    $ ss --tcp 'dport = :22'
    $ ss --tcp 'dport = :ssh'
    $ # Affichage des connexions sortantes vers le port 22 ou 80
    $ ss --tcp '( dport = :ssh or dport = :http )'
    $ # Affichage de toutes les connexions sortantes vers les machines du réseau 192.168.0.0/16 sur le port 22
    $ ss --tcp '( dport = :22 )' dst 192.168.1.6/24
    

Paquet wicd-daemon

Ce paquet fournit le démon wicd, qui permet de gérer la configuration des interfaces de manière interactive.

Il dispose de plusieurs interfaces utilisateur, fournies par les paquets wicd-cli (ligne de commande), wicd-curses (ncurses), wicd-gtk (GTK+) et wicd-kde (Qt).

Commande sysctl

Cette commande n'est pas liée spécifiquement à la configuration du réseau, mais peut être utilisée pour activer le routage au niveau du noyau Linux. Comme toujours, je préfère créer de nouveaux fichiers de configuration dans le répertoire /etc/sysctl.d/ plutôt que modifier le fichier /etc/sysctl.conf, qui est installé par le paquet.

Il est possible d'activer le forwarding en modifiant le paramètre net.ipv4.ip_forward.

Modification à chaud du paramètre :

$ # Les deux commandes suivantes sont équivalentes
$ echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
$ sudo sysctl net.ipv4.ip_forward=1

Modification persistente du paramètre :

$ echo 'net.ipv4.ip_forward=1' | sudo tee /etc/sysctl.d/10-ip_forward.conf

Interfaces et routage : Outils de la suite systemd

La suite systemd dispose d'outils permettant de configurer les interfaces réseau. Néanmoins, cette configuration est encore assez basique, et les outils spécifiques expliqués précédemment restent nécessaires pour effectuer certaines opérations.

De plus, il n'existe actuellement aucun outil de la suite systemd permettant de modifier la configuration des interfaces de manière temporaire.

Note : Il est possible d'activer une configuration masquerade, dans les dernières versions de systemd. Cependant, le projet Debian préfère compiler systemd sans le support du masquerading, pour éviter d'ajouter trop de dépendances à ce paquet. Aussi, si une configuration plus avancée est nécessaire, il est préférable d'activer le masquerading directement dans le pare-feu, puisque les outils habituels réinitialisent cette configuration lors de l'initialisation du réseau.

Commande networkctl

Cette commande permet d'afficher les informations sur la configuration réseau.

Exemples :

$ # Affichage de l'état des interfaces
$ networkctl
$ # Affichage de l'adresse des interfaces
$ networkctl status
$ # Affichage de la configuration détaillée d'une interface
$ networkctl status eth0
$ # Affichage de la configuration détaillée de toutes les interfaces
$ networkctl status --all

Démon systemd-networkd

Ce service est le composant de la suite systemd chargé de la configuration du réseau. Ses configurations sont placées dans le répertoire /etc/systemd/network/.

Les fichiers sont sommés selon l'élément à configurer :

  • Définition des paramètres de connexion : *.link

    Exemple : Activer le Wake-on-LAN.

    [Link]
    WakeOnLan=magic
    
  • Définition des paramètres des interfaces : *.netdev

    Exemple : Création d'une interface virtuelle de type pont.

    [NetDev]
    Name=br0
    Kind=bridge
    
  • Définition des paramètres d'adressage et de routage : *.network

    Exemple : Configuration de l'interface eth0 en client DHCP.

    [Match]
    Name=eth0
    
    [Network]
    DHCP=yes
    

    Exemple : Configuration de l'interface br0 avec une adresse statique.

    [Match]
    Name=br0
    
    [Network]
    Address=10.0.0.1/25
    IPForward=yes
    
    [Route]
    Gateway=10.0.0.126
    Destination=10.0.0.128/25
    

    Note : Le forwarding est aussi activé par le chargement de cette configuration. Ce paramètre n'est pas propre à l'interface configurée, mais global à tout le système.

    Exemple : Configuration de l'interface eth1 comme membre du pont br0.

    [Match]
    Name=eth1
    
    [Network]
    Bridge=br0
    

Enfin, il faut activer la gestion du réseau par systemd.

$ sudo chroot /mnt systemctl enable systemd-networkd

Pare feu et NAT

Paquet iptables

Ce paquet fournit la commande iptables, qui permet de configurer netfilter, le pare-feu du noyau Linux. Elle peut donc être utilisée pour paramétrer les règles de filtrage, mais aussi le NAT et le masquerading, par exemple.

L'utilisation de cette commande sera détaillée dans un prochain article.

Paquet nftables

Ce paquet fournit la commande nftables, qui offre les mêmes possibilités qu'iptables, mais utilise une syntaxe différente, et unifie la configuration du pare-feu pour l'IPv4 et l'IPv6.

Elle est amenée à remplacer iptables, mais je n'ai pas encore pris le temps d'étudier son utilisation en détail.