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