Pourquoi dhclient n'utilise-t-il pas l'IP statique que je lui demande de requérir ?

Voici mon /etc/dhcp3/dhclient.conf :

request subnet-mask, broadcast-address, time-offset, routers,
        domain-name, domain-name-servers, domain-search, host-name,
        netbios-name-servers, netbios-scope, interface-mtu;
timeout 60;
alias {
  interface "eth0";
  fixed-address 192.168.1.222;
}
lease {
  interface "eth0";
  fixed-address 192.168.1.222;
  option subnet-mask 255.255.255.0;
  option broadcast-address 255.255.255.255;
  option routers 192.168.1.254;
  option domain-name-servers 192.168.1.254;
}

Quand j’exécute “dhclient eth0”, j’obtiens ceci :

There is already a pid file /var/run/dhclient.pid with pid 6511
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/

wmaster0: unknown hardware address type 801
wmaster0: unknown hardware address type 801
Listening on LPF/eth0/00:1c:25:97:82:20
Sending on   LPF/eth0/00:1c:25:97:82:20
Sending on   Socket/fallback
DHCPREQUEST of 192.168.1.27 on eth0 to 255.255.255.255 port 67
DHCPACK of 192.168.1.27 from 192.168.1.254
bound to 192.168.1.27 -- renewal in 1468 seconds.

J’ai utilisé strace pour m’assurer que dhclient lit bien ce fichier de configuration. Pourquoi ne tient-il pas compte de ma ligne “fixed-address 192.168.1.222” ? Pourquoi fait-il un DHCPREQUEST pour 192.168.1.27 à la place ?

Comme Zoredache l’a correctement souligné : le paramètre fixed-address ne concerne que les déclarations de bail qui ne sont effectives que si le serveur DHCP ne répond pas. Consultez http://linux.die.net/man/5/dhclient.conf dans la section “Lease Declarations”.

Ce que vous souhaitez, c’est :

interface "eth0" {
    send dhcp-requested-address 192.168.1.222;
}

Ceci est documenté dans la page man de dhcp-options : http://linux.die.net/man/5/dhcp-options et est conforme à la RFC des options DHCP disponible à http://www.rfc-editor.org/rfc/rfc2132.txt

Notez cependant : j’ai récemment rencontré un problème avec dhclient3 qui n’obtenait pas d’IP avec cette configuration car l’adresse demandée était déjà prise. Le serveur répond avec un DHCPNAK à la requête, et le client abandonne après un moment. Je m’attendais à ce que le client DHCP finisse par obtenir une autre adresse si celle demandée n’est pas disponible.

J’ai utilisé cette approche pour m’assurer de toujours connaître l’adresse de mon serveur sans recourir à des outils comme dyndns.com et j’ai fini sans connectivité à la place.