Généralités système Linux

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

Table des matières

ethernet_cable



Introduction



Les outils de réseau contenant notamment la commande ifconfig, netstat, route et arp sont dépréciés.
Il est conseillé d'utiliser maintenant la commande ip qui fait tout et qui est universelle sur toutes les distributions Linux.

Cet article va présenter les options possibles de la commande ip.
J'utiliserai le nom d'interface enp24s0 pour illustrer les commandes qui auront besoin d'une interface spécifique.

Tableau Récapitulatif



En synthèse de cet article, je vous propose un tableau récapitulatif avec les correspondances avec les anciennes commandes dorénavant dépréciées (netstat, ifconfig, route, arp).
Ici les commandes sont présentées sans exemple de sortie.

Description Commande dépréciée Commande ip associée
Afficher le détail des interfaces
Code BASH :
ifconfig -a
Code BASH :
ip addr 
Activer (up) ou désactiver (down) l'interface enp24s0
Code BASH :
ifconfig enp24s0 down
Code BASH :
ip link set enp24s0 down
Assigner une adresse IP à l'interface enp24s0
Code BASH :
ifconfig enp24s0 192.168.21.100/24
Code BASH :
ip addr add 192.168.21.100/24 dev enp24s0
Ajouter un alias à l'interface enp24s0 avec une IP
Code BASH :
ifconfig enp24s0:0 192.168.21.200/24
Code BASH :
ip addr add 192.168.21.200/24 dev enp24s0 label enp24s0:0
Activer le mode promiscuité
Code BASH :
ifconfig enp24s0 promisc
Code BASH :
[code=bash]ip link set enp24s0 promisc on[/code]
Désactiver le mode promiscuité
Code BASH :
ifconfig enp24s0 -promisc
Code BASH :
[code=bash]ip link set enp24s0 promisc off[/code]
Définir un MTU spécifique à enp24s0
Code BASH :
ifconfig enp24s0 mtu 9000
Code BASH :
ip link set enp24s0 mtu 9000
Changer l'adresse MAC d'une interface
Code BASH :
ifconfig enp24s0 hw ether 00:11:22:33:44:55
Code BASH :
ip link set dev enp24s0 address 00:11:22:33:44:55
Lister les sockets ouverts
Code BASH :
netstat
Code BASH :
ss
Lister les sockets écoutant en TCP/UDP avec infos
Code BASH :
netstat -tuplane
Code BASH :
ss -unplat
Afficher les routes réseaux
Code BASH :
route
Code BASH :
ip route
Ajouter une route
Code BASH :
route add -net 192.168.121.0/24 dev enp24s0
Code BASH :
ip route add 192.168.121.0/24 via 192.168.21.254 dev eth0
Ajouter une route par défaut
Code BASH :
route add default gw 192.168.21.254
Code BASH :
ip route add default via 192.168.21.254
Supprimer une route
Code BASH :
route del -net 192.168.121.0/24
Code BASH :
ip route del 192.168.121.0/24
Afficher la table ARP
Code BASH :
arp -a
Code BASH :
ip neigh
Supprimer une entrée ARP
Code BASH :
arp -i enp24s0 -d 192.168.12.123
Code BASH :
ip neigh del 192.168.21.123 dev enp24s0


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 :
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: enp24s0: <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 enp24s0
       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 enp24s0


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


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



Modifier une interface



Voici comment assigner une adresse IP à une interface :
Code BASH :
ip a add 192.168.74.101/255.255.255.0 dev enp24s0 


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


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 enp24s0 


Pour activer ou désactiver une interface :
Code BASH :
ip link set dev enp24s0 up
ip link set dev enp24s0 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 enp24s0 



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 enp24s0  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 enp24s0  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 enp24s0


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 

Code TEXT :
enp24s0: 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

Code TEXT :
2: enp24s0: <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     


Afficher la table ARP



Afin de connaitre les adresses MAC de ses voisins, on utilisais au préalable la commande arp -a :

Code BASH :
arp -a

Code TEXT :
pve1.linuxtricks.lan (192.168.21.250) at 1c:69:7a:69:23:1a [ether] on eth0
pc.linuxtricks.lan (192.168.21.200) at 30:9c:23:b5:0c:ab [ether] on eth0
cluster.linuxtricks.fr (192.168.21.251) at 98:ee:cb:a4:83:e7 [ether] on eth0
gw.linuxtricks.lan (192.168.21.254) at 00:31:92:84:5d:75 [ether] on eth0


Avec la commande IP il s'agit de ip neigh :

Code BASH :
ip neigh

Code TEXT :
192.168.21.250 dev eth0 lladdr 1c:69:7a:69:23:1a STALE
192.168.21.200 dev eth0 lladdr 30:9c:23:b5:0c:ab STALE
192.168.21.251 dev eth0 lladdr 98:ee:cb:a4:83:e7 REACHABLE
192.168.21.254 dev eth0 lladdr 00:31:92:84:5d:75 REACHABLE
 


A noter que la commande ip neigh ne donne pas la résolution d'une adresse IP. On pourra utilise la commande getent par exemple (host dépendant de bind-utils pas toujours installé) :

Code BASH :
getent hosts 192.168.21.250

Code TEXT :
192.168.21.250  pve1.linuxtricks.lan

Cette page a été vue 165029 fois