L’autre jour un ami m’a demandé « Comment puis-je forcer un client DHCP à renouveler son adresse IP sur une station Ubuntu ou Debian comme on peut le faire dans le dans la famille des fenêtrés (pour ne pas les citer) par un simple « ipconfig /renew »? ».

Effectivement c’est une question intéressante à laquelle je vais tenter de répondre au travers de cet article.

On aurait pu penser qu’une option de la commande « ifconfig » permettrait cela aisément mais ce n’est pas le cas.
On peut aussi penser que de redémarrer tout simplement l’interface suffirait mais non (en tout cas pas sur un système à base Debian):

1
2
$ sudo ifconfig eth1 down
$ ifconfig eth1 up

On pourrait également imaginer que le fait de redémarrer le service réseau (networking) suffirait mais la réponse est toujours négative.

Alors comment faire?

Pour pallier à cette problématique il existe le paquet dhcpN-client ou N correspondant à la version.
A l’instant où j’écris cet article la version disponible dans les dépôts officiels est la 3.

Ce paquet embarque le binaire « /sbin/dhclient »:

1
2
$  type dhclient
dhclient is hashed (/sbin/dhclient)

Attention, un utilisateur ne disposant des privilèges « root » ne pourra pas utiliser ce binaire.

Pour forcer un client DHCP à libérer (release) une adresse IP il faut passer l’option « -r » ce qui nous donne pour l’interface réseau eth1:

1
2
3
4
5
6
7
8
9
10
11
12
$ sudo dhclient -r eth1
There is already a pid file /var/run/dhclient.pid with pid 5075
killed old client process, removed PID file
Internet Systems Consortium DHCP Client V3.1.1
Copyright 2004-2008 Internet Systems Consortium.
All rights reserved.
For info, please visit http://www.isc.org/sw/dhcp/
 
Listening on LPF/eth1/08:00:27:f9:d5:5c
Sending on   LPF/eth1/08:00:27:f9:d5:5c
Sending on   Socket/fallback
DHCPRELEASE on eth1 to 10.0.2.2 port 67

A ce stade notre interface réseau ne dispose plus d’adresse IP:

1
2
3
4
5
6
7
8
$ sudo ifconfig eth1
eth1      Link encap:Ethernet  HWaddr 08:00:27:f9:d5:5c  
          adr inet6: fe80::a00:27ff:fef9:d55c/64 Scope:Lien
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:30742 errors:0 dropped:0 overruns:0 frame:0
          TX packets:17516 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:1000 
          RX bytes:24139521 (23.0 MiB)  TX bytes:1036322 (1012.0 KiB)

Maintenant nous devons demander à notre client DHCP d’interroger le réseau (effectuer un broadcast) afin de récupérer une adresse IP qui lui permettra de dialoguer à nouveau avec le reste du réseau:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ sudo dhclient eth1
Internet Systems Consortium DHCP Client V3.1.1
Copyright 2004-2008 Internet Systems Consortium.
All rights reserved.
For info, please visit http://www.isc.org/sw/dhcp/
 
Listening on LPF/eth1/08:00:27:f9:d5:5c
Sending on   LPF/eth1/08:00:27:f9:d5:5c
Sending on   Socket/fallback
DHCPDISCOVER on eth1 to 255.255.255.255 port 67 interval 5
DHCPOFFER from 10.0.2.2
DHCPREQUEST on eth1 to 255.255.255.255 port 67
DHCPACK from 10.0.2.2
bound to 10.0.2.15 -- renewal in 35265 seconds.

Notre interface à bien récupérer une adresse IP:

1
2
3
4
5
6
7
8
9
$ sudo ifconfig eth1
eth1      Link encap:Ethernet  HWaddr 08:00:27:f9:d5:5c  
          inet adr:10.0.2.15  Bcast:10.0.2.255  Masque:255.255.255.0
          adr inet6: fe80::a00:27ff:fef9:d55c/64 Scope:Lien
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:30757 errors:0 dropped:0 overruns:0 frame:0
          TX packets:17580 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:1000 
          RX bytes:24143151 (23.0 MiB)  TX bytes:1048463 (1023.8 KiB)

Conclusion

J’espère que ce petit article vous sera utile. Si vous connaissez d’autres méthodes ou tout simplement comment on fait sur d’autres distributions n’hésitez pas à m’en faire part je complèterai ainsi l’article.