Open vSwitch实践 -- 利用dnsmasq为虚机分配IP地址
来源:互联网 发布:起点09服饰淘宝店 编辑:程序博客网 时间:2024/06/03 14:06
OpenStack里的所创建虚机的虚拟网卡都会先attach到一个linux bridge(主要是为了通过iptable实现安全组),然后再attach到集成网桥(br-int)上,并通过网络节点上attach到br-int的dhcp tap设备获得IP地址。这里我们通过纯手工的方式模拟一下这个过程,为了简单起见,我们将排除linux bridge和namespace的影响,将虚拟网卡和dhcp设备直接attach到同一个主机的br-int上,如下图所示:
其中,VM1和VM2的虚机网卡的名字分别叫做tap1和tap2。DHCP设备的名字叫tap-qdhcp。
下面是详细的实现过程:
1. 安装并启动Open vSwitch。
# yum -y install openvswitch# systemctl start openvswitch# systemctl enable openvswitch
2. 创建集成网桥br-int。
# ovs-vsctl add-br br-int
3. 将DHCP设备tap-qdhcp添加到br-int。注意一定要加上"-- set Interface tap-qdhcp type=internal",否则命令会报错找不到tap-qdhcp设备。
# ovs-vsctl add-port br-int tap-qdhcp -- set Interface tap-qdhcp type=internal
4. 为tap-qdhcp配置IP地址
# ifconfig tap-qdhcp 10.0.0.1 netmask 255.255.255.0 up# ifconfig tap-qdhcptap-qdhcp: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.0.0.1 netmask 255.255.255.0 broadcast 10.0.0.255 inet6 fe80::2c37:27ff:fe72:e296 prefixlen 64 scopeid 0x20<link> ether 2e:37:27:72:e2:96 txqueuelen 0 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 10 bytes 732 (732.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
5. 安装dnsmasq,并在tap-qdhcp上启动一个dnsmasq的监听,dnsmasq负责监听并响应dhcp请求。
# yum install dnsmasq# mkdir /var/run/dnsmasq/# /usr/sbin/dnsmasq --strict-order --bind-interfaces --except-interface lo --interface tap-qdhcp --dhcp-range 10.0.0.10,10.0.0.100 --dhcp-leasefile=/var/run/dnsmasq/tap-qdhcp.pid --dhcp-lease-max=253 --dhcp-no-override --log-queries --log-facility=/tmp/dnsmasq.log# ps -ef|grep dnsmasqnobody 1196 1 0 18:04 ? 00:00:00 /usr/sbin/dnsmasq --strict-order --bind-interfaces --except-interface lo --interface tap-qdhcp --dhcp-range 10.0.0.10,10.0.0.100 --dhcp-leasefile=/var/run/dnsmasq/tap-qdhcp.pid --dhcp-lease-max=253 --dhcp-no-override --log-queries --log-facility=/tmp/dnsmasq.log
6. 安装libvirt, virt-install, qemu-kvm,并启动libvirtd
# yum -y install libvirt virt-install qemu-kvm# systemctl start libvirtd# systemctl enable libvirtd
7. 用virt-install创建两个虚机,分别命名为vm1和vm2。为了简单起见,用cirros作为disk image。需要提前将image文件cirros-0.3.1-x86_64-disk.img上传到/tmp/vm1/和/tmp/vm2/下面。这里用到的network就是安装libvirt时自动创建的网络default。
# 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 network:default# virt-install --connect=qemu:///system --name=vm2 --ram=50 --vcpus=1 --virt-type qemu --disk \path=/tmp/vm2/cirros-0.3.1-x86_64-disk.img,format=qcow2 --import --network network:default# virsh list --all Id 名称 状态---------------------------------------------------- 3 vm1 running 4 vm2 running
8. 为了让新创建的vm1和vm2使用br-int,需要对两个虚机的配置文件进行重新编辑:
首先停止两个虚机:
# virsh destroy vm1# virsh destroy vm2
然后编辑/etc/libvirt/qemu/vm1.xml,原始的需要替换的部分如下:
<interface type='network'> <mac address='52:54:00:99:81:00'/> <source network='default'/> <model type='rtl8139'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface>最终需要将其替换为如下内容:
<interface type='bridge'> <source bridge='br-int'/> <virtualport type='openvswitch'/> <target dev='tap1'/> <model type='virtio'/> </interface>然后对/etc/libvirt/qemu/vm2.xml做同样修改,修改后的内容片段如下:
<interface type='bridge'> <source bridge='br-int'/> <virtualport type='openvswitch'/> <target dev='tap2'/> <model type='virtio'/> </interface>
9. 使用修改后的虚机配置文件来重新定义虚机
首先将vm1.xml和vm2.xml拷贝到/tmp/下面:
# cp /etc/libvirt/qemu/vm1.xml /tmp/# cp /etc/libvirt/qemu/vm2.xml /tmp/删除之前创建的旧的虚机的定义:
# virsh undefine vm1# virsh undefine vm2将/tmp/vm1.xml和/tmp/vm2.xml拷贝回/etc/libvirt/qemu:
# cp /tmp/vm*.xml /etc/libvirt/qemu/使用新的配置文件重新定义虚机:
# virsh define /etc/libvirt/qemu/vm1.xml# virsh define /etc/libvirt/qemu/vm2.xml
10. 启动虚拟机,可以在console上看到在启动过程中得到了dhcp分配的IP地址,如下:
# virsh start vm1 --console......Starting network...udhcpc (v1.20.1) startedSending discover...Sending select for 10.0.0.92...Lease of 10.0.0.92 obtained, lease time 3600# virsh start vm2 --console......Starting network...udhcpc (v1.20.1) startedSending discover...Sending select for 10.0.0.42...Lease of 10.0.0.42 obtained, lease time 3600
11. 登陆vm1,可以能够ping通vm2
# ifconfig eth0eth0 Link encap:Ethernet HWaddr 52:54:00:E2:05:18 inet addr:10.0.0.92 Bcast:10.0.0.255 Mask:255.255.255.0 inet6 addr: fe80::5054:ff:fee2:518/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:29 errors:0 dropped:0 overruns:0 frame:0 TX packets:31 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:3002 (2.9 KiB) TX bytes:2754 (2.6 KiB)# ping 10.0.0.42PING 10.0.0.42 (10.0.0.42): 56 data bytes64 bytes from 10.0.0.42: seq=0 ttl=64 time=1.359 ms64 bytes from 10.0.0.42: seq=1 ttl=64 time=2.026 ms64 bytes from 10.0.0.42: seq=2 ttl=64 time=2.949 ms
12. 查看OVS的配置,可以看到tap1, tap2和tap-qdhcp都attach到br-int上,如下:
# ovs-vsctl show4daab0dc-86dc-4b09-b7c2-e93ba990166a Bridge br-int Port "tap2" Interface "tap2" Port br-int Interface br-int type: internal Port tap-qdhcp Interface tap-qdhcp type: internal Port "tap1" Interface "tap1" ovs_version: "2.4.0"
- Open vSwitch实践 -- 利用dnsmasq为虚机分配IP地址
- Linux Bridge实践 -- 使用dnsmasq为虚拟机分配IP地址
- 整合Open vSwitch与DNSmasq为虚拟机提供DHCP功能
- OpenWRT实践4:Open vSwitch
- 基于 Open vSwitch 的 OpenFlow 实践
- 基于 Open vSwitch 的 OpenFlow 实践
- 基于 Open vSwitch 的 OpenFlow 实践
- 基于open vSwitch,floodlight的openflow实践
- 基于 Open vSwitch 的 OpenFlow 实践
- 基于 Open vSwitch 的 OpenFlow 实践
- 基于 Open vSwitch 的 OpenFlow 实践
- 基于 Open vSwitch 的 OpenFlow 实践
- 基于 Open vSwitch 的 OpenFlow 实践
- CentOS7上实践Open vSwitch+VXLAN
- 基于 Open vSwitch 的 OpenFlow 实践
- 基于 Open vSwitch 的 OpenFlow 实践
- 基于 Open vSwitch 的 OpenFlow 实践
- Open vSwitch
- UI - UITableView 编辑 、TableViewController
- ESXi集群配置一例(HP C7000+DELL EQlogic+HUAWEI 6700)
- 前端开发面试题——HTML篇
- xml实现多标签页面
- vs调试gdb
- Open vSwitch实践 -- 利用dnsmasq为虚机分配IP地址
- vim常用配置
- CSS3特效:2D转换&小案例
- iOS退出app(如何退出App之前唤醒另一个App?)
- 一些脚本工具
- Android:onNewIntent()触发机制及注意事项
- #Objective - C - Eighth-day 内存管理总结
- Oracle PLSQL Developer安装配置
- myeclipse安装后要做的几件事