Généralités système Linux

La commande ip : réseau, interfaces, routage, table ARP

Cet article a été mis à jour, vous consultez ici une archive de cet article!
Table des matières

ethernet_cable



Introduction



Les outils de réseau contenant notamment la commande ifconfig ne sont plus maintenus ou plus guère maintenus.
Il est conseillé d'utiliser maintenant la commande ip qui fait tout.
Cet article va présenter les options possibles de la commande ip.
J'utiliserai le nom d'interface eno16777736 (celui de ma machine virtuelle) pour illustrer les commandes qui auront besoin d'une interface spécifique.


Récolter des informations



La première utilisation de la commande ifconfig est de récupérer l'adresse IP de la machine.
L'équivalent avec la commande ip est

Code BASH :
ip a


Cela liste toutes les interfaces, avec toutes les informations :

Code BASH :
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 brd 127.255.255.255 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
    link/ether 00:0c:29:8c:b2:02 brd ff:ff:ff:ff:ff:ff
    inet 192.168.74.128/24 brd 192.168.74.255 scope global eno16777736
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe8c:b202/64 scope link
       valid_lft forever preferred_lft forever


On peut ne récupérer que les adresses IPv4 via :
Code BASH :
ip -4 a


Ou bien que les adresses IPv6 via :
Code BASH :
ip -6 a


On peut aussi filtrer par l'interface via :
Code BASH :
ip a show eno16777736


On peut cumuler toutes les options pour n'avoir que les infos de cette interface en IPv4 :
Code BASH :
ip -4 a show eno16777736


On peut aussi afficher que les interfaces "up" :
Code BASH :
ip link ls up



Modifier une interface



Auparavant, pour assigner une IP à une interface, on procédait ainsi :
Code BASH :
ifconfig eno16777736 192.168.74.101


Maintenant, avec la commande IP :
Code BASH :
ip a add 192.168.74.101/255.255.255.0 dev eno16777736 


Ou plus court (le masque en CIDR) :
Code BASH :
ip a add 192.168.74.101/24 dev eno16777736 


Il faut en effet maintenant connaître le masque du sous-réseau à utiliser.

Il est possible aussi de supprimer cette adresse IP :
Code BASH :
ip a del 192.168.74.101/24 dev eno16777736 


Pour activer ou désactiver une interface :
Code BASH :
ip link set dev eno16777736 up
ip link set dev eno16777736 down


La commande IP permet aussi de déclarer les routes (et routes par défaut) :
Code BASH :
ip route add default via 192.168.74.254


Et aussi, il est possible à la volée de changer le MTU :
Code BASH :
ip link set mtu 9000 dev eno16777736 



Gérer les tables de routage



Pour voir la table de routage :
Code BASH :
ip r


Code BASH :
default via 192.168.74.254 dev eno16777736  metric 2
127.0.0.0/8 dev lo  scope host
127.0.0.0/8 via 127.0.0.1 dev lo
192.168.74.0/24 dev eno16777736  proto kernel  scope link  src 192.168.74.128


On pourra ajouter des routes, voici un exemple :
Code BASH :
ip route add 10.21.21.0/24 via 192.168.21.254 dev eth0


Pour supprimer une route :
Code BASH :
ip route del 10.21.21.0/24


Afficher des statistiques



Avant, avec la commande ifconfig on avait les statistiques des paquets envoyés et reçus :

Code BASH :
ifconfig 
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.21.251  netmask 255.255.255.0  broadcast 192.168.21.255
        inet6 fe80::225:64ff:feec:ec99  prefixlen 64  scopeid 0x20<link>
        ether 00:25:64:ec:ec:99  txqueuelen 1000  (Ethernet)
        RX packets 1456858273  bytes 905154140467 (842.9 GiB)
        RX errors 0  dropped 1623  overruns 0  frame 0
        TX packets 2231407022  bytes 3146572777909 (2.8 TiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 21  memory 0xfe6e0000-fe700000  
 


On sait que depuis le dernier reboot, cette interface a envoyé 2.8TiB de données et reçues 842.9 GiB.

Avec la commande ip, cela devient :

Code BASH :
ip -s -h -a link
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether 00:25:64:ec:ec:99 brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast   
    905G       1.46G    0       87      0       865k    
    TX: bytes  packets  errors  dropped carrier collsns 
    3.15T      2.23G    0       0       0       0