我有一台 ESXi VM,在最新版本的 Debian 9 上运行 tftpd-hpa 服务器,用于网络 PXE 环境。为了进行测试,我使用 isc-dhcp-server(带有next-server
和bootfile
指令)配置了另一台 VM 来处理 Debian 9 上的 DHCP。使用没有操作系统的第三台 VM,我能够毫无问题地通过 PXE 启动到服务器。但是,在网络上实施 PXE(特别是 Ubiquiti EdgeRouter)时,除非修改 tftpd-hpa 配置,否则 PXE 服务器将无法工作。
如果我从 tftpd-hpa 文件中注释掉该TFTP_OPTIONS="--secure"
行,服务器将与 EdgeRouter 配合良好。我还尝试将以下配置行添加到 EdgeRouter 配置文件中,但无济于事:
subnet-parameters "filename "/srv/tftp/pxelinux.0";"
subnet-parameters "filename ;pxelinux.0";"
我相信问题源于 EdgeRouter 将 DHCP 选项中继到客户端的方式,但是什么原因导致了这个问题,我该如何修复它?我知道我可以禁用该secure
选项,但我不想这样做。我也尝试过在路由器配置中添加完整路径和部分路径。
错误:
TFTP.
PXE-T01: File not found
PXE-E3B: TFTP Error - File Not found
PXE-M0F: Exiting Intel PXE ROM.
Operating System not found
在 /etc/default/tftpd-hpa 中:
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/srv/tftp"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure"
/SRV/TFTP:
$ ls -alh
total 20K
drwxrwxr-x 3 root root 4.0K Mar 4 14:38 .
drwxr-xr-x 3 root root 4.0K Apr 18 00:37 ..
drwxrwxr-x 3 root root 4.0K Mar 4 14:38 debian-installer
lrwxrwxrwx 1 root root 47 Mar 4 14:38 ldlinux.c32 -> debian-installer/amd64/boot-screens/ldlinux.c32
lrwxrwxrwx 1 root root 33 Mar 4 14:38 pxelinux.0 -> debian-installer/amd64/pxelinux.0
lrwxrwxrwx 1 root root 35 Mar 4 14:38 pxelinux.cfg -> debian-installer/amd64/pxelinux.cfg
-rw-r--r-- 1 root root 79 Apr 18 00:41 test
-rw-rw-r-- 1 root root 62 Mar 4 14:38 version.info
/配置/配置.启动:
dhcp-server {
disabled false
hostfile-update disable
shared-network-name LAN {
authoritative enable
subnet 192.168.1.0/24 {
bootfile-name pxelinux.0
bootfile-server 192.168.1.94
default-router 192.168.1.1
dns-server 192.168.1.1
lease 86400
start 192.168.1.1 {
stop 192.168.1.127
}
unifi-controller 192.168.1.225
}
}
use-dnsmasq disable
}
...
}
答案1
--secure, -s
Change root directory on startup. This means the remote host does not
need to pass along the directory as part of the transfer, and may add
security. When --secure is specified, exactly one directory should be
specified on the command line. The use of this option is recommended
for security as well as compatibility with some boot ROMs which cannot
be easily made to include a directory name in its request.
前一个参数与您的问题唯一的关联点是使用了不同的 DHCP 服务器bootfile
参数。
Wireshark 流量捕获将告诉您:
- 同一网段上有多少个 DHCP 服务器(应该只有一个)
- 启动客户端的 TFTP 请求显示其完整路径/文件