使用dnsmasq搭建DHCP服务

为了模拟一台物理服务器上启动数十台虚拟机的云平台测试环境,需要给这些虚拟机配置相应的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服务的虚拟网络拓扑,如下图所示:


使用dnsmasq搭建DHCP服务_第1张图片
一台物理服务器上的虚拟网络拓扑图.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服务)