У меня есть виртуальная машина ESXi, на которой запущен сервер tftpd-hpa в последней версии Debian 9 для сетевой среды PXE. В целях тестирования я настроил другую виртуальную машину для обработки DHCP в Debian 9 с использованием isc-dhcp-server (с next-server
и bootfile
директивы). Используя третью виртуальную машину без ОС, я могу без проблем загружать сервер по протоколу PXE. Однако при реализации PXE в сети (в частности, Ubiquiti EdgeRouter) сервер PXE не будет работать, если конфигурация tftpd-hpa не будет изменена.
Если я закомментирую TFTP_OPTIONS="--secure"
из файла tftpd-hpa, сервер будет нормально работать с 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
/ и т.д. / по умолчанию / 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
/config/config.boot:
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
}
...
}
--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 сообщит вам: