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,详情参考这里:
参考链接