Ceci est un post invité de Toniob posté sous licence creative common 3.0 unported.
Oh oui, je sais ce que vous allez me dire, et vous avez parfaitement raison. Oui, il m’arrive d’être un peu obtus sur certaines choses, surtout quand il s’agit d’un domaine que je connais. Bref, aujourd’hui nous allons parler de ifconfig et de route.
Soyons clair tout de suite : arrêtez d’utiliser ces merdes, elles sont dépréciées depuis longtemps ! Je sais comment sont les informaticiens de manière générale, et les administrateurs systèmes en particulier. Il est difficile de changer leurs habitudes. Mais si on vous proposait Scarlett Johansson, vous resteriez fidèle à Régine ou Jonathan Rhys Meyers si vous aviez Mickey Rourke ? Je vois à vos yeux lubriques que vous m’avez saisi. Alors c’est parti.
Les interfaces
Utilisez la commande ip, c’est un ordre. Elle remplacera avantageusement ifconfig. Dans la suite de ce billet, je mettrai des exemples de commandes avec ifconfig et leur équivalent avec ip. Commençons avec du simple, afficher la liste des interfaces disponibles :
# ifconfig -a
eth0 Link encap:Ethernet HWaddr 00:90:f5:ee:62:31
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 lg file transmission:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Interruption:20 Mémoire:f7e00000-f7e20000
lo Link encap:Boucle locale
inet adr:127.0.0.1 Masque:255.0.0.0
adr inet6: ::1/128 Scope:Hôte
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:12 errors:0 dropped:0 overruns:0 frame:0
TX packets:12 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 lg file transmission:0
RX bytes:720 (720.0 B) TX bytes:720 (720.0 B)
$ ip addr
1: lo:
Vous voyez, pour le moment ce n’est pas si compliqué, vous économisez même de précieuses lettres. Vous constatez que la sortie est différente, mais vous y trouverez globalement les mêmes informations. C’est une question d’habitude. Personnellement, ça m’a pris un peu de temps, mais je ne reviendrais en arrière pour rien au monde.
On va maintenant assigner une adresse ip. Bon, j’avoue, c’est un peu plus long cette fois avec la commande ip :
# ifconfig eth0 192.168.1.1/24
# ip addr add 192.168.1.1/24 dev eth0
Et si maintenant nous ajoutions une adresse ipv4 ? Sauf qu’avec ifconfig, ce n’est pas possible, on ne peut le faire qu’avec ip :
# ip addr add 192.168.1.2/32 dev eth0
Si on affiche la configuration de l’interface réseau :
# ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:90:f5:ee:62:31
inet adr:192.168.1.1 Bcast:0.0.0.0 Masque:255.255.255.0
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 lg file transmission:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Interruption:20 Mémoire:f7e00000-f7e20000
$ ip addr show eth0
2: eth0:
Et oui, rien du côté de ifconfig. Il ne voit pas que l’interface dispose de deux adresses différentes. Alors qu’il fallait utiliser des alias d’interface avec ifconfig, plus de souci de ce côté là avec ip. Voici maintenant quelques exemples d’autres commandes pouvant être utiles :
# ifconfig eth0 mtu 9000
# ip link set eth0 mtu 9000
# ifconfig eth0 up
# ip link set eth0 up
Les routes
Passons maintenant aux routes. Si vous utilisez ifconfig, vous vous servez aussi probablement de route. C’est fini les conneries maintenant ! Commençons par les afficher :
# route -n
Table de routage IP du noyau
Destination Passerelle Genmask Indic Metric Ref Use Iface
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
$ ip route
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.1
Oui, la sortie est moins verbeuse par défaut. Ça devrait vous plaire pour vos scripts shell. Ajoutons maintenant une route par défaut :
# route add default gw 192.168.1.254
# ip route add defaut via 192.168.1.254
Et si on regarde le résultat de la commande ip route maintenant :
$ ip route
default via 192.168.1.254 dev eth0
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.1
Contrairement à route, ip route génère une sortie qui peut être copiée / collée dans un ip route add. Pratique pour dupliquer une conf sur un autre serveur. Pour ajouter une route vers un hôte ou un réseau en particulier :
# route add -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.1.253
# ip route add 192.168.2.0/24 via 192.168.1.253
C’est une affaire de goût, mais je préfère largement la syntaxe de ip à celle de route.
Conclusion
Voilà cette petite introduction à la commande ip est terminée. Essayez de remplacer ifconfig dans vos usages au quotidien. Ça prend un peu de temps pour s’y faire, mais la syntaxe plus claire et les fonctionnalités disponibles permettent vite d’être plus rapide dans la configuration réseau d’une machine. Les exemples que j’ai donnés dans cet article devraient être suffisants pour 90% des usages. Si vous cherchez à vouloir en faire plus, il suffit d’ajouter l’option help à votre ligne de commande pour avoir des informations. Plus pratique que d’avoir à taper dans le man sans arrêt.
Si cet article vous plaît (merci de me faire des commentaires élogieux, c’est mon premier ici), j’essaierai de vous faire découvrir un peu plus la stack réseau sous Linux. Si les vlans sont connus, les bondings un peu moins, je pense que les macvtaps sont un mystère pour la plupart d’entre vous. Et tout se fait avec l’aide d’ip en plus, que demande le peuple ?
Et si la conf réseau ça vous saoule, je trouverai à m’énerver sur d’autres choses (le larousse n’a qu’à bien se tenir).
Très bon article, un bon mémo pour les commandes de base d’
ip
! J’essaye justement de n’utiliser qu’ip
et ce post va bien m’aider!Je note un seul problème à l’arrêt de l’utilisation
ifconfig
: certains équipements réseaux ne supportent pas encoreip
, mais seulementifconfig
.Et comme sur IOS (Cisco, pas Apple), les commandes de ip peuvent être réduites tant qu’il n’y a pas d’ambiguïté. Du coup,
ip a
est équivalent à
ip addr
. Ça combiné au fait que Debian a mis ifconfig dans /sbin (et donc hors du path des utilisateurs), ça aide vraiment à passer de ifconfig à ip :)Pour l'IPv6, pensez à préciser -6, surtout sur
ip r
qui n'affiche que les routes IPv4.Merci Toniob pour cet article!
Perso, je n’utilisais ifconfig que pour afficher mon adresse ip, mais je vais essayer de prendre le pli…de toutes façons, l’output de ip semble plus claire.
QUOI????
Pas de commande ip sous Solaris 10????
Sur OS X :
Comment je fais maintenant ?! :'(
Je suis SysAdmin et je t’emmerde.
:p
Sinon, oui, je sais, il faut VRAIMENT que je passe à ip. Le problème principal n’étant pas vraiment l’habitude mais la documentation. Refaire toute sa doc technique en remplaçant ifconfig par ip…. Déjà que j’aime pas la doc, alors bon…
Enfin bon, j’imagine que je vais devoir garder les deux un moment, proposer la commande ip en premier et conserver la méthode “old fashion” tout de même, sauf pour les scripts (et putain, il y en a des scripts !). Jusqu’à ce que toute l’équipe n’utilise plus qu’ip…
J’imagine que, comme le reste, ça peut se faire à marche forcée au départ puis après ça roule tout seul…
(dans un coin de ma tête il y a quelqu’un qui dit : “boah, pour la doc, un petit coup de regex et c’est f…” : NON !)
Ah merde, j’oubliais :
> que demande le peuple ?
qu’on nous laisse utiliser les commandes dépréciées qui fonctionneront tant qu’on ne nous les aura pas retirées :D
et comme la plupart des limaces qui codent, je prefere ifconfig et route parce que “1” à “2” arguments de moins à se coltiner sur la ligne de commande ;) sauf pour le route add mais osef on a “l’habitude” justement .
/me avocat du diable
thank you baby pour cet article.
@maethor sbin est pour static binary. Donc pour les binaire linke staticement et non un chemin pour les administrateurs.
export PATH=/sbin:/usr/sbin:$PATH
devrait etre fait automatiquement dans ton .{bash,zsh,…}rc
@maethor sbin est pour static binaries. Ce ne sont pas en particulier des binaires que l’on doit obligatoirement lancer en root.
https://dougvitale.wordpress.com/2011/12/21/deprecated-linux-networking-commands-and-their-replacements/
> Et si maintenant nous ajoutions une adresse ipv4 ? Sauf qu’avec ifconfig,
> ce n’est pas possible, on ne peut le faire qu’avec ip :
Perdu, comment tu crois qu’on faisait avant que ça sorte ip :p
ifconfig eth0:0 192.168.1.2/32
ifconfig eth0:1 192.168.1.3/32
ifconfig eth0:2 192.168.1.4/32
ifconfig eth0:3 192.168.1.5/32
(on peut aussi assigner tagger les interfaces pour les vlan, genre ifconfig eth0.1 10.0.0.1/32)
sans vouloir dire de bêtises, il me semble que cette commande est non seulement spécifique à Linux, mais n’est pas forcément installée par défaut, car faisant partie du paquet “iproute2″…
Ouais, premier article, c’est la base, mais rien à redire. Plutôt honnête sur les avantages et inconvénients.
Moi ce que je voudrais, c’est de la doc claire sur iptables et TPROXY ;)
Mais bon, on va me dire que c’est déprécié en faveur de nftables ?
il y a aussi ss -taupe qui remplace netstat :)
Impec comme article un moyen de se moderniser pour pas cher !
cool c’est vrais que les habitudes on la vie dure ….
# ifconfig eth0 up
# ip link set eth0 up
et aussi:
ifup eth0
ifdown eth0