You are deprecated 18


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.

- ifconfig ? - ouiiiii ** tum tum tum tum **

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:  mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0:  mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000
    link/ether 00:90:f5:ee:62:31 brd ff:ff:ff:ff:ff:ff

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:  mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
    link/ether 00:90:f5:ee:62:31 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.1/24 scope global eth0
       valid_lft forever preferred_lft forever
    inet 192.168.1.2/32 scope global eth0
       valid_lft forever preferred_lft forever

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).

18 thoughts on “You are deprecated

  • Quack

    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 encore ip, mais seulement ifconfig.

  • maethor

    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.

  • Syl

    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.

  • Morgotth

    Sur OS X :

    22:25 morgotth@rin ~ $ ip addr
    zsh: command not found: ip
    10:11 morgotth@rin ~ 127 $ ifconfig -a
    lo0: flags=8049 mtu 16384
    	options=3
    	inet6 ::1 prefixlen 128
    	inet 127.0.0.1 netmask 0xff000000
    	inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
    	nd6 options=1
    gif0: flags=8010 mtu 1280

    Comment je fais maintenant ?! :'(

  • LLM

    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 !)

  • foxmask

    > 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

  • Vash

    @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

  • Vash

    @maethor sbin est pour static binaries. Ce ne sont pas en particulier des binaires que l’on doit obligatoirement lancer en root.

  • nope

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

  • nico

    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″…

  • Glandos

    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 ?

  • 6no

    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

Leave a comment

Des questions Python sans rapport avec l'article ? Posez-les sur IndexError.