La commande ip : réseau, interfaces, routage, table ARP
Table des matières
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.
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.
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
Cela liste toutes les interfaces, avec toutes les informations :
On peut ne récupérer que les adresses IPv4 via :
Ou bien que les adresses IPv6 via :
On peut aussi filtrer par l'interface via :
On peut cumuler toutes les options pour n'avoir que les infos de cette interface en IPv4 :
On peut aussi afficher que les interfaces "up" :
Voici comment assigner une adresse IP à une interface :
Ou plus court (le masque en CIDR) :
Il faut en effet maintenant connaître le masque du sous-réseau à utiliser.
Il est possible aussi de supprimer cette adresse IP :
Pour activer ou désactiver une interface :
La commande IP permet aussi de déclarer les routes (et routes par défaut) :
Et aussi, il est possible à la volée de changer le MTU :
Pour voir la table de routage :
On pourra ajouter des routes, voici un exemple :
Pour supprimer une route :
Avant, avec la commande ifconfig on avait les statistiques des paquets envoyés et reçus :
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 :
Afin de connaitre les adresses MAC de ses voisins, on utilisais au préalable la commande arp -a :
Avec la commande IP il s'agit de ip neigh :
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é) :
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 :
|
Activer (up) ou désactiver (down) l'interface enp24s0 | Code BASH :
|
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 :
|
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 :
|
Code BASH : ss |
Lister les sockets écoutant en TCP/UDP avec infos | Code BASH : netstat -tuplane |
Code BASH :
|
Afficher les routes réseaux | Code BASH : route |
Code BASH :
|
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 :
|
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 :
|
Code BASH :
|
Supprimer une entrée ARP | Code BASH : arp -i enp24s0 -d 192.168.12.123 |
Code BASH :
|
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