Définir une adresse IP sur Linux en ligne de commande

Écrit par Jean-Michel CHRISOSTOME. Publié dans Blog

Même si il est vrai qu'aujourd'hui les systèmes Linux sont évolué et que bon nombre d'opérations se font automatiquement, il reste toujours les puristes et les curieux qui souhaitent savoir comment fonctionne le système. Nous vivons à l'époque de l'image, où les beaux bureau bourrés à craquer d'effets visuels et où on peut réaliser des actions en quelques clics de souris, mais dès qu'on parle d'optimisation ou d'automatisation, il n'y a pas d'autre choix que d'utiliser des batchs (batch processing en anglais), donc des lignes de commande.

Vous auriez bien tord de croire que c'est obsolète et qu'on peut aisément s'en passer. Au contraire, certains éditeur de système d'exploitation ont même réinvesti dans un langage de batch afin de combler ses lacunes par rapport à d'autres systèmes.

Aujourd'hui, je vais vous montrer comment attribuer une adresse IP à votre carte réseau en ligne de commande sous Linux. Je considère que vous savez ce que c'est qu'un réseau, une adresse IP et un serveur DHCP. Si toutefois ce n'était pas le cas, je vous invite à vous rendre directement dans la partie Liens et références de cet article. 

Les opérations décrites ci-dessous nécessitent les privilèges administrateur (root).

La commande ifconfig, lancée seule affichera seulement les interfaces (cartes) réseau qui ont été paramétrées. Cette même commande avec l'argument -a permet d'afficher toutes les interfaces (configurées ou non) reconnues par le noyaux (ou ses modules). Voici les résulats de la commande ifconfig -a sur notre machine de test :

root@crpfs2:~# ifconfig -a
eth0 Link encap:Ethernet HWaddr 08:00:27:fc:b5:25
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)

eth1 Link encap:Ethernet HWaddr 08:00:27:31:b4:b9
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)

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:16436 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:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

Il n'est pas rare de nos jours d'avoir plusieurs cartes réseaux intégrées à la carte mère de votre ordinateur. Même pour un ordinateur portable, vous pouvez parfaitement avoir une interface en ethernet (filaire avec une prise RJ-45) et une autre en WIFI (sans fil). Cela ajoute un peu de difficulté à notre projet, mais je vais vous apprendre à déterminer la bonne carte (celle qui est branchée au réseau).

Les cartes se nomment respectivement eth0 eth1, un raccourci pour ethernet contrôleur 0 puis contrôleur 1. indique l'ordre dans lequel les cartes ont été détectées (reconnues) par le noyau. Pour une interface Wifi, le nom aurait pu être wlan0 ou ra0 si il s'agissait d'une carte avec un chipset Ralink ou ath0 pour un chipset Atheros.

Enfin, lo correspond à l'interface de loopback ou boucle locale est utilisée par le nom d'hôte localhost (127.0.0.1). Cette interface est indispensable pour le bon fonctionnement de la pile IP. Aussi je conseille de ne pas y toucher à moins que vous ne sachiez vraiment ce que vous faîtes...

Adresse dynamique avec DHCP

La commande dhclient fournie par défaut sur la plupart des distributions Linux modernes (paquet isc-dhcp-client sur Debian) permet d'envoyer une requête DHCP sur le réseau afin d'obtenir une adresse IP dynamique. Son usage est très simple, il suffit d'appeler la commande et de spécifier en argument l'interface réseau avec laquelle on souhaite travailler. Notez que cette dernière doit être connectée physiquement au réseau par l'intermédiaire d'un cable.

Au bout de quelque secondes, la commande doit vous rendre la main sans rien dire. En général c'est bon signe, cela veut dire qu'un serveur DHCP nous a attribué une adresse IP. Pour s'en assurer il suffit de rappeler la commande ifconfig seule (sans arguement) et de comtempler son affichage.

Copie d'écran sur Linux. Utilisation de la commande ifconfig après dhclient

Comme vous pouvez le constater, eth0 possède désormais l'adresse IP 192.168.20.20 attribuée par notre serveur DHCP.

Adresse statique (manuelle)

La commande dhclient vue plus haut n'est malheureusement utilisable que lorsque vous vous trouvez sur un réseau équipé d'un serveur DHCP. Ce qui est le cas dans la plupart des situations aujourd'hui notamment grâce aux box internet. Toutefois, il reste un certain nombre de cas où ce type de service n'existe pas et ou il est nécessaire de faire le travail soit même.

Tout d'abord, pour attribuer une adresse IP à notre carte, nous devons faire appel une nouvelle fois à la commande ifconfig comme suit:

ifconfig eth0 192.168.10.1 netmask 255.255.255.0

Ceci fait, nous venons d'attribuer une adresse IP à la carte eth0 et nous avons également spécifié la classe du réseau sur lequel nous travaillons (ici une classe C). Mais il reste une partie du travail normalement réalisé par le serveur DHCP. En effet, nous devons également spécifier une passerelle (gateway en anglais) pour accéder aux réseaux extérieurs et en l’occurrence, INTERNET...

route add default gw 192.168.10.254
Copie d'écran sur Linux. Résultat des commande ifconfig et route

Pour accéder à internet, il reste un dernier détail à régler. En effet, il nous faut un serveur de nom (DNS) qui se chargera de traduire les noms de domaine (ex: google.fr) en adresse IP. Attention! La commande ci-dessous peut détruire une configuration existante car elle écrase le fichier resolv.conf en charge de traiter les résolutions de nom.

echo "nameserver 8.8.8.8" > /etc/resolv.conf

Ceci fait, il ne nous reste plus qu'à vérifier que toute fonctionne. En faisant un ping google.fr, voici le résultat (Ctrl+C pour interrompre un ping sous Linux):

Copie d'écran sur Linux. Résultat de la commande ping après configuration du réseau

Liens et références

Voici un peu de lecture sur les réseaux ainsi que la manpage de la commande ifconfig sur UBUNTU. Je vous rappelle que vous pouvez trouver les manpages (pages de manuel) sur votre distribution Linux favorite en tapant:

man commande

commande est à remplacer par le nom de la commande concernée. Une fois dans la man page, vous pouvez vous diriger à l'aide des flèches directionnelles et sortir en tapant q.