美文网首页
使用dnsmasq搭建DHCP服务

使用dnsmasq搭建DHCP服务

作者: 少阁主_enfj | 来源:发表于2019-04-18 16:44 被阅读0次

    为了模拟一台物理服务器上启动数十台虚拟机的云平台测试环境,需要给这些虚拟机配置相应的IP,这就需要在虚拟交换机侧具有DHCP功能。而现在的OVS并不自带DHCP地址转换功能,查阅了一些资料可以使用dnsmasq搭建一个DHCP服务器,将来自虚拟机的DHCP请求报文全部导入该端口即可。

    dnsmasq本身是一个小巧且方便的用于配置DNS和DHCP的工具,这里我们只使用它的DHCP分配地址池功能。

    安装dnamasq,debian系直接apt安装:

    sudo apt-get install dnsmasq
    

    先在OVS中加入DHCP虚拟设备的端口

    ovs-vsctl add-port br0 qdhcp tag=100 -- set interface qdhcp type=internal
    

    其中的tag设置的是vlan的id。

    下一步,启动该虚拟设备,并配置上地址和掩码:

    ifconfig qdhcp up
    ifconfig qdhcp 192.168.1.1 netmask 255.255.255.0
    

    启动DHCP服务,并关联到上面的虚拟设备

    /usr/sbin/dnsmasq --strict-order --bind-interfaces --except-interface lo \
    --interface qdhcp --dhcp-range 192.168.1.1,192.168.1.200 \
    --dhcp-leasefile=/var/run/dnsmasq/qdhcp.pid --dhcp-lease-max=253 \
    --dhcp-no-override --log-queries --log-facility=/tmp/dnsmasq.log
    

    第一次执行之前记得把/var/run/dnsmasq/文件夹创建了,不然会报错。

    这里比较重要的参数就是创建地址池范围是192.168.1.1~192.168.1.200,即当有DHCP请求来时给它们从这个区间里分配ip地址。

    当想要把一些虚拟机加入到这个DHCP虚拟设备所在的vlan中,需要同样设置好tag。(图中设置的是使用vhostuser端口的虚拟机,其他方式类似)

    ovs-vsctl set port vhost-user-1 tag=100
    

    这样我们建成了一个含有DHCP服务的虚拟网络拓扑,如下图所示:


    一台物理服务器上的虚拟网络拓扑图.png

    最后一个问题是在OVS中配置什么样的规则能够让DHCP的请求和应答按照图中黄色路径所示

    抓包显示,当虚拟机设置为“自动获取ip地址”时,启动后会发送源ip为“0.0.0.0”的请求包,所以我们就可以此为特征设置规则(源ip为0.0.0.0的流量发送到3端口,而答复流量可以直接匹配目的虚拟机的mac):

    ovs-ofctl add-flow br0 "tun_src=0.0.0.0,actions=output:3"
    ovs-ofctl add-flow br0 "dl_dst=00:00:00:00:00:01,actions=output:1"
    

    至此,一个支持DHCP的小型虚拟网络已经设置完了。

    相关文章

      网友评论

          本文标题:使用dnsmasq搭建DHCP服务

          本文链接:https://www.haomeiwen.com/subject/cystgqtx.html