![PXE 启动因 IP-Config 失败:无响应 - 放弃](https://linux22.com/image/1064005/PXE%20%E5%90%AF%E5%8A%A8%E5%9B%A0%20IP-Config%20%E5%A4%B1%E8%B4%A5%EF%BC%9A%E6%97%A0%E5%93%8D%E5%BA%94%20-%20%E6%94%BE%E5%BC%83.png)
我正在构建一个网络,其中包含一个 DHCP 服务器(192.168.201.2)、一个 TFTP/NFS 服务器(192.168.201.3)和其他将从这两台服务器启动的机器,所有机器都运行 Ubuntu 16.04.4。
当我打开一个时,在发布之后,它成功地从 DHCP 服务器接收了一个 IP,它连接到 TFTP 服务器,加载 vmlinuz 和 initrd.img,但是当它再次尝试获取 IP 时,它会显示以下消息:
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/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/默认
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(在 NFS 服务器上的系统上)
MODULES=netboot
BUSYBOX=auto
COMPCACHE_SIZE=""
COMPRESS=gzip
DEVICE=eth0
NFSROOT=auto
BOOT=nfs
我发现这错误,但它已在 klibc - 2.0.4-8ubuntu1.16.04.1 上修复,这是我正在运行的版本。
我尝试在 DHCP 服务器上运行 dhcpdump,得到以下结果:
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 表示服务器正在接收请求但尚未应答,对吗?但为什么呢?
我尝试过的其他操作是将 ip=dhcp 更改为 ip=bootp 和 ip=:192.168.201.2::::eth0:dhcp,但没有任何变化。
如果我使用以下方式手动设置静态 IP:
ip=192.168.201.55:192.168.201.2:192.168.201.1:255.255.255.0:ubuntu:eth0:static
一切正常,但网络会有许多客户端,我需要让一切自动化。
我不知道我做错了什么。
编辑:
DHCP 服务器是回答:
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
在我看来一切都正确,但为什么客户端没有收到这些信息呢?
答案1
如果有人发现这个问题,下面是我解决的方法。
这漏洞我在我的帖子中提到它实际上并没有修复,修复它的最简单方法是从下载 INITRD_N11.2.2.GZ这里并将其放入您有 initrd 文件的文件夹中,然后在 PXE 配置中将文件名添加到原始 initrd 后,以逗号分隔。您还需要将 ip 设置为 bootp。所以我的文件现在如下所示:
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
并且一切正常。
INITRD_N11.2.2.GZ 仅适用于 Ubuntu 16.04,如果你有其他版本,请检查这里。