OpenvSwitch簡稱OVS,官網(http://openvswitch.org/) OVS是一個高質量、多層的虛擬交換軟件,即虛擬交換機。
OpenvSwitch的見的相關組件:
ovs-vswitchd:實現switch的daemon功能,包括一個支持流交換的Linux內核模塊,實現了交換功能
ovsdb-vswtich: openvswitch的數據庫,給ovs-vswitchd提供運行配置信息,即保存了ovs-vswitchd的配置信息,例如vlan、port等信息
ovs-vsctl:查詢和更新ovs-vswitchd的配置,即用於修改或查詢ovsdb-vswitch的信息
還有些組件此處不做介紹
接下來我們來做一個實驗,利用GRE通道搭建一個跨多宿主機的虛擬化網絡,環境centos6.7 拓撲圖如下

1)修改內核參數(一定要先修改內核參數,若果配置了網絡名稱空間在配置內核參數,內核參數將不會生效)
net.ipv4.ip_forward = 1 \\啟用內核轉發功能
net.ipv4.conf.default.rp_filter = 0 \\關閉路由驗證
/etc/init.d/iptables stop \\關閉防火牆
setenforce 0 \\關閉Selinux
2)准備yum源
[openswitch]
name= openswitch
baseurl=https://repos.fedorapeople.org/openstack/EOL/openstack-icehouse/epel-6/
enabled=1
gpgcheck=0
yum install openvswitch \\兩台宿主機都要安裝 啟動openvswitch: service openvswitch start
yum update iproute \\更新iproute軟件
ip netns add A1 \\創建A1網絡名稱空間
ip netns add B1 \\創建B1網絡名稱空間
ip netns show \\查看創建的玩兩個名稱空間
ovs-vsctl add-br br1 \\使用openvswitch創建br1橋設備
ovs-vsctl add-br br2 \\使用openvswitch創建br2橋設備
ovs-vsctl add-br br3 \\使用openvswitch創建br3橋設備
ovs-vsctl show \\查看創建的橋設備
ip link add name a1.1 type veth peer name a1.2 \\創建一對端口,用於連接A1網絡名稱空間跟br2橋設備
ip link set a1.1 up \\激活a1.1端口
ip link set a1.2 up \\激活a1.2端口
ip link add name b1.1 type veth peer name b1.2 \\創建一對端口,用於連接B1網絡名稱空間與br3橋設備
ip link set b1.2 up \\激活b1.2端口
ip link set b1.1 up \\激活b1.1端口
ip link add name b12.1 type veth peer name b12.2 \\創建一對端口,用於連接br2與br1橋設備
ip link set b12.1 up \\激活b12.1端口
ip link set b12.2 up \\激活b12.2端口
ip link add name b13.1 type veth peer name b13.2 \\創建一對端口,用於連接br3與br1橋設備
ip link set b13.1 up \\激活b13.1端口
ip link set b13.2 up \\激活b13.2端口
ip link add name b23.1 type veth peer name b23.2 \\創建一對端口,用於連接br2與br3橋設備
ip link set b23.1 up \\激活b23.1端口
ip link set b23.2 up \\激活b23.2端口
ovs-vsctl add-port br2 a1.1 \\把a1.1端口加入到br2橋設備上
ip link set a1.2 netns A1 \\把a1.2端口添加到A1網絡名稱空間,要注意,a1.2添加到網絡名稱空間后不會在本地顯示
ovs-vsctl add-port br3 b1.1 \\把b1.1端口加入到br3橋設備上
ip link set b1.2 netns B1 \\把b1.2端口加入到B1網絡名稱空間
ovs-vsctl add-port br2 b23.2 \\把b23.2端口加入到br2橋設備上
ovs-vsctl add-port br3 b23.1 \\把b23.1加入到br3橋設備上
ip netns exec A1 ip link set a1.2 up
ip netns exec A1 ip addr add 192.168.10.1/24 dev a1.2
ip netns exec A1 ifconfig \\查看配置的ip地址
ip netns exec B1 ip link set b1.2 up
ip netns exec B1 ip addr add 192.168.10.2/24 dev b1.2
ip netns exec B1 ifconfig \\查看配置的ip地址
ip netns exec B1 ping 192.168.10.1 \\在B1網絡名稱空間可以ping通A1網絡名稱空間
64 bytes from 192.168.10.1: icmp_seq=1 ttl=64 time=2.66 ms
ip netns exec A1 ping 192.168.10.2 \\在A1網絡名稱空間可以ping通B1網絡名稱空間
64 bytes from 192.168.10.2: icmp_seq=1 ttl=64 time=1.52 ms
ovs-vsctl add-port br1 b12.2 \\添加b12.2端口到br1橋設備上
ovs-vsctl add-port br1 b13.2 \\添加b13.2端口到br1橋設備上
ovs-vsctl add-port br2 b12.1 \\添加b12.1端口到br2橋設備上
ovs-vsctl add-port br3 b13.1 \\添加b13.1端口到br3橋設備上
ovs-vsctl set Bridge br1 stp_enable=true \\為了防止br1、br2、br3橋設備產生環路,開啟stp協議
ovs-vsctl set Bridge br2 stp_enable=true \\為了防止br1、br2、br3橋設備產生環路,開啟stp協議
ovs-vsctl set Bridge br3 stp_enable=true \\為了防止br1、br2、br3橋設備產生環路,開啟stp協議
ovs-vsctl add-port br1 GRE \\宿主機的br1橋設備上添加一個用於GRE封裝的端口
ovs-vsctl set Interface GRE type=gre options:remote_ip=192.168.204.132
上面的步驟在node4上做一遍,最后一步的地址改為192.168.204.131
測試兩台宿主機之間網絡名稱空間的連通性
[root@node3 ~]# ip netns exec B1 ping 192.168.10.10
64 bytes from 192.168.10.10: icmp_seq=1 ttl=64 time=3.59 ms
[root@node4 ~]# ip netns exec A2 ping 192.168.10.1
64 bytes from 192.168.10.1: icmp_seq=1 ttl=64 time=6.75 ms
在node4宿主機上ping node3宿主機上的網絡名稱空間,在node3宿主機上抓包分析
[root@node3 ~]# tcpdump -nn -i eth1
10:15:38.768203 IP 10.10.10.1 > 10.10.10.2: GREv0, length 56: STP 802.1d, Config, Flags [none], bridge-id 8000.a2:49:24:81:6e:46.8001, length 35
通過以上數據轉發,會發現數據是經過GRE轉發的
[root@node3 ~]# ip netns exec A1 tcpdump -nn icmp -i a1.2
10:18:29.352487 IP 192.168.10.10 > 192.168.10.1: ICMP echo request, id 7211, seq 1, length 64
利用vxlan通道建一個跨多宿主機的虛擬化網絡,環境centos6.7 拓撲圖如下
步驟與gre的相同但最后一步變成了 ovs-vsctl set Interface vxlan type=vxlan options:remote_ip=192.168.204.131
在node4宿主機上ping node3宿主機上的網絡名稱空間,在node3宿主機上抓包分析
[root@node3 ~]# tcpdump -nn -i eth1
10:34:12.799191 IP 10.10.10.1.58588 > 10.10.10.2.4789: UDP, length 60
通過以上數據分析,可以發現vxlan利用udp封裝數據報文將兩台宿主機之前的虛擬網絡打通
