5 votes

dhclient ne définit pas la passerelle par défaut

Je fais tourner quelques machines virtuelles Ubuntu 16.04 dans le nuage Azure. Chaque fois que je redémarre une VM, je dois définir manuellement la passerelle par défaut.

La passerelle doit être définie par dhclient. J'ai activé le débogage et j'obtiens ceci :

root@backend01:/etc/dhcp/dhclient-exit-hooks.d# cat /tmp/dhclient-script.debug

root@backend01:/etc/dhcp/dhclient-exit-hooks.d# cat /tmp/dhclient-script.debug
Thu Jun  2 17:18:33 UTC 2016: entering /etc/dhcp/dhclient-enter-hooks.d, dumping variables.
reason='PREINIT'
interface='eth0'
--------------------------
Thu Jun  2 17:18:33 UTC 2016: entering /etc/dhcp/dhclient-enter-hooks.d, dumping variables.
reason='REBOOT'
interface='eth0'
new_ip_address='10.10.0.13'
new_network_number='10.10.0.0'
new_subnet_mask='255.255.0.0'
new_broadcast_address='10.10.255.255'
new_routers='10.10.0.1'
new_rfc3442_classless_static_routes='0 10 10 0 1 32 168 63 129 16 10 10 0 1'
new_domain_name='azure-prod'
new_domain_search='azure-prod.'
new_domain_name_servers='10.11.0.250 10.11.0.251'

L'option des routeurs est donc correctement configurée. Même le fichier de location montre la valeur correcte :

lease {
  interface "eth0";
  fixed-address 10.10.0.13;
  server-name "RD7CFE90879C98";
  option subnet-mask 255.255.0.0;
  option dhcp-lease-time 4294967295;
  option routers 10.10.0.1;
  option dhcp-message-type 5;
  option dhcp-server-identifier 168.63.129.16;
  option domain-name-servers 10.11.0.250,10.11.0.251;
  option domain-search "azure-prod.";
  option dhcp-renewal-time 4294967295;
  option rfc3442-classless-static-routes 0,10,10,0,1,32,168,63,129,16,10,10,0,1;
  option unknown-245 a8:3f:81:10;
  option dhcp-rebinding-time 4294967295;
  option domain-name "azure-prod";
  renew 0 2152/07/09 23:41:47;
  rebind 0 2152/07/09 23:41:47;
  expire 0 2152/07/09 23:41:47;
}

Voici à quoi ressemble mon /etc/dhcp/dhclient.conf :

option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;

send host-name = gethostname();
request subnet-mask, broadcast-address, time-offset, routers,
    domain-name, domain-name-servers, domain-search, host-name,
    dhcp6.name-servers, dhcp6.domain-search, dhcp6.fqdn, dhcp6.sntp-servers,
    netbios-name-servers, netbios-scope, interface-mtu,
    rfc3442-classless-static-routes, ntp-servers;

timeout 300;

supersede domain-name "azure-prod";
supersede domain-search "azure-prod";

Pourquoi dhclient ne définit-il pas ma route par défaut ?

9voto

Robert coeglin Points 31

J'ai trouvé le problème. Puisque le DHCP d'Azure définit le rfc3442-classless-static-routes l'option routers est ignorée par le dhclient-script.

La rfc3442 est gérée par un crochet de sortie script en /etc/dhcp/dhclient-exit-hooks.d/rfc3442-classless-routes

Mon problème était que j'avais un autre crochet de sortie personnalisé, qui faisait un exit 0 à la fin et a donc terminé l'exécution de dhclient-script qui en retour n'a jamais pu exécuter le crochet de sortie rfc3442-classless-routes.

Ce problème était profondément enfoui et m'a coûté presque une journée de travail. J'espère donc que cela évitera à quelqu'un d'avoir le même problème à l'avenir.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X