Dnsmasq、PXE简介

dnsmasq是一个小巧轻量的工具,可用于配置dns、dhcp、tftp,适用于小型网络。

PXE(preboot execute environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统,在启动过程中,终端要求服务器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)协议下载一个启动软件包到本机内存中执行,由这个启动软件包完成终端(客户?)基本软件设置,从而引导预先安装在服务器中的终端操作系统。PXE可以引导多种操作系统,如:Windows95/98/2000/windows2003/windows2008/winXP/win7/win8,linux等。(来自百度百科: http://baike.baidu.com/view/1063934.htm)


PXE引导流程

pxe整合dnsmasq_pxe

1  PXE Client向UDP 67端口广播DHCPDISCOVER信息

2  DHCP Server收到广播信息后,发送DHCPOFFER(包括ip地址)信息到PXE Client的68端口

3  PXE Client发送DHCPREQUEST信息到DHCP Server,索取bootstrap文件路径(其实就是pxelinux.0文件,该文件一般放在TFTP服务器上)

4  DHCP Server发送DHCPACK(包含bootstrap文件路径)信息到PXE Client

5  PXE Client向TFTP Server索取pxelinux.0可执行文件

6  PXE Client从TFTP Server下载pxelinux.0可执行文件,并执行该文件。pxelinux.0会读取pxelinux.cfg/default配置文件,根据pxelinux.0的执行结果,通过TFTP服务器加载内核和文件系统


Dnsmasq配置

[root@pxe ~]# yum install -y dnsmasq syslinux   # 安装所需包
[root@pxe ~]# vim /etc/dnsmasq.conf   # 一些dnsmasq的关键配置
#interface=eth0                         # 监听接口,可以不止一个
listen-address=192.168.88.41,127.0.0.1  # 监听地址
dhcp-range=192.168.88.160,192.168.88.170,infinite    # dhcp分配地址范围、租期  
dhcp-host=00:0C:29:F6:07:CA,192.168.88.165,compute1   # 静态绑定
dhcp-host=00:0C:29:5E:F2:3F,192.168.1.202,test1         # 静态绑定
#dhcp-host=judge                                     # 通过/etc/hosts来分配对应的hostname
#dhcp-host=00:0C:29:5E:F2:3F,ignore          # 忽略这个mac地址的dhcp请求
#dhcp-lease-max=150                                  # 默认租期
#dhcp-leasefile=/var/lib/dnsmasq/dnsmasq.leases      # 租期配置文件
domain=trystack.cn                                   #  dhcp所在的domain
dhcp-option=3,192.168.88.254                 #  设置默认网关
dhcp-option=6,192.168.88.41                   # 设置dns
#no-hosts                                                  # 如果不启用本地解析文件(/etc/hosts),就去掉注释
#add-hosts=/etc/add_hosts                      # 增加一个文件,类似/etc/hosts
expand-hosts                                             # 将compute1扩展为compute1.trystack.cn
domain-needed                                         # 强制使用完全域名
#resolv-file=                                              # 添加额外的dns配置文件(/etc/resolv.conf)
no-resolv                                                    # 不使用上级DNS
#server=/yao.trystack.cn/192.168.88.12    # 给特定的域名指定特定的nameserver
cache-size=500                                          # 设置dns缓存大小
log-queries                                                 
#log-dhcp                                                   # 记录额外的dhcp事务
log-facility=/var/log/dnsmasq.log             # log记录
log-async=20                                              # 异步日志,提升性能
#address=/yao.trystack.cn/192.168.88.165   # 给特定的domain指定特定的ip
enable-tftp                                                  # 启用tftp
tftp-root=/usr/local/tftpboot                                # tftp目录路径
dhcp-boot=pxelinux.0                                         # bootstrap启动程序
dns常用排错命令: nslookup  dig
[root@pxe ~]# ll /usr/local/tftpboot/    # 这是我的tftp服务器根目录,可以从centos 6.5 min iso中拷贝
total 37008
-rw-r--r-- 1 root root      989 Oct 25 11:22 boot.msg
-rw-r--r-- 1 root root 33392971 Oct 25 11:22 initrd.img
-rw-r--r-- 1 root root    61056 Oct 25 11:22 menu.c32
-rw-r--r-- 1 root root    26595 Oct 25 11:22 pxelinux.0
drwxr-xr-x 2 root root     4096 Oct 25 17:22 pxelinux.cfg
-rw-r--r-- 1 root root   103203 Oct 25 11:22 splash.png
-rw-r--r-- 1 root root      282 Oct 25 11:46 stdmenu.cfg
-rw-r--r-- 1 root root   162988 Oct 25 11:22 vesamenu.c32
-rw-r--r-- 1 root root  4128368 Oct 25 11:22 vmlinuz

[root@pxe ~]# ll /var/www/html/repo/                               # 这是我的Package文件路径,还有ks文件。p_w_picpath目录也可以从centos 6.5 min iso中拷贝
total 92
drwxr-xr-x 3 root root  4096 Oct 25 11:23 p_w_picpaths
-rw-r--r-- 1 root root  7064 Oct 25 16:38 ks.cfg
drwxr-xr-x 3 root root 77824 Oct 25 12:19 Packages
drwxr-xr-x 2 root root  4096 Oct 25 16:06 repodata
[root@pxe repo]# vim /usr/local/tftpboot/pxelinux.cfg/default      # 看下pxe读取的default配置文件
default vesamenu.c32                      # 使用 vesamenu.c32文本界面程序             
prompt 1                                          # 显示"boot"提示符,值为0则不显示,会直接启动default文件中配置参数指定的内容。
menu title Pxe boot of 99cloud       #  全局的大标题
timeout 100                          # 超时时间10秒,单位是0.1秒
display boot.msg                  # 显示boot.msg文件的内容
include stdmenu.cfg              # 菜单配置文件包含进来
label 0
  menu label Boot on local hard   # 小标题
  menu default                        # 默认本地硬盘启动
  localboot 0                            # 使用本机设备开机的一个特殊用法,不管事光盘、硬盘、软盘都使用这个就对了
label 1 
  menu label Boot to icehouse on eth   # 小标题
  kernel vmlinuz                       # 指定要启动的内核
  append initrd=initrd.img biosdevname=0 ksdevice=eth0 ks=http://192.168.88.41/repo/ks.cfg   # 指定要给内核追加的参数,在grub适用的,在这里也适用。


注:kickstart文件可以通过system-config-kickstart图形化界面来配置,ksvalidator命令可以检查kickstart文件的语法

yum install -y system-config-kickstart  # 需要安装system-config-kickstart包


客户端服务器PXE启动测试

pxe整合dnsmasq_pxe_02

就到这里了!


这里需要注意的是,如果pxe不成功,有可能交换机端口模式配置问题,pxe网段的报文是不能含有vlan tag,详情参考这里:http://blog.csdn.net/JesseYoung/article/details/40047749



参考链接

http://debugo.com/dnsmasq/