# 前言
上周去用户现场部署 Ivanti EPM
服务器用于测试,当时用户主要测试功能为远程控制和操作系统部署,远程控制这个功能不需要配置,只要在代理配置中启用了远程功能即可
操作系统部署这块,如果是在 Windows Server
环境中配置还是比较简单的,仅需要在 DHCP
服务器中添加供应商类和 PXE 主机引导文件信息即可,但是用户的环境中是用 Linux Server
作为 DHCP
服务器,由于之前的项目中并没有用户使用过 Linux Server
作为 DHCP
服务器,没有配置经验,为了不浪费用户时间,决定暂时不使用 PXE
启动来测试操作系统部署,而是在核心服务器上导出 WinPE
镜像,将镜像烧录到 U 盘,用 U 盘引导测试,后续再配置 DHCP
中的 PXE
信息,用于网络引导测试
跟用户进行了短暂的沟通,最终用户也同意了这个方案,先用 U 盘启动测试,后续再教他们如何配置 PXE
启动
当天测试很成功,回来后便着手搭建 Linux DHCP
的 PXE
启动环境
# 环境准备
操作系统 | IP 地址 | 安装服务 |
---|---|---|
Windows Server 2019 | 192.168.80.203 | EPM 核心服务器 |
CentOS 7 | 192.168.80.205 | DHCP |
Windows 11 | 192.168.80.204 | TFTP、PXE Agent |
我这边用的虚拟机版本是 VMware® Workstation 15 Pro
,我已经提前安装了一台 CentOS 7
作为本次测试的服务器,先关闭 VMware
的 DHCP
服务,因为我们要在 CentOS 7
里安装 DHCP
服务,如果不关闭的话会有冲突
关闭 VMware
的 DHCP服务
后,我们的 CentOS 7
将会无法通过 DHCP
获取到 IP 地址,这时就需要修改网卡配置文件,将其设置成静态 IP,手动配置好 IP 地址相关信息
vi /etc/sysconfig/network-scripts/ifcfg-ens32
配置好后用 nmcli c reload ens32
命令重启网卡,令其生效
# DHCP
配置好网络后,用 yum install dhcp -y
命令安装 DHCP
服务
安装完后切换到 /etc/dhcp
目录,然后用 cp
命令把 /usr/share/doc/dhcp-server/dhcpd.conf.example
模板文件复制到 /etc/dhcp
目录下,并重命名为 dhcpd.conf
然后用 vi dhcpd.conf
编辑这个文件,修改子网信息,我这边是 192.168.80.0/24
,请根据自己的虚拟网络配置对应的信息,其它的信息可以删除
配置好后重启 DHCP 服务看看是否正常
可以看到 UDP 67 端口已经起来了
# TFTP And PXE Agent
在核心服务器默认安装目录下 C:\Program Files\LANDesk\ManagementSuite\LANDesk\files
找到 Setup_PXEProxy.exe
安装程序,拷贝到 Windows 11
这台设备上运行安装,查看 C:\Program Files (x86)\LANDesk\PXE
目录大小变化,安装完后应该是在 800M
左右
进入 PXE
下的 System
目录,将 PXESvc.exe
重命名,该程序负责提供 DHCP
服务,由于当前已经有 DHCP
服务器了,所以不需要这台 PXE代表
提供 DHCP
服务
打开系统服务,启动 LANDesk(R) PXE MTFTP Service
服务,并确保 LANDesk(R) PXE Service
服务在停止状态
# EPM 配置
在核心服务器上,查看 PXE
信息中的子网是否已经启用,以及当选设备是否是 Windows 11
这台设备,确认无误即可
# DHCP 测试
首先测试 DHCP
服务器是否能够正常为设备提供 IP 服务,创建一台新的虚拟机,选择 BIOS
启动,并提前在 DHCP
服务器上用 tail -f /var/log/messages
查看系统日志变化
点击开启虚拟机
可以看到客户端能够正常获取到 IP 地址,接下来就是配置 PXE
启动信息了
# 配置 PXE 信息
编辑 dhcpd.conf
配置文件,添加 PXE
启动信息
# A slightly different configuration for an internal subnet. | |
option space PXE; | |
option PXE.mtftp-ip code 1 = ip-address; | |
option PXE.mtftp-cport code 2 = unsigned integer 16; | |
option PXE.mtftp-sport code 3 = unsigned integer 16; | |
option PXE.mtftp-tmout code 4 = unsigned integer 8; | |
option PXE.mtftp-delay code 5 = unsigned integer 8; | |
option arch code 93 = unsigned integer 16; | |
subnet 192.168.80.0 netmask 255.255.255.0 { | |
range 192.168.80.100 192.168.80.250; | |
option routers 192.168.80.2; | |
option broadcast-address 192.168.80.255; | |
default-lease-time 600; | |
max-lease-time 7200; | |
class "pxeclients" { | |
match if substring (option vendor-class-identifier, 0, 9) = "PXEClient"; | |
next-server 192.168.80.204; | |
if option arch = 00:06 { | |
filename "IA32 EFI\UNDI\bstrap\bootia32.0"; | |
} else if option arch = 00:07 { | |
filename "EFI\UNDI\bstrap\bootx64.0"; | |
} else { | |
filename "x86pc\UNDI\provwin\startrom.0"; | |
} | |
} | |
} |
保存后重启 dhcpd
服务,服务不报错应该就没什么大问题
# PXE 启动测试
回到之前新建的虚拟机,重启进入 PXE
启动,看看是否正常
可以看到客户端是能够正常由网卡引导,但是提示 TFTP File not found
当前客户端是 BIOS
启动, vendor class identifier
应该是 arch:00000
, 对应的启动文件是 PXE
代表 TFTP
根目录下的 x86pc\UNDI\provwin\startrom.0
为了验证引导信息是否正确,需要在 PXE
代理主机上安装 Wireshark
抓包分析,安装好后打开 Wireshark
对网卡进行抓包,然后回到客户端重新引导一遍
操作完后停止 Wireshark
,在过滤栏中输入 bootp
查看 dhcp协议
vendor class identifier
信息正常,查看 boot file
信息
王德发,目录符号 "\"
被过滤掉了,难怪引导不了🙃
细想一下,这个会不会是跟 Linux
的特性有关?因为 Linux
的目录符号是 "/"
, 在 DHCP
配置文件更换试试
重启 DHCP
服务器,然后回到客户端重新引导看看
下载失败,继续抓包分析💀
看来不能改变 Windows
的目录符号,重新编辑 DHCP
配置,目录符号使用 "\\"
试试
奈斯,客户端正常引导
抓包查看 boot file name
信息文件路径也显示正常了
关闭虚拟机,测试 UEFI
引导是否正常
开机进入 EIF Network
引导,成功加载 WinPE
系统
查看 Vendor class identifier
和 boot file name
信息正常
Vendor class identifier
显示 Arch:00007
boot file name
是 EFI\UNDI\bstrap\bootx64.0
# 结束语
这次的测试相对简单,重温了一下 DHCP
协议和 PXE
引导原理,虽然 DHCP
的配置还有许多不懂的地方,但是目前我也暂时用不上
总的来说,本次测试运气也比较好,测试过程中并没有碰什么壁,如果当客户端的 Vendor class identifier
和 boot file name
信息正常还是无法引导的话,我就不知道怎么进行下去了,这时候可能需要找厂家支持了,但是我对厂家并不抱太大的希望,因为通常这个东西还是得靠自己,接触 EPM
一年了,有时遇到问题真的会觉得很无助,它不像开源或者免费的产品,遇到问题上网一搜一大堆答案,厂家在国外,我语言不通没法直接跟那边沟通,通过 Email
效率很低,心累,就酱吧!!!🤡🤡🤡