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引导流程
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文件。image目录也可以从centos 6.5 min iso中拷贝 total 92 drwxr-xr-x 3 root root 4096 Oct 25 11:23 images -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不成功,有可能交换机端口模式配置问题,pxe网段的报文是不能含有vlan tag,详情参考这里:http://blog.csdn.net/JesseYoung/article/details/40047749
参考链接
http://debugo.com/dnsmasq/