Gestion du réseau Linux avec la librairie Iproute2

La librairie Iproute2 est un ensemble d’utilitaires de l’espace utilisateur pour communiquer avec divers noyaux Linux avec le protocole netlink. Plus spécifiquement les utilitaires iproute2 sont utilisés pour contrôler le trafic réseau (TCP, UDP, IPv4, IPv6). Il sont aussi utilisés pour configurer les cartes réseau (NIC) filaires et sans fil.

La librairie Iproute2 remplace les net-tools suivants :

FonctionNet-toolsiproute2
Configuration des adresses IP et du lien (L2)ifconfig ip addr, ip link
Tables de routagerouteip route
Tables de voisinagearpip neigh
VLANvconfigip link
Tunnelsiptunnelip tunnel
Commutation (Bridges)brctl ip link, bridge
Multicastipmaddrip maddr
Statistiquesnetstat ip -s, ss

1. Conventions de dénomination des interfaces

Sous Centos 7, RHEL 7, Fedora 21 :

  1. noms prenant les numéros fournis par le Bios/firmware pour les périphériques «on-board» : eno1, em1 (embedded)
  2. noms incorporant l’index pour les cartes PCI-E : ens1
  3. noms incorporant l’emplacement physique du connecteur selon p<port>s<slot> : enp2s0
  4. noms prenant l’adresse MAC de l’interface : enx78e7d1ea46da
  5. dénomination traditionnelle du noyau : eth0, wlan0

Pour activer la dénomination traditionnelle, il faut éditer le fichier /etc/default/grub en ajoutant la valeur net.ifnames=0 biosdevname=0 à la variable GRUB_CMDLINE_LINUX.

GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0"

Il sera alors nécessaire de mettre à jour grub et de redémarrer le système :

sudo update-grub
sudo reboot

Attention, il sera aussi indispensable d’adapter le fichier de configuration /etc/network/interfaces avec le nouveau nom d’interface.

2. Visualiser les adresses

ifconfig
ip addr show
ip link show

2.1. Exercice

Exercice : Filtre grep/awk sur les sorties, examen attentif des sorties :

ifconfig | grep -w inet | awk '{ print $2}'
ip a s | grep -w inet | awk '{ print $2}'

3. Libérer un bail DHCP

Pour libérer un bail et arrêter le client DHCP :

sudo dhclient -r
ip addr show

Relancer le client et obtenir de nouveaux paramètres DHCP :

sudo dhclient -d
Internet Systems Consortium DHCP Client 4.2.5
Copyright 2004-2013 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

Listening on LPF/eno16777736/00:0c:29:7b:c0:98
Sending on   LPF/eno16777736/00:0c:29:7b:c0:98
Sending on   Socket/fallback
DHCPDISCOVER on eno16777736 to 255.255.255.255 port 67 interval 4 (xid=0x5511e5b4)
DHCPREQUEST on eno16777736 to 255.255.255.255 port 67 (xid=0x5511e5b4)
DHCPOFFER from 192.168.95.254
DHCPACK from 192.168.95.254 (xid=0x5511e5b4)
bound to 192.168.95.128 -- renewal in 766 seconds.
^C

4. Activer/désactiver une interface

Activation d’une interface :

sudo ifconfig eth0 up
sudo ip link set eth0 up

On peut la désactiver de manière similaire :

sudo ifconfig eth0 down
sudo ip link set eth0 down

Sous Debian/Ubuntu, on peut utiliser les scripts suivants :

sudo ifdown eth0
sudo ifup eth0

5. Fixer/supprimer une adresse IPv4

Pour fixer une adresse IPv4 :

sudo ifconfig eth0 192.168.0.77/24

ou :

sudo ip address add 192.168.0.77/24 dev eth0

Pour l’effacer :

sudo ip addr del 192.168.0.77/24 dev eth0

6. Ajouter une interface alias

sudo ifconfig eth0:1 10.0.0.1/8
sudo ip addr add 10.0.0.1/8 dev eth0 label eth0:1

7. IPv6 ip -6 addr

ip -6 addr help
Usage: ip addr {add|change|replace} IFADDR dev STRING [ LIFETIME ]
                                                      [ CONFFLAG-LIST ]
       ip addr del IFADDR dev STRING
       ip addr {show|save|flush} [ dev STRING ] [ scope SCOPE-ID ]
                            [ to PREFIX ] [ FLAG-LIST ] [ label PATTERN ] [up]
       ip addr {showdump|restore}
IFADDR := PREFIX | ADDR peer PREFIX
          [ Broadcast ADDR ] [ anycast ADDR ]
          [ label STRING ] [ scope SCOPE-ID ]
SCOPE-ID := [ host | link | global | NUMBER ]
FLAG-LIST := [ FLAG-LIST ] FLAG
FLAG  := [ permanent | dynamic | secondary | primary |
           tentative | deprecated | dadfailed | temporary |
           CONFFLAG-LIST ]
CONFFLAG-LIST := [ CONFFLAG-LIST ] CONFFLAG
CONFFLAG  := [ home | nodad ]
LIFETIME := [ valid_lft LFT ] [ preferred_lft LFT ]
LFT := forever | SECONDS

8. Tables de voisinage

Table ARP (IPv4) :

ip neigh show

Table ND (IPv6) :

ip -6 neigh show

9. Tables de routage

route
route -6
ip route
ip -6 route
ip route help
Usage: ip route { list | flush } SELECTOR
       ip route save SELECTOR
       ip route restore
       ip route showdump
       ip route get ADDRESS [ from ADDRESS iif STRING ]
                            [ oif STRING ]  [ tos TOS ]
                            [ mark NUMBER ]
       ip route { add | del | change | append | replace } ROUTE
...
man ip-route

10. Route par défaut et routes statiques

10.1. Route par défaut

sudo ip route add default via 192.168.1.1

De manière optionnelle on peut indiquer l’interface de sortie :

sudo ip route add default via 192.168.1.1 dev eth0

10.2. Route statique

isudo p route add 192.168.100.0/24 via 192.168.1.1 dev eth0

11. Serveurs de noms

On peut le définir via nmcli ou nmtui.

cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 192.168.21.1
nameserver 8.8.8.8

12. Exercice de configuration manuelle des interfaces

  1. Vérifier et noter les paramètre des interfaces réseau :
    • Nom
    • Statut
    • Adresse IP et masque
    • Passerelle
    • Serveur(s) DNS
  2. Arrêter le service réseau
  3. Arrêter le client DHCP et vérifier l’interface
  4. Faire tomber la première interface de l’ordinateur et vérifier
  5. Fixer manuellement une adresse IPv4 et vérifier
  6. Joindre la passerelle, la table ARP et vérifier la table de routage
  7. Ajouter une passerelle par défaut et vérifier
  8. Vérifier la résolution de noms

13. Configurations permanentes

13.1. Configuration permanente sous debian

Configuration permanente sous debian.

Editer le fichier /etc/network/interfaces :

auto lo eth1
allow-hotplug eth0

iface lo inet loopback

iface eth0 inet dhcp

iface eth1 inet static
    address 192.168.0.42
    netmask 255.255.255.0
    gateway 192.195.0.1
    dns-nameservers 192.0.2.71

iface eth1 inet6 static
    address 2001:db8::6726
    netmask 32
    gateway 2001:db8::1
    dns-nameservers 2001:db8::12

Et puis redémarrer le service.

13.2. Configuration permanente sous RHEL7

Configuration permanente sous RHEL7.

Editer le fichier /etc/sysconfig/network-scripts/ifcfg-** correspond à l’interface à configurer :

DEVICE="eth0"
HWADDR="00:21:70:10:7E:CD"
NM_CONTROLLED="no"
ONBOOT="yes"
BOOTPROTO=static
# BOOTPROTO=dhcp
IPADDR=10.16.1.106
NETMASK=255.255.255.0
#
#   the GATEWAY is sometimes in: /etc/sysconfig/network
GATEWAY=10.16.1.1

Fichier /etc/sysconfig/network :

HOSTNAME=acme.example.com
DNS1=10.16.1.112
DNS2=8.8.8.8
## DNS2=76.242.0.28
SEARCH=example.com

Et puis redémarrer le service.