Dnsmasq、PXE简介

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

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

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所在的domaindhcp-option=3,192.168.88.254                 #  设置默认网关dhcp-option=6,192.168.88.41                   # 设置dns#no-hosts                                                  # 如果不启用本地解析文件(/etc/hosts),就去掉注释#add-hosts=/etc/add_hosts                      # 增加一个文件,类似/etc/hostsexpand-hosts                                             # 将compute1扩展为compute1.trystack.cndomain-needed                                         # 强制使用完全域名#resolv-file=                                              # 添加额外的dns配置文件(/etc/resolv.conf)no-resolv                                                    # 不使用上级DNS#server=/yao.trystack.cn/192.168.88.12    # 给特定的域名指定特定的nameservercache-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指定特定的ipenable-tftp                                                  # 启用tftptftp-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.0drwxr-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 92drwxr-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.cfgdrwxr-xr-x 3 root root 77824 Oct 25 12:19 Packagesdrwxr-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不成功,有可能交换机端口模式配置问题,pxe网段的报文是不能含有vlan tag,详情参考这里:

参考链接