我想设置我的 PXE 服务器以分配正确的 IP 地址,仅供请求网络启动的客户端使用。
因此,我为网络适配器配置了 2 个不同范围的 IP 地址。192.168.1.19 是在 /24 上广播的一般网络
对于 PXE 服务器启动,我尝试使用另一组 IP 将其与其余网络配置分开。因此,服务器在 /24 上广播第二个 IP 192.168.0.19,仅用于 2 个 IP 范围。(最多 2 台计算机同时使用 PXE 启动)
# cat /etc/network/interfaces
iface enp5s0 inet static
address 192.168.1.19
netmask 255.255.255.0
gateway 192.168.1.1
iface enp5s0:1 inet static
address 192.168.0.19
netmask 255.255.255.0
重点是,只有请求启动的计算机才应该拥有这两个 IP 中的一个。尽管如此,它租用它并且不会释放它,即使在重新启动后也是如此。我必须在客户端上手动重置网络。即使这样,它有时也会恢复相同的 IP。它很窄,因为我的路由器设置在 192.168.1.1。我推测它应该优先考虑相同的范围。
如果客户端禁用了网络启动,则应从一般网络范围获取 IP 以获取文件共享和其他 LAN 服务。如果启用,则应仅获取一个用于 PXE 启动配置的 IP,并在完成后释放。
使其工作的第二次测试:
我一直在测试如何使此配置适用于域名系统你会发现我当前的网络设置其他详细信息:
root@lubuton:~# service dnsmasq restart
root@lubuton:~# service dnsmasq status
● dnsmasq.service - dnsmasq - A lightweight DHCP and caching DNS server
Loaded: loaded (/lib/systemd/system/dnsmasq.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2022-06-19 09:30:18 CEST; 8s ago
Process: 75253 ExecStartPre=/etc/init.d/dnsmasq checkconfig (code=exited, status=0/SUCCESS)
Process: 75261 ExecStart=/etc/init.d/dnsmasq systemd-exec (code=exited, status=0/SUCCESS)
Process: 75270 ExecStartPost=/etc/init.d/dnsmasq systemd-start-resolvconf (code=exited, status=0/SUCCESS)
Main PID: 75269 (dnsmasq)
Tasks: 1 (limit: 18871)
Memory: 652.0K
CPU: 38ms
CGroup: /system.slice/dnsmasq.service
└─75269 /usr/sbin/dnsmasq -x /run/dnsmasq/dnsmasq.pid -u dnsmasq -7 /etc/dnsmasq.d,.dpkg-dist,.dpkg-old,.dpkg-new --local-service --trust-anchor=.,20326,8,2,e06d44b80b8f1d39a95c0b0d7c65d08458e88040>
Jun 19 09:30:18 lubuton dnsmasq-dhcp[75269]: DHCP, IP range 192.168.2.31 -- 192.168.2.40, lease time 1h
Jun 19 09:30:18 lubuton dnsmasq-dhcp[75269]: DHCP, IP range 192.168.2.21 -- 192.168.2.30, lease time 1h
Jun 19 09:30:18 lubuton dnsmasq-dhcp[75269]: DHCP, IP range 192.168.2.11 -- 192.168.2.20, lease time 1h
Jun 19 09:30:18 lubuton dnsmasq-dhcp[75269]: DHCP, IP range 192.168.2.2 -- 192.168.2.10, lease time 1h
Jun 19 09:30:18 lubuton dnsmasq-dhcp[75269]: DHCP, sockets bound exclusively to interface enp5s0
Jun 19 09:30:18 lubuton dnsmasq-tftp[75269]: TFTP root is /srv/tftp
Jun 19 09:30:18 lubuton dnsmasq[75269]: reading /etc/resolv.conf
Jun 19 09:30:18 lubuton dnsmasq[75269]: using nameserver 127.0.0.53#53
Jun 19 09:30:18 lubuton dnsmasq[75269]: read /etc/hosts - 7 addresses
Jun 19 09:30:18 lubuton systemd[1]: Started dnsmasq - A lightweight DHCP and caching DNS server.
lines 1-23/23 (END)
root@lubuton:~# service tftpd-hpa status
● tftpd-hpa.service - LSB: HPA's tftp server
Loaded: loaded (/etc/init.d/tftpd-hpa; generated)
Active: active (running) since Sun 2022-06-19 03:27:58 CEST; 6h ago
Docs: man:systemd-sysv-generator(8)
Tasks: 1 (limit: 18871)
Memory: 392.0K
CPU: 6ms
CGroup: /system.slice/tftpd-hpa.service
└─17162 /usr/sbin/in.tftpd --listen --user tftp --address 192.168.2.1:69 --secure --create /srv/tftp
Jun 19 03:27:58 lubuton systemd[1]: Starting LSB: HPA's tftp server...
Jun 19 03:27:58 lubuton tftpd-hpa[17154]: * Starting HPA's tftpd in.tftpd
Jun 19 03:27:58 lubuton tftpd-hpa[17154]: ...done.
Jun 19 03:27:58 lubuton systemd[1]: Started LSB: HPA's tftp server.
客户端:PXE-E53: No bootfilename recieved
您可以在这里找到我的默认网络配置。这是/etc/dnsmasq.d/pxe.conf
我用来设置 PXE 服务器的配置:
interface=enp5s0,lo
bind-interfaces
log-dhcp
dhcp-host=pxe.home.lan,192.168.2.1
dhcp-range=enp7s4f0,192.168.2.2,192.168.2.10
dhcp-range=enp7s4f1,192.168.2.11,192.168.2.20
dhcp-range=enp8s6f0,192.168.2.21,192.168.2.30
dhcp-range=enp8s6f1,192.168.2.31,192.168.2.40
dhcp-match=set:efi-x86_64,option:client-arch,7
dhcp-boot=tag:efi-x86_64,bootx64.efi,pxelinux.0
enable-tftp
tftp-root=/srv/tftp
我认为我对 PXE 网络对 IP 范围和子网的需求有些不理解。
重点是我将使用这个 PXE 来帮助人们恢复/修复/安装/重新安装他们的操作系统。
我的家庭网络 192.168.1.0/24 应该保持私密。我的 PXE 网络应该共享最后一个网络的互联网,并允许连接到除连接到 ISP 路由器的 enp5s0 之外的所有其他接口的客户端访问 PXE bootp 服务。
如果我理解正确的话,PXE 只能在 WAN IP 范围内工作?
我忘了提一下:
我希望我的网络中的所有计算机都保留在 LAN IP 上,以使 Samba 安全性基于 LAN 限制而不是用户。
我可以自动提供与 enp5s0 相同范围的 IP,因为这与路由器 IP 租约冲突。所以我尝试将其放在 192.168.2.0/24 上。
这可能吗或者这就是问题所在?
我在 pxe.conf 中的最后一个配置共享互联网,在启动时向客户端提供 IP,但没有发送任何文件。
interface=enp5s0,lo
bind-interfaces
log-dhcp
dhcp-host=pxe.home.lan,192.168.2.1
dhcp-range=192.168.2.2,192.168.2.40
dhcp-match=set:efi-x86_64,option:client-arch,7
dhcp-boot=tag:efi-x86_64,bootx64.efi,pxelinux.0
enable-tftp
tftp-root=/srv/tftp
答案1
我认为您的计划不会如您所愿。由 PXE 启动的操作系统通常会进行自己的 DHCP 网络设置。来自第二个网络设置的 DHCP 客户端数据包可能不包含 PXE 选项。
但是,使用 PXE 选项检测 DHCP 客户端数据包当然是可能的。这是一种常用方法,因此可以动态提供 PXE 响应选项。可以做什么取决于所使用的 DHCP 服务。
这是 DHCP 服务的示例配置isc-dhcp-server
。它将为 PXE 客户端提供不同的池。它不会按您的需要提供单独的子网,但可能会进行调整。
class "pxeclient" {
match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
filename "pxelinux.0";
}
subnet 192.168.1.0 netmask 255.255.255.0
{
option routers 192.168.1.1;
next-server 192.168.1.1;
max-lease-time 3600;
pool {
range 192.168.1.100 192.168.1.109;
allow members of "pxeclient";
}
pool {
range 192.168.1.110 192.168.1.119;
allow unknown-clients;
}
}
另一种常见的 DHCP 服务是dnsmasq
。这是一个与上述功能相同的示例配置。
log-dhcp
dhcp-option=3,192.168.1.1
dhcp-match=set:pxe,60,PXEClient
dhcp-boot=tag:pxe,pxelinux.0,server,192.168.1.1
dhcp-range=tag:pxe,192.168.1.100,192.168.1.109,255.255.255.0,1h
dhcp-range=tag:!pxe,192.168.1.110,192.168.1.119,255.255.255.0,1h
其他有趣的话题包括
- 基于 PXE 客户端架构的 PXE 响应选项(例如 BIOS 与 UEFI)
- proxyDHCP 服务(
dnsmasq
支持此功能)
有用的网址