Linux Bridge实践 -- 使用dnsmasq为虚拟机分配IP地址

Linux Bridge是Linux Kernel提供的一种虚拟网络桥接功能,通过bridge-utils提供的brctl命令进行管理。本文将阐述如何将Linux Brige和dnsmasq结合,来为新创建的虚机分配IP地址,并且允许续集通过linux bridge访问外网。


总体的架构图如下:



实现方法如下:

1. 安装bridge-utils软件包

# yum -y install bridge-utils

2. 安装libvirt, virt-install和qemu-kvm软件包,并启动libvirtd

# yum -y install libvirt virt-install qemu-kvm
# systemctl start libvirtd
# systemctl enable libvirtd

3. 创建一个linux bridge,命名为bridge0。打开stp,并且将"bridge forward delay"设置为2秒(很重要,否则虚机在启动过程中将需要很长时间才能获得DHCP响应)。

# brctl addbr bridge0
# brctl stp bridge0 on
# brctl setfd bridge0 2


4. 为bridge0配置一个IP地址,比如10.0.0.1/24

# ifconfig bridge0 10.0.0.1 netmask 255.255.255.0 up

5. 打开IP forward。只有打开,才能让虚机访问外网。

# echo 1 > /proc/sys/net/ipv4/ip_forward

6. 在bridge0上启动一个dnsmasq监听进程,如下:

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

7. 创建一个虚机来测试,命名为vm1。为了简单起见,用cirros作为disk image。需要提前将image文件cirros-0.3.1-x86_64-disk.img上传到/tmp/vm1/下面。这里用到的network就是之前创建的bridge。

# virt-install --connect=qemu:///system --name=vm1 --ram=50 --vcpus=1 --virt-type qemu --disk path=/tmp/vm1/cirros-0.3.1-x86_64-disk.img,format=qcow2 --import --network bridge:bridge0 

可以看到虚拟机在启动过程中通过DHCP获得了IP地址,如下:

Starting network...
udhcpc (v1.20.1) started
Sending discover...
Sending select for 10.0.0.49...
Lease of 10.0.0.49 obtained, lease time 3600

8. 登陆虚拟机,然后ping外网地址,可以ping通。

$ hostname
cirros
$ ping www.baidu.com
PING www.baidu.com (61.135.169.121): 56 data bytes
64 bytes from 61.135.169.121: seq=0 ttl=127 time=23.946 ms
64 bytes from 61.135.169.121: seq=1 ttl=127 time=51.263 ms
64 bytes from 61.135.169.121: seq=2 ttl=127 time=47.491 ms



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章