Je construis un réseau avec un serveur DHCP (192.168.201.2), un serveur TFTP/NFS (192.168.201.3) et d'autres machines sur le point de démarrer à partir de ces deux machines, toutes exécutent Ubuntu 16.04.4.
Quand j'en allume un, après le post, il reçoit avec succès une adresse IP du serveur DHCP, il se connecte au serveur TFTP, charge vmlinuz et initrd.img mais lorsqu'il tente de récupérer l'adresse IP, il affiche le message suivant:
IP-Config: eth0 hardware address xx:xx:xx:xx:xx:xx mtu 1500 DHCP
IP-Config: no response after 2 secs - giving up
IP-Config: eth0 hardware address xx:xx:xx:xx:xx:xx mtu 1500 DHCP
IP-Config: no response after 3 secs - giving up
etc.
Ma configuration
/etc/dhcp/dhcpd.conf
ddns-update-style none;
default-lease-time 600;
max-lease-time 7200;
authoritative;
log-facility local7;
allow booting;
allow bootp;
subnet 192.168.201.0 netmask 255.255.255.0 {
default-lease-time 3600;
max-lease-time 86400;
option routers 192.168.201.1;
option subnet-mask 255.255.255.0;
option domain-name-servers 208.67.222.222, 8.8.8.8;
option broadcast-address 192.168.201.255;
range 192.168.201.3 192.168.201.254;
filename = "gpxelinux.0";
next-server 192.168.201.3;
}
Host tftp {
hardware ethernet xx:xx:xx:xx:xx:xx;
fixed-address 192.168.201.3;
}
/tftpboot/pxelinux.cfg/default
MENU LABEL Ubuntu DISKLESS
KERNEL vmlinuz-4.4.0-127-generic
APPEND boot=nfs root=/dev/nfs nfsroot=192.168.201.3:/srv/nfsroot/installer/ default,ro initrd=initrd.img-4.4.0-127-generic ipv6.disable=1 ip=dhcp net.ifnames=0 biosdevname=0
/etc/initramfs-tools/initramfs.conf (sur le système sur le serveur NFS)
MODULES=netboot
BUSYBOX=auto
COMPCACHE_SIZE=""
COMPRESS=gzip
DEVICE=eth0
NFSROOT=auto
BOOT=nfs
J'ai trouvé this bug, mais il a été corrigé sur klibc - 2.0.4-8ubuntu1.16.04.1, et c'est la version que j'utilise.
J'ai essayé d'exécuter dhcpdump sur le serveur DHCP et j'obtiens ceci:
TIME: 2018-06-05 11:22:59.057
IP: 0.0.0.0 (xxx) > 255.255.255.255 (ff:ff:ff:ff:ff:ff)
OP: 1 (BOOTPREQUEST)
HTYPE: 1 (Ethernet)
HLEN: 6
Hops: 0
XID: 4dae1bf8
SECS: 4
FLAGS: 7f80
CIADDR: 0.0.0.0
YIADDR: 0.0.0.0
SIADDR: 0.0.0.0
GIADDR: 0.0.0.0
CHADDR: xxx
SNAME: .
FNAME: .
OPTION: 53 ( 1) DHCP message type 1 (DHCPDISCOVER)
OPTION: 55 ( 36) Parameter Request List 1 (Subnet mask)
2 (Time offset)
3 (Routers)
4 (Time server)
5 (Name server)
6 (DNS server)
11 (Resource location server)
12 (Host name)
13 (Boot file size)
15 (Domainname)
16 (Swap server)
17 (Root path)
18 (Extensions path)
22 (Maximum datagram reassembly size)
23 (Default IP TTL)
28 (Broadcast address)
40 (NIS domain)
41 (NIS servers)
42 (NTP servers)
43 (Vendor specific info)
50 (Request IP address)
51 (IP address leasetime)
54 (Server identifier)
58 (T1)
59 (T2)
60 (Vendor class identifier)
66 (TFTP server name)
67 (Bootfile name)
128 (???)
129 (???)
130 (???)
131 (???)
132 (???)
133 (???)
134 (???)
135 (???)
YIADDR: 0.0.0.0 signifie que le serveur reçoit la demande mais ne répond pas, correct? Mais pourquoi?
D'autres choses que j'ai essayées changent ip = dhcp en ip = bootp et ip =: 192.168.201.2 :::: eth0: dhcp mais rien ne change.
Si je configure manuellement une adresse IP statique avec:
ip=192.168.201.55:192.168.201.2:192.168.201.1:255.255.255.0:ubuntu:eth0:static
tout fonctionne, mais le réseau aura de nombreux clients, je dois tout automatiser.
Je ne peux pas comprendre ce que je fais mal.
Modifier:
Le serveur DHCP est répondant:
TIME: 2018-06-05 11:23:24.857
IP: 192.168.201.2 (xxx) > 255.255.255.255 (ff:ff:ff:ff:ff:ff)
OP: 2 (BOOTPREPLY)
HTYPE: 1 (Ethernet)
HLEN: 6
Hops: 0
XID: 8d449854
SECS: 0
FLAGS: 7f80
CIADDR: 0.0.0.0
YIADDR: 192.168.201.11
SIADDR: 192.168.201.3
GIADDR: 0.0.0.0
CHADDR: xxx
SNAME: .
FNAME: gpxelinux.0.
OPTION: 53 ( 1) DHCP message type 2 (DHCPOFFER)
OPTION: 54 ( 4) Server identifier 192.168.201.2
OPTION: 51 ( 4) IP address leasetime 3164 (52m44s)
OPTION: 1 ( 4) Subnet mask 255.255.255.0
OPTION: 3 ( 4) Routers 192.168.201.1
OPTION: 6 ( 8) DNS server 208.67.222.222,8.8.8.8
OPTION: 15 ( 11) Domainname example.org
OPTION: 28 ( 4) Broadcast address 192.168.201.255
et tout me semble juste, mais alors pourquoi le client ne reçoit-il pas cela?
Si quelqu'un trouve cela, voici comment je l'ai résolu.
Le bug que j'ai mentionné dans mon message n'est pas corrigé, la méthode la plus simple consiste à télécharger INITRD_N11.2.2.GZ à partir de ici et à le placer dans le dossier où vous le souhaitez. avoir votre fichier initrd, puis ajouter le nom de fichier dans la configuration PXE après l'initrd d'origine, séparés par une virgule. En outre, vous devez définir un ip pour bootp. Donc, mon fichier est maintenant comme ça:
MENU LABEL Ubuntu DISKLESS
KERNEL vmlinuz-4.4.0-127-generic
APPEND boot=nfs root=/dev/nfs nfsroot=192.168.201.3:/srv/nfsroot/installer/ default,ro initrd=initrd.img-4.4.0-127-generic,INITRD_N11.2.2.GZ net.ifnames=0 biosdevname=0 ipv6.disable=1 ip=bootp
et tout fonctionne bien.
INITRD_N11.2.2.GZ concerne uniquement Ubuntu 16.04, si vous avez une version différente, vérifiez ici .