Linux : Configuration réseau en ligne de commande

Linux : Configuration réseau en ligne de commande
  1. Introduction
  2. Configuration DEBIAN
  3. Configuration CentOS & RedHat
    1. Configuration standard via les Network-Scripts
    2. Configuration via NetworkManager
  4. Configuration sur Suse Linux
  5. Configuration sur Mageia

Linux est un produit de base, disponible dans des « distributions », mais chaque distributions proposent de configurer les interfaces réseau de manière complètement différente… Petit tour du propriétaire ou plutôt des propriétaires.

Cet article va expliquer comment paramétrer une interface réseau en DHCP ou avec une adresse IP, surtout depuis la disparition des « Net-Tools » au profit de « iproute2« . Il ne couvre pas par contre, la configuration d’interface spécifique tel que les BOND, VLAN, PPP, Wireless, etc… ainsi que le routage et les configuration de pare-feu.

Le paquet « iproute2 » remplace les commandes standard que l’on connaît tous (ifconfig, iwconfig, route, …) au profit de nouvelles commandes; voici un rappel des correspondances :

NET-TOOLS IPROUTE2
Voir toutes les interfaces réseau ifconfig -a ip link show
Activer l'interface réseau ifconfig eth1 up ip link set up eth1
Désactiver l'interface réseau ifconfig eth1 down ip link set down eth1
Définir le masque IP / réseau ifconfig eth1 192.168.0.1/24 ip addr add 192.168.0.1/24 dev eth1
Supprimer la définition IP / Masque du réseau ifconfig eth1 0 ip addr del 192.168.0.1/24 dev eth1
Informations spécifiques à une interface ifconfig eth1 ip addr show dev eth1
Modification de MAC-ADDRESS ifconfig eth1 hw ether 00:52:bc:33:25:a1 ip link set dev eth1 address 00:52:bc:33:25:a1
Afficher la table de routage route -n ou netstat -rn ip route show
Ajout de l'itinéraire par défaut route add -net 192.168.0.1 ip route add default via 192.168.0.1
Ajouter une route statique route add -net 192.168.0.1/24 gw eth1 ip route add 192.168.0.1/24 dev eth1
Manipulation de réseau et requête mii-tool ethtool
Affichage des informations WLAN iwconfig iw
WP Table Builder

(FIXME : indiquer comment définir une interface réseau : eth0 ? enp0s3 ? etc…)

Le service DNS est normalement proposé par votre opérateur, soit au travers sa BOX, soit en pointant directement sur les serveurs de son infrastructure.

Google, Cloudflare et bien d’autres, proposent un service gratuit de DNS qu’il vous est possible de configurer dans vos machines.

Cloudflare est le petit dernier et semble être plus rapide que tous ses concurrents : il propose également des fonctionnalités intéressantes permettant de limiter l’accès à certains sites (adulte et site « vérolé » ou avec des malwares); de plus, il certifie qu’il n’utilisera pas vos données… chose que Google ne semble pas faire.

Cloudflare, on choisira un seul type de DNS parmi les 3 proposés ci-dessous :

  • Les DNS « normaux« 

    • DNS primaire : 1.1.1.1
    • DNS secondaire : 1.0.0.1
  • Les DNS pour bloquer uniquement les malwares

    • DNS primaire : 1.1.1.2
    • DNS secondaire : 1.0.0.2
  • Les DNS pour bloquer les malwares et les contenus pour adultes

    • DNS primaire : 1.1.1.3
    • DNS secondaire : 1.0.0.3

Google :

  • DNS primaire : 8.8.8.8
  • DNS secondaire : 8.8.4.4

Debian : une certaine stabilité…

Sur Debian, la configuration réseau reste identique quelque soit la version de la distribution et cela, depuis déjà quelques années.

Depuis Stretch, les nouveaux systèmes n’utilisent désormais plus par défaut les anciens noms d’interface tels que eth0, eth1, wlan0, wlan1. Le nouveau système utilise des noms basés sur les emplacements du matériel tels que no0, enp0s31f6, wlp1s7 (ou dans le cas des dongles USB, l’adresse MAC : enx2c56ac39ec0d).

 

Si vous avez besoin de recharger la configuration réseau sans redémarrer, vous pouvez relancer le service :

 

systemctl restart networking.service

 

Concernant la configuration, tout se passe dans le fichier /etc/network/interfaces :

    • Mode DHCP :
      allow-hotplug enp0s3             # On autorise la monté de l’interface lors du branchement du câble réseau
      iface enp0s3 inet dhcp            # On défini sur l’interface enp0s3 une interface réseau qui sera paramétré en DHCP
      iface eth0 inet6 dhcp              # Réception d’une adresse IPv6 en mode DHCP
      iface eth0 inet6 auto               # Réception d’une adresse IPv6 en mode auto en utilisant l’auto-configuration sans état (StateLess Address AutoConfiguration ou SLAAC)
    • Mode IP Fixe :
      auto eth0                               #
      iface eth0 inet static              # On défini l’interface eth0 possédant une adresse IPv4 statique
      address 192.0.2.7/24             # On défini l’adresse IPv4 et le masque (/24); possible de le définir à part en indiquant sur une autre ligne : netmask 255.255.255.0
      gateway 192.0.2.254              # On défini la passerelle
      dns-nameservers 1.1.1.1 1.0.0.1 8.8.8.8 8.8.4.4            # On défini les serveurs DNS : ici ceux de Cloudfare et de Google
      iface eth0 inet6 static            # On défini l’interface eth0 possédant une adresse IPv6 statique
      address 2001:db8::c0ca:1eaf/64        # On défini l’adresse IPv6 et le masque (/64)
      gateway 2001:db8::1ead:ed:beef       # On défini la passerelle
      dns-nameservers 2606:4700:4700::1111 2606:4700:4700::1001          # On défini les serveurs DNSv6 : « 2606:4700:4700::1111 » / « 2606:4700:4700::1001 »

Il est aussi possible de définir la vitesse de l’interface; pour cela, installez le paquet « ethtool » ou « mii-tool » (en fonction du soutien du pilote de votre carte par l’n de ces paquets) et indiquez dans le paragraphe « iface » de la carte du fichier « interfaces » :

up sleep 5; ethtool -s eth0 autoneg off speed 100 duplex full

ou

mii-tool -F 100baseTx-FD eth0

La configuration des différentes cartes se fait au travers de « blocs » dans le fichier /etc/network/interfaces; voici un exemple avec 2 interfaces ethernet :

auto eth0
iface eth0 inet static
  address 192.0.2.7/24
  gateway 192.0.2.254

iface eth1 inet6 static
  address 2001:db8::c0ca:1eaf/64
  gateway 2001:db8::1ead:ed:beef

Configuration DNS:

On vient de parler des DNS, de ceux de Google et de CloudFlare, mais ou doit-on les indiquer sur un système Debian ?

La réponse est simple : dans le fichier « /etc/resolv.conf »

Il est a noter que sous Debian, un programme nommé « resolvconf » est peut être installé : dans ce cas, n’éditez pas le fichier « /etc/resolv.conf » à la main car ce programme va le gérer.

D’autres programmes peuvent également modifier votre fichier « /etc/resolv.conf » :

  • Le programme resolvconf
  • Le démon network-manager
  • les clients (graphique) DHCP

Le programme resolvconf garde la trace des informations du système sur les serveurs de noms de domaine actuellement disponibles. Il ne faut pas le confondre avec le fichier de configuration resolv.conf qui porte malencontreusement presque le même nom. Le programme resolvconf est optionnel sur les systèmes Debian.

Le fichier de configuration resolv.conf contient des informations sur les serveurs de noms de domaine que le système doit utiliser. Néanmoins, quand plusieurs programmes doivent modifer dynamiquement le fichier de configuration resolv.conf, ils peuvent se chevaucher et le fichier peut ne plus être synchronisé. Le programme resolvconf s’occupe de ce problème. Il agit comme un intermédiaire entre les programmes qui fournissent des informations sur les serveurs de noms de domaine (par exemple les clients dhcp) et les programmes qui les utilisent (par exemple resolver).

Quand resolvconf est correctement installé, le fichier de configuration resolv.conf du répertoire /etc/resolv.conf est remplacé par un lien symbolique pointant vers le fichier /etc/resolvconf/run/resolv.conf et le résolveur utilise plutôt le fichier de configuration qui est généré dynamiquement par resolvconf à cet emplacement /etc/resolvconf/run/resolv.conf. Le programme resolvconf est en général seulement nécessaire quand un système a plusieurs programmes qui ont besoin de modifier de façon dynamique les informations sur les serveurs de noms de domaine.

Sur un système simple où les serveurs de noms de domaine ne changent pas souvent ou bien ne sont modifiés que par un programme, le fichier de configuration resolv.conf est suffisant.

Avec l’arrivé d’IPv6 sur nos BOX opérateur, vos interfaces réseau peuvent récupérer une adresse en IPv6 en plus de celle en IPv4 que vous avez peut être fixé. Le problème, en fonction de la BOX opérateur ou du routeur entre vous et Internet, c’est que cette adresse IPv6 donne un accès complet à votre machine – sauf si bien sur, vous avez mis des règles de firewall sur cette adresse IPv6. Pour désactiver IPv6 dans Debian ou une autre distribution, il faut passer par le fichier « sysctl.conf« . Voici les différentes options que vous pouvez prendre en compte :

On désactive ipv6 pour toutes les interfaces :

net.ipv6.conf.all.disable_ipv6=1

On désactive l’auto configuration pour toutes les interfaces :

net.ipv6.conf.all.autoconf=0

On désactive ipv6 de la configuration par défaut :

net.ipv6.conf.default.disable_ipv6=1

On désactive l’auto configuration par défaut :

net.ipv6.conf.default.autoconf=0

Vous pouvez tester chacune de ces lignes en utilisant la commande « sysctl -w <ligne de conf>« .

Une fois votre fichier « sysctl.conf » défini, lancer la commande « sysctl -p » pour prendre en compte cette nouvelle configuration dans reboot de la machine.

CentOS & RedHat : L’évolution à tout prix…

La configuration réseau sous CentOS ou RedHat se fait de différente manière, selon la version de la distribution, mais également en fonction si vous utilisez ou pas « NetworkManager« .

ATTENTION :

A partir de la version 8 de CentOS, les « Network-Scripts » permettant de configurer les interfaces réseau au travers de fichiers de configuration comme sur Debian, ne sont plus installés par défaut et donc plus soutenu. La commande « systemctl status|start|stop network » ne fonctionne donc plus :

Failed to restart network.service: Unit network.service not found

De plus, les commandes ifup et ifdown sont maintenant apportés par le paquet NetworkManager.

Il reste toutefois une possibilité de ré-implémenter cette méthode de fonctionnement sur CentOS8 & RH8 en installatnt le paquet « network-scripts » :

yum install network-scripts

CentOS & RH utilisent différents fichiers pour configurer le réseau lorsque les Network-scripts sont utilisés :

/etc/hosts

Le but principal de ce fichier est de résoudre le nom d’un hôte qui ne pourrait pas être résolu autrement. Il peut être utilisé pour résoudre des noms d’hôte sur un petit réseau sans serveur DNS. Au regard du type de réseau sur lequel la machine se situe, ce fichier devrait contenir une ligne pour définir le device « loopback » (127.0.0.1) comme localhost.localdomain. Pour plus d’information, regarder la page MAN de host(5).

/etc/resolv.conf

Ce fichier spécifie les adresses IP des serveurs de DNS et le domaine à rechercher.
This file specifies the IP addresses of DNS servers and the search domain. Sauf configuration particulière, ce sont les scripts réseau qui vont remplir ce fichier. Pour plus d’information, voir la page MAN de resolv.conf(5).

/etc/sysconfig/network

Ce fichier spécifie le routage et une information sur toutes les interfaces de la machine. Il est utilisé pour contenir des directives qui vont avoir un effet global et pas seulement sur une seule interface.

/etc/sysconfig/network-scripts/<NomDeLaCarte>

Pour chaque interface réseau, il y a un fichier de configiration spécifique. Chacun de ces fichiers produit une information spécifique pour une interface réseau particulier.
On pourra revoir les notes qui expliques des différentes options et directives que peut contenir ce fichier.

CentOS & RH en utilisant les Network-Scripts

Comme indiqué plus haut, ceci ne fonctionnera que sur les versions <= 7 de CentOS ou RedHat.

Se rendre dans le dossier /etc/sysconfig/network-scripts

Dans ce dossier, on trouvera plusieurs fichiers : celui qui va nous intéresser est celui qui se nomme « ifcfg-<NomDeLaCarte> (Ex : ifcfg-eth0)

    • Activer un mode DHCP :

DEVICE=eth0                                   # Le nom de l’interface
BOOTPROTO=dhcp                         # Le protocole utilisé au boot de la machine
ONBOOT=yes                                  # Doit on activer cette interface au boot de la machine ?

    • Activer un mode IP Fixe

DEVICE=eth0                                  # Le nom de l’interface
BOOTPROTO=none                        # Le protocole utilisé au boot de la machine
IPADDR=192.168.2.10                    # L’adresse IP que l’on souhaite donner à l’interface
NETMASK=255.255.255.0              # Le masque réseau donné à l’interface
GATEWAY=192.168.2.254               # La passerelle que pourra utiliser l’interface pour communiquer vers l’exterieur
USERCTL=no                                  # On donne ou pas la possibilité aux utilisateur autre que root de pouvoir administrer cette interface
ONBOOT=yes                                 # Doit on activer cette interface au boot de la machine ?

Il existe d’autres options pouvant être ajouté au fichier de configuration de la carte réseau :

BOOTPROTO=protocol

ou l’un des protocols est l’un de ces possibilités :

none — Aucun protocol de boot ne devrait être utilisé
bootp — Le protocol BOOTP sera utilisé.
dhcp — Le protocol DHCP sera utilisé.

USERCTL=réponse

ou la réponse peut être un de ces choix :

yes — Les utilisateur non-root peuvent controler cette interface.
no — Seul root peut controler cette interface.

ONBOOT=réponse

ou la réponse peut être un de ces choix :

yes — Ce périphérique devrait être activé lors du boot de la machine.
no — Ce périphérique ne sera pas activé lors du boot de la machine.

DEVICE=nom

ou le nom est le nom dupériphérique physique (à l’exeption des périphérique PPP dynamiquement alloué ou le nom devient le nom logique).

DHCP_HOSTNAME=nom

ou le nom est un nom court qui sera envoyé au serveur DHCP. Utiliser cette option seulement si le serveur DHCP demande au client de spécifier un nom d’hôte avant de recevoir une adresse IP.

BROADCAST=adresse

ou l’adresse est l’adresse de broadcast. Cette directive n’a plus lieu d’être, la valeur est calculé automatiquement avec ipcalc.

DNS{1,2}=adresse

ou adresse est une adresse de serveur de nom qui sera placé dans /etc/resolv.conf produit par la directive PEERDNS si elle n’est pas mis sur « no ».
Exemple : DNS1=1.1.1.1

ETHTOOL_OPTS=options

ou « options » prend les options supportés par ethtool. Par exemple, si vous souhaitez forcer l’interface à 100 Mb et en full duplex :

ETHTOOL_OPTS= »autoneg off speed 100 duplex full »

HOTPLUG=réponse

Ou « réponse » correspond à l’un de ces choix :

yes — Ce périphérique sera activé quand il sera connecté sur la machine.
no — Ce périphérique ne sera pas activé quand il sera connecté sur la machine.

HWADDR=MAC-adresse

ou la « MAC-adresse » est l’adresse physique du périphérique Ethernet dans un format tel que AA:BB:CC:DD:EE:FF. Cette directive doit être utilisé sur les machines contenant plus d’une carte réseau afin de s’assurer que les interfaces sont correctement configurés au regard de l’ordre de chargement de chaque module d’interface réseau. Cette directive devrait être utilisé en conjonction avec la directive MACADDR.

Note :

La persistance des noms d’interface est maintenant maintenu par /etc/udev/rules.d/70-persistent-net.rules.

LINKDELAY=temps

ou « temps » est un nombre de seconde que l’on attend pour réaliser la négociation du lien sur le périphérique. Par défaut, ce temps est de 5 secondes. Le délais de la négociation du lien, causé par STP par exemple, peut entrainer une augmentation de cette valeur.

MACADDR=MAC-adresse

ou MAC-adresse est l’adresse physique du périphérique Ethernet dans une forme tel que AA:BB:CC:DD:EE:FF.
Cette directive est utilisé pour assigner une adresse MAC à une interface, supplentant l’adresse physique possédé par la carte réseau. Cette directive ne devrait pas être utilisé en confonction avec la directive HWADDR.

NETMASKn=masque

ou « masque » est la velur du maque réseau et « n »est un nombre entier, consécutif et démarrant à 0 (par exemple : NETMASK0).
Il est utilisé quand la configuration de la carte doit supporter plusieurs adresse IP sur son interface. Il peut être omis quand il n’y a qu’une seule adresse à configurer.

NETWORK=adresse

ou « adresse » est l’adresse réseau. Cette directive n’est plus utilisé car elle est calculé automatiquement par ipcalc.

NM_CONTROLLED=réponse

ou « réponse » est l’une de ces valeurs :

yes — NetworkManager est autorisé à configurer ce périphérique. C’est par défaut le cas… et peu donc être omis dans la configiration.
no — NetworkManager n’est pas autorisé à configurer ce périphérique.

PEERDNS=réponse

ou « réponse » est l’une de ces valeurs :

yes — Modifie le fichier /etc/resolv.conf si la directive DNS est activé, que l’on utilise la méthode DHCP ou que l’on utilise la RFC 1877 de Microsoft’s sur les connexions PPP. Dans tous les cas, « yes » est par défaut.
no — Ne modifie rien dans /etc/resolv.conf.

IPADDRn=adresse

ou « adresse » est l’adresse IPv4 et « n » un nombre entier consécutif positif démarrant à 0 (par exemple : IPADDR0). Cela est utilisé pour des configuration avec de multiple adresse IP rattachées à cette interface. Il peut être omis s’il n’y a qu’une seule adresse de configuré.

DHCPV6C=réponse

ou « réponse » est l’une de ces valeur :

yes — Utilise DHCP pour obtenir une adresse IPv6 pour cette interface.
no — N’utilise pas DHCP pour obtenir une adresse IPv6 pour cette interface. C’est la valeur par défaut.

Une adresse IPv6 locale sera assigné tout de même par défaut. L’adresse locale sera basé sur l’adresse MAC de l’interface comme défini dans la RFC 4862.

DHCPV6C_OPTIONS=réponse

ou « réponse » contient l’une de ces valeurs :

-P — Active la délégation du prefix IPv6.
-S — Utilise DHCP pour obtenir une configuration unique déclarée, sans adresse, pour cette interface.
-N — Restaure les otions normales après utilisation des options -T ou -P.
-T — Utilise DHCP pour obtenir une adresse IPv6 temporaire pour cette interface.
-D — Surcharge les valeurs par défaut quand on sélectionne le type d’identifiant unique en DHCP à utiliser (DHCP Unique Identifier : DUID).

Par défaut, le client DHCP (dhclient) crée un identifiant unique DHCP (DHCP Unique Identifier [DUID]) basé sur l’adresse du lien réseau (DUID-LL) s’il fonctionne dans un mode déclarré (avec l’option -S, sans demander une adresse), ou s’il crée un identifiant basé sur l’adresse du lien réseau ajouté à un timestamp (DUID-LLT) si il fonctionne dans un mode déclaré (sans l’option -S, demandant une adresse). L’option -D surcharge ce mode par defaut, avec une valeur pour LL ou LLT.

IPV6ADDR=adresse

ou « adresse » est la premiere adresse IPv6 statique, ou primaire, sur l’interface.
Le format est sous forme « adresse / longueur du préfix ». Si la longueur du prefix n’est pas spécifié, /64 est défini par défaut.
Notez que cette définition dépend de la valeur donnée à IPV6INIT devant être activé.

IPV6ADDR_SECONDARIES=adresse

ou « adresse » contient une ou plusieurs adresses IPv6, séparés par un espace, sur cette interface.
Le format est sous forme « adresse/longueur du prefix ». Si la longueur du prefix n’est pas spécifié, /64 est défini par défaut.
Notez que cette définition dépend de la valeur donnée à IPV6INIT devant être activé.

IPV6INIT=réponse

ou « réponse » contient l’une de ces valeurs :

yes — Initialise cette interface pour un adressage IPv6.
no — N’initialise pas cette interface pour un adressage IPv6. C’est la valeur par défaut.

Cette configuration est requise pour le paramétrage IPv6 statique ou par DHCP. Cela n’affecte pas la configuration IPv6 « Stateless Address Autoconfiguration » (SLAAC) comme défini dans la RFC 4862.
Voir la remarque sur “/etc/sysconfig/network” concernant la désactivation de IPv6.

IPV6_AUTOCONF=réponse

ou « réponse » contient l’une de ces valeurs :

yes — Active l’auto-configuration IPv6 pour cette interface.
no — Désactive l’auto-configuration IPv6 pour cette interface.

Si activé, une adresse IPv6 sera demandé en utilisant le système « Neighbor Discovery » (ND) d’un routeur utilisant un démon « radvd« .
Notez que la valeur par défaut de la directive IPV6_AUTOCONF dépendra de IPV6FORWARDING suivant ces paramètres :

IPV6FORWARDING=yes, alors IPV6_AUTOCONF sera par défaut sur « no« .
IPV6FORWARDING=no, alors IPV6_AUTOCONF sera par défaut sur « yes » et la directive IPV6_ROUTER aura aucun effet.

IPV6_MTU=valeur

ou « valeur » est une valeur optionnelle de la MTU sur cette interface.

IPV6_PRIVACY=rfc3041

ou « rfc3041 » est une valeur optionnelle pour définir cette interface à supporter la RFC 3041 « Privacy Extensions for Stateless Address Autoconfiguration in IPv6« . Notez que ce paramètre dépend de la directive IPV6INIT devant être activé.
Le mode supporté de la RFC 3041 est désactivé par défaut. « Stateless Autoconfiguration » sera défini par l’adresse MAC, et quand elle est disponible, en utilisant la méthode EUI-64. L’adresse est défini avec un préfixe bien que l’adresse est normalement dérivé de la MAC adresse, elle est donc globalement unique même quand le préfixe change. Dans le cas ou le lien est local l’adresse du préfixe est fe80::/64 tel que défini dans la RFC 2462 « IPv6 Stateless Address Autoconfiguration« .

 

CentOS en utilisant NetworkManager (CentOS & RH >= 7)

Sur ces version de CentOS & RH, la configuration peut se faire également en utilisant « NetworkManager« . La particularité des outils NetworkManager est qu’ils sont partiellement graphique : en ligne de commande dans un terminal, on se retrouvera avec une interface dans laquelle il faudra jouer de la tabulation pour passer d’un champs à l’autre, de la barre d’espace pour activer ou pas un composant et de la touche Entré/Return de votre clavier pour valider la configuration.

La commande principale est : nmui
Cette commande peut également prendre des arguments afin de pouvor être utilisé par des scripts qui viendraient à (re)configurer le réseau.

Exemple de configuration d’une interface avec nmui :

 

Parler des martians

Suse :

 

 

 

 

Mageia :

 

 

BONUS

Comment configurer le nom d’une machine sur celle-ci ?Avec son FQDN ?

DEBIAN :

 

CENTOS <=6 :

Éditer le fichier /etc/sysconfig/network et ajouter le nom de votre serveur sur la ligne contenant « HOSTNAME= »

Pas besoin de redémarrer normalement…

CENTOS >=7 :

On utilisera la commande « hostnamectl » pour paramétrer le nom de la machine; lancer la commande « hostnamectl –static set-hostname <NomMachine> » avec <NomMachine> étant le nom de la machine. Cela aura pour conséquence de changer le contenu du fichier « /etc/hostname »

SUSE :

 

MAGEIA :

 

On vérifiera que le nom et le FQDN si vous en avez spécifié un, est bien compris par le système : on exécute la commande « hostname -s » pour avoir le nom de la machine et « hostname -d » pour connaitre son FQDN.

 

 

Comments

No comments yet. Why don’t you start the discussion?

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.