Dabai的个人博客

PXE服务和Cisco路由器上的DHCP配置

预启动执行环境(Preboot eXecution Environment,PXE,也被称为预执行环境)提供了一种使用网络接口(Network Interface)启动计算机的机制,这种机制让计算机的启动可以不依赖本地数据存储设备(如硬盘)或本地已安装的操作系统。

PXE及其协议概述

PXE当初是作为Intel的有线管理体系的一部分,Intel 和 Systemsoft于1999年9月20日公布其规格(版本2.1)。通过使用像网际协议(IP)、用户数据报协议(UDP)、动态主机设定协定(DHCP)、小型文件传输协议(TFTP)等几种网络协议和全局唯一标识符(GUID)、通用网络驱动接口(UNDI)、通用唯一识别码(UUID)的概念并通过对客户机(通过PXE自检的电脑)固件扩展预设的API来实现目的。

PXE 协议大致上结合了DHCP和TFTP,虽然都有在两者上面有改进。DHCP用于查找合适的启动服务器,TFTP用于下载初始引导程序和附加文件。为了开始一个PXE自检会话,PXE固件广播一个带有明确的PXE选项DHCPDISCOVER包(扩展DHCPDISCOVER)到67/UDP端口(DHCP服务器端口)。PXE选项是PXE固件有PXE能力的鉴定,但是会被一般的DHCP服务忽略。当固件受到从这样的服务受到DHCPOFFER包时,它会通过要求其提供配置信息来自我配置。

搭建PXE网络启动的服务

当经常需要系统恢复或系统安装时,搭建PXE网络启动服务是一个不错的选择。如何搭建PXE网络服务,在这里就不详细赘述,具体参考:

实际上,PXE网络启动服务就是DHCP服务器给客户系统分配IP地址以及客户系统通过TFTP获取服务器上的镜像文件的过程。因此,建立好TFTP服务后,DHCP服务器还要告知无盘启动的系统TFTP服务器的IP地址镜像文件的名称

DHCP作为引导启动协议bootp的升级版,仍然兼容boop协议,而bootp协议在设计之初就是为了使无盘启动的系统分配到ip并获得tftp服务器的镜像文件。bootp协议包的next-serverfilename字段就是告知客户系统TFTP镜像服务的地址和镜像名称的过程。

Cisco路由器上PXE网络启动的DHCP配置

当前小编的公网环境已经支持PXE网络启动,只是小编的网络是一段使用了NAPT的内网,IP地址由Cisco路由器DHCP分配。因此,若要使用公网的PXE服务,需要在本地的DHCP服务器上引导PXE服务的镜像和地址。下面是Cisco路由器的相关配置:

1
2
3
4
5
ip dhcp pool vlan-name
network net-address netmask
bootfile filename
next-server tftp-address
default-router gateaway

用wireshark抓DHCP Reply的包,就会发现next-server和bootfile相关字段的内容。

Troubleshooting

使用PXE启动时,发现有些设备会出现这样的错误:”PXE-E51 No DHCP or proxy DHCP offers were found or received” or “No proxy DHCP offers”,而使用笔记本连接在该设备所在的端口下时,能够正常启动。 这是因为一些网卡直到 MAC 层软件驱动被实际加载之后才会启动链路,而交换设备为了避免环路运行了STP协议,一个正常的交换接口从down到up要经过:Down,listening,learning,fowarding几个状态,一共耗时为30~50秒,从而决定此端口是blocking还是fowarding的,也是交换机的防止环路的机制。因此在dhcp过程中会出现超时现象。

解决这个问题的办法是将连接host的交换机端口设置为portfast状态,使得链路up时交换机端口直接进入forwarding状态,从而避免超时。基本配置方法如下:

1
Sw1(config)#spanning-tree portfast default %(所有接口启用)全局下用

一般用在接入层的交换机上。

1
2
Sw1(config-if)#spanning-tree portfast %单独启用特定接口
Sw1(config-if)#spanning-tree portfast disable %(某个端口禁用,通常是连接另一台交换机的端口)

关于portfast的详细信息参考如下连接: