(一)原理
简单说来,PXE服务器就是DHCP服务器+TFTP服务器。网络启动过程大概是这样的(可能并不严谨):客户端发送动态获得IP地址的广播包到网络上,DHCP服务器在收到该广播包后,发送给客户端分配IP地址的回应包,客户端收到回应包后设置自己的IP地址,然后从DHCP服务器获得启动服务器的IP地址(DHCP服务器066选项,这就是TFTP服务器的IP地址)及启动文件名(DHCP服务器067选项,这里的启动文件名就是pxelinux.0或者支持pxe的grub4dos的grldr,当然,也可以是startrom.n12或者使用3com Image Edit创建的pxe启动菜单文件,总之,它应该是一种由pxe启动规范规定的固定格式的可执行文件),然后客户端到联系启动服务器(TFTP服务器)获得启动文件并执行,这样基本上就完成了pxe启动过程。
在Unix或者Linux系统下,DHCP服务器和TFTP服务器一般都是分开设置的,两台服务器甚至可以在两台不同的机器上,其实Windows下的设置也是一样的,但在Windows下,我们可以通过使用HaneWin DHCP服务器软件或TFTPD32一个软件就搞定(我个人推荐使用HaneWin DHCP服务器软件,但TFTPD32设置起来更简单一些,就是效率有些低),详细的设置方法请自己摸索,你只要知道,在设置PXE服务器时,要设置好DHCP和TFTP两个服务器,其中DHCP服务器要设置启动服务器名(066选项)和启动文件名(067选项)。
(二)实验环境
局域网环境:一个IBM刀片机,建设VMware Infrastructure,虚拟一个局域网,里面新建多台虚拟机
服务器:以其中一台172.16.2.96作服务器(dhcp和tftp服务都在它上面), 操作系统是CentOS 5.3
(三)过程
大致流程:
a. 客户端通过网卡的 PXE 功能,从 DHCP 服务器获取 IP 地址;
b. DHCP 服务器将 "filename "pxelinux.0";" 参数中指定的文件(pxelinux.0)推送给客户端;
c. 客户端执行 pxelinux.0;
d. pxelinux.0 程序读取 tftp 服务器上的配置文件(通常是 '''/tftpboot/pxelinux.cfg/default''',
但是也可以根据客户端机器的MAC 地址单独指定);
e. 客户端执行配置文件中指定的动作。
下面详细过程:
1. DHCP服务器
a.先检查系统有没有带DHCP服务器,
#service dhcpd status, 如果显示 "unrecognized service" 话就要安装,否则转到c.
b. 安装dhcp
如果有外网,直接:
#yum install dhcpd
没有外网的话,可以去网上找个rpm包来手动安装(附录有推荐网站)
我下了个dhcp-3.0.5-18.el5.rpm, 安装命令:
#rpm -ivh dhcp-3.0.5-18.el5.rpm
c. 配置
配置服务开机自动运行级别:
# chkconfig --level 345 dhcpd on
配置/etc/dhcpd.conf,我的该文件内容如下,重要的地方有注释:
[c-sharp]
view plain
copy
1. ddns-update-style interim;#最好加上这头两句,我没加,老报错
2. ignore client-updates;
3.
4. allow booting; #可有可无吧
5. allow bootp;
6. next-server 172.16.2.96; #你的tftp服务器IP,我这里是同一台机子
7.
8. subnet 172.16.2.0 netmask 255.255.255.0 {
9. default-lease-time 600;
10. max-lease-time 7200;
11. range 172.16.2.50 172.16.2.70;
12. #option routers 172.16.2.254; #dhcp所在局域网网关,如果你的dhcp与tftp不在同一网段中时,这是必须的
13. "pxelinux/pxelinux.0"; #pxe引导所必须文件, 路径是相对于tftp服务器根目录,详见见3.syslinux
14. }
2. tftp服务器
a. 先检查系统是否安装tftp server.
# rpm -qa | grep xinetd,
# rpm -qa | grep tftp, 如果没有某个包没有,则转到b安装之,否则转到c.
b. 安装xinetd(运行tftp所必须的), tftp-server,建议同时安装tftp客户端(方便调试tftp服务器)
如果有外网,直接:
#yum install xinetd tftp-server tftp
没有外网的话,可以去网上找这三个rpm包来手动安装(附录有推荐网站)
找到后,按顺序用rpm -ivh安装。
c. 配置
配置服务开机自动运行级别:
#chkconfig --level 345 xinetd on
#chkconfig --level 345 tftp on
修改文件: /etc/xinetd.d/tftp,我的文件内容如下:
[c-sharp]
view plain
copy
1. service tftp
2. {
3. socket_type = dgram
4. protocol = udp
5. wait = yes
6. user = root
7. in.tftpd
8. server_args = -v -m /tftpboot/rules -s /tftpboot
9. disable = no
10. per_source = 11
11. cps = 100 2
12. flags = IPv4
13. }
其中:
-v 指定把日志输出到/var/log/messages中,
-m /tftpboot/rules指定一个映射规则文件,把所有的tftp请求文件名按规则转换;
当tftp服务器为linux,无盘站引导windows时,由于大小写敏感问题,需要转换。
-s 指定tftp服务器的根目录,上面pxelinux/pxelinux.0的相对路径就是相对/tftpboot而言
3. syslinux( 这个东西有pxe过程所要用到的引导文件,类似于grub的功能)
a. 可以先检查有没有装这个东西
# rpm -qa | grep syslinux,如果没有转b,否则直接到c.
b. 安装同上面,或者yum install syslinux,或者下载rpm 包手动安装
c. 配置:
主要有三步:
其一、把pxelinux.0复制到/tftpboot的合适位置
其二、在/tftpboot下新建一个pxelinux.cfg目录
其三、在上面新建的pxelinux.cfg下面新建一个名为default的空文件(下一篇介绍其内容)
我的/tftpboot下目录组织如下:
[c-sharp]
view plain
copy
1. /tftpboot/
2. /tftpboot/pxelinux/
3. /tftpboot/pxelinux/pxelinux.0
4. /tftpboot/pxelinux/pxelinux.cfg/
5. /tftpboot/pxelinux/pxelinux.cfg/default
这里/tftpboot/下的目录可以自行组织,但pxeliux.0与pxelinux.cfg应在同一目录下
4. 启动。
[c-sharp]
view plain
copy
1. # service dhcpd start
2. # service xinetd start
(四)常见问题
1. tftp server问题
a.配置好tftp-server后,最好再装个tftp客户端(yum install tftp),分别从本地,别的机子上来
测试tftp-server是否是通的。
b. 如果是手动用rpm包安装的,则要注意这两个包是否是兼容的,有的xinetd不支持tftp中的某些选项
同理,也要注意tftp-server的版本是否支持remap等功能
c. 使用好日志,需要-v选项,日志在/var/log/messages里
d. 如果从外面连不上本机的tftp服务,应该检查防火墙(一般情况开放upd 69端口,除非你另行设定tftp服务端口)
2. dhcp 问题
a. dhcpd.conf中的filename参数,用相对路径(相对于/tftpboot),有的参考资料里是绝对路径,这取决于tftp版本问题,最新的版本应该是相对路径.
(五)附录
1. rpm包下载网站:
http://rpm.pbone.net/ 2. 关于syslinux的配置有很多内容,感兴趣的话,可以参考以下网址:
http://syslinux.zytor.com/wiki/index.php/PXELINUX
(一)原理
简单说来,PXE服务器就是DHCP服务器+TFTP服务器。网络启动过程大概是这样的(可能并不严谨):客户端发送动态获得IP地址的广播包到网络上,DHCP服务器在收到该广播包后,发送给客户端分配IP地址的回应包,客户端收到回应包后设置自己的IP地址,然后从DHCP服务器获得启动服务器的IP地址(DHCP服务器066选项,这就是TFTP服务器的IP地址)及启动文件名(DHCP服务器067选项,这里的启动文件名就是pxelinux.0或者支持pxe的grub4dos的grldr,当然,也可以是startrom.n12或者使用3com Image Edit创建的pxe启动菜单文件,总之,它应该是一种由pxe启动规范规定的固定格式的可执行文件),然后客户端到联系启动服务器(TFTP服务器)获得启动文件并执行,这样基本上就完成了pxe启动过程。
在Unix或者Linux系统下,DHCP服务器和TFTP服务器一般都是分开设置的,两台服务器甚至可以在两台不同的机器上,其实Windows下的设置也是一样的,但在Windows下,我们可以通过使用HaneWin DHCP服务器软件或TFTPD32一个软件就搞定(我个人推荐使用HaneWin DHCP服务器软件,但TFTPD32设置起来更简单一些,就是效率有些低),详细的设置方法请自己摸索,你只要知道,在设置PXE服务器时,要设置好DHCP和TFTP两个服务器,其中DHCP服务器要设置启动服务器名(066选项)和启动文件名(067选项)。
(二)实验环境
局域网环境:一个IBM刀片机,建设VMware Infrastructure,虚拟一个局域网,里面新建多台虚拟机
服务器:以其中一台172.16.2.96作服务器(dhcp和tftp服务都在它上面), 操作系统是CentOS 5.3
(三)过程
大致流程:
a. 客户端通过网卡的 PXE 功能,从 DHCP 服务器获取 IP 地址;
b. DHCP 服务器将 "filename "pxelinux.0";" 参数中指定的文件(pxelinux.0)推送给客户端;
c. 客户端执行 pxelinux.0;
d. pxelinux.0 程序读取 tftp 服务器上的配置文件(通常是 '''/tftpboot/pxelinux.cfg/default''',
但是也可以根据客户端机器的MAC 地址单独指定);
e. 客户端执行配置文件中指定的动作。
下面详细过程:
1. DHCP服务器
a.先检查系统有没有带DHCP服务器,
#service dhcpd status, 如果显示 "unrecognized service" 话就要安装,否则转到c.
b. 安装dhcp
如果有外网,直接:
#yum install dhcpd
没有外网的话,可以去网上找个rpm包来手动安装(附录有推荐网站)
我下了个dhcp-3.0.5-18.el5.rpm, 安装命令:
#rpm -ivh dhcp-3.0.5-18.el5.rpm
c. 配置
配置服务开机自动运行级别:
# chkconfig --level 345 dhcpd on
配置/etc/dhcpd.conf,我的该文件内容如下,重要的地方有注释:
[c-sharp]
view plain
copy
1. ddns-update-style interim;#最好加上这头两句,我没加,老报错
2. ignore client-updates;
3.
4. allow booting; #可有可无吧
5. allow bootp;
6. next-server 172.16.2.96; #你的tftp服务器IP,我这里是同一台机子
7.
8. subnet 172.16.2.0 netmask 255.255.255.0 {
9. default-lease-time 600;
10. max-lease-time 7200;
11. range 172.16.2.50 172.16.2.70;
12. #option routers 172.16.2.254; #dhcp所在局域网网关,如果你的dhcp与tftp不在同一网段中时,这是必须的
13. "pxelinux/pxelinux.0"; #pxe引导所必须文件, 路径是相对于tftp服务器根目录,详见见3.syslinux
14. }
2. tftp服务器
a. 先检查系统是否安装tftp server.
# rpm -qa | grep xinetd,
# rpm -qa | grep tftp, 如果没有某个包没有,则转到b安装之,否则转到c.
b. 安装xinetd(运行tftp所必须的), tftp-server,建议同时安装tftp客户端(方便调试tftp服务器)
如果有外网,直接:
#yum install xinetd tftp-server tftp
没有外网的话,可以去网上找这三个rpm包来手动安装(附录有推荐网站)
找到后,按顺序用rpm -ivh安装。
c. 配置
配置服务开机自动运行级别:
#chkconfig --level 345 xinetd on
#chkconfig --level 345 tftp on
修改文件: /etc/xinetd.d/tftp,我的文件内容如下:
[c-sharp]
view plain
copy
1. service tftp
2. {
3. socket_type = dgram
4. protocol = udp
5. wait = yes
6. user = root
7. in.tftpd
8. server_args = -v -m /tftpboot/rules -s /tftpboot
9. disable = no
10. per_source = 11
11. cps = 100 2
12. flags = IPv4
13. }
其中:
-v 指定把日志输出到/var/log/messages中,
-m /tftpboot/rules指定一个映射规则文件,把所有的tftp请求文件名按规则转换;
当tftp服务器为linux,无盘站引导windows时,由于大小写敏感问题,需要转换。
-s 指定tftp服务器的根目录,上面pxelinux/pxelinux.0的相对路径就是相对/tftpboot而言
3. syslinux( 这个东西有pxe过程所要用到的引导文件,类似于grub的功能)
a. 可以先检查有没有装这个东西
# rpm -qa | grep syslinux,如果没有转b,否则直接到c.
b. 安装同上面,或者yum install syslinux,或者下载rpm 包手动安装
c. 配置:
主要有三步:
其一、把pxelinux.0复制到/tftpboot的合适位置
其二、在/tftpboot下新建一个pxelinux.cfg目录
其三、在上面新建的pxelinux.cfg下面新建一个名为default的空文件(下一篇介绍其内容)
我的/tftpboot下目录组织如下:
[c-sharp]
view plain
copy
1. /tftpboot/
2. /tftpboot/pxelinux/
3. /tftpboot/pxelinux/pxelinux.0
4. /tftpboot/pxelinux/pxelinux.cfg/
5. /tftpboot/pxelinux/pxelinux.cfg/default
这里/tftpboot/下的目录可以自行组织,但pxeliux.0与pxelinux.cfg应在同一目录下
4. 启动。
[c-sharp]
view plain
copy
1. # service dhcpd start
2. # service xinetd start
(四)常见问题
1. tftp server问题
a.配置好tftp-server后,最好再装个tftp客户端(yum install tftp),分别从本地,别的机子上来
测试tftp-server是否是通的。
b. 如果是手动用rpm包安装的,则要注意这两个包是否是兼容的,有的xinetd不支持tftp中的某些选项
同理,也要注意tftp-server的版本是否支持remap等功能
c. 使用好日志,需要-v选项,日志在/var/log/messages里
d. 如果从外面连不上本机的tftp服务,应该检查防火墙(一般情况开放upd 69端口,除非你另行设定tftp服务端口)
2. dhcp 问题
a. dhcpd.conf中的filename参数,用相对路径(相对于/tftpboot),有的参考资料里是绝对路径,这取决于tftp版本问题,最新的版本应该是相对路径.
(五)附录
1. rpm包下载网站:
http://rpm.pbone.net/ 2. 关于syslinux的配置有很多内容,感兴趣的话,可以参考以下网址:
http://syslinux.zytor.com/wiki/index.php/PXELINUX