推薦-虛擬化網絡之OpenvSwitch(二)

上一篇介紹了openvswitch的基礎知識,接下來我們來做一個實驗,利用GRE通道搭建一個跨多宿主機的虛擬化網絡,深入了解openvswitch的功能。

一、實驗拓撲

wKioL1bw6gPRmMTJAABl48x-2T4926.png

ip地址分配:

 A1:192.168.10.1/24

 A2:192.168.10.10/24 

 B1:192.168.10.2/24

 B2:192.168.10.20/24

 eth1:10.10.10.1/24(圖左)

 eth1:10.10.10.2/24(圖右)

操作系統:

 CentOS6.6x86_64

二、實驗步驟

 1)修改內核參數(一定要先修改內核參數,若果配置了網絡名稱空間在配置內核參數,內核參數將不會生效)

net.ipv4.ip_forward = 1 \\啟用內核轉發功能
net.ipv4.conf.all.rp_filter = 0  \\關閉路由驗證
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

 3)安裝openvswitch

# yum install openvswitch \\兩臺宿主機都要安裝

 4)啟動openvswitch

# /etc/init.d/openvswitch start
Starting ovsdb-server                  [  OK  ] \\啟動openvswitch數據庫
Configuring Open vSwitch system IDs         [  OK  ] \\配置openvswitch的id
Starting ovs-vswitchd                 [  OK  ] \\啟動openvswitch服務 
Enabling remote OVSDB managers           [  OK  ] \\啟用openvswitch的遠程管理

 5)更新iproute軟件包,我們用來創建網絡名稱空間

# yum update iproute  \\更新iproute軟件
# rpm -q iproute     \\查看更新之后的iproute軟件是否帶有netns后綴,如果沒有,需要重新更新
iproute-2.6.32-130.el6ost.netns.2.x86_64

 6)配置node3宿主機的虛擬網絡

[root@node3 ~]# ip netns add A1  \\創建A1網絡名稱空間
[root@node3 ~]# ip netns add B1  \\創建B1網絡名稱空間
[root@node3 ~]# ip netns show    \\查看創建的玩兩個名稱空間
A1
B1
[root@node3 ~]# ovs-vsctl add-br br1  \\使用openvswitch創建br1橋設備
[root@node3 ~]# ovs-vsctl add-br br2  \\使用openvswitch創建br2橋設備
[root@node3 ~]# ovs-vsctl add-br br3  \\使用openvswitch創建br3橋設備
[root@node3 ~]# ovs-vsctl show   \\查看創建的橋設備
a6979a5b-bf54-48ac-b725-9beaa9be6c10
    Bridge "br2"
        Port "br2"
            Interface "br2"
                type: internal
    Bridge "br1"
        Port "br1"
            Interface "br1"
                type: internal
    Bridge "br3"
        Port "br3"
            Interface "br3"
                type: internal
    ovs_version: "2.1.3"
[root@node3 ~]# ip link add name a1.1 type veth peer name a1.2 \\創建一對端口,用于連接A1網絡名稱空間跟br2橋設備
[root@node3 ~]# ip link set a1.1 up  \\激活a1.1端口
[root@node3 ~]# ip link set a1.2 up   \\激活a1.2端口
[root@node3 ~]# ip link add name b1.1 type veth peer name b1.2 \\創建一對端口,用于連接B1網絡名稱空間與br3橋設備
[root@node3 ~]# ip link set b1.2 up   \\激活b1.2端口
[root@node3 ~]# ip link set b1.1 up   \\激活b1.1端口
[root@node3 ~]# ip link add name b12.1 type veth peer name b12.2  \\創建一對端口,用于連接br2與br1橋設備
[root@node3 ~]# ip link set b12.1 up  \\激活b12.1端口
[root@node3 ~]# ip link set b12.2 up   \\激活b12.2端口
[root@node3 ~]# ip link add name b13.1 type veth peer name b13.2 \\創建一對端口,用于連接br3與br1橋設備
[root@node3 ~]# ip link set b13.1 up  \\激活b13.1端口
[root@node3 ~]# ip link set b13.2 up   \\激活b13.2端口
[root@node3 ~]# ip link add name b23.1 type veth peer name b23.2 \\創建一對端口,用于連接br2與br3橋設備
[root@node3 ~]# ip link set b23.1 up  \\激活b23.1端口
[root@node3 ~]# ip link set b23.2 up   \\激活b23.2端口
[root@node3 ~]# ovs-vsctl add-port br2 a1.1  \\把a1.2端口加入到br2橋設備上
[root@node3 ~]# ip link set a1.2 netns A1  \\把a1.2端口添加到A1網絡名稱空間,要注意,a1.2添加到網絡名稱空間后不會再本地顯示
[root@node3 ~]# ovs-vsctl add-port br3 b1.1  \\把b1.1端口加入到br3橋設備上
[root@node3 ~]# ip link set b1.2 netns B1    \\把b1.2端口加入到B1網絡名稱空間
[root@node3 ~]# ovs-vsctl add-port br2 b23.2     \\把b23.2端口加入到br2橋設備上
[root@node3 ~]# ovs-vsctl add-port br3 b23.1     \\把b23.1加入到br3橋設備上
[root@node3 ~]# ip netns exec A1  ip link set a1.2 up    \\把添加到A1網絡名稱空間的網卡激活
[root@node3 ~]# ip netns exec A1  ip addr add 192.168.10.1/24 dev a1.2  \\給A1網絡名稱空間配置一個ip地址
[root@node3 ~]# ip netns exec A1 ifconfig \\查看配置的ip地址
a1.2      Link encap:Ethernet  HWaddr 2A:1F:79:47:7D:DC  
          inet addr:192.168.10.1  Bcast:0.0.0.0  Mask:255.255.255.0
          inet6 addr: fe80::281f:79ff:fe47:7ddc/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:6 errors:0 dropped:0 overruns:0 frame:0
          TX packets:12 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:468 (468.0 b)  TX bytes:936 (936.0 b)
[root@node3 ~]# ip netns exec B1 ip link set b1.2 up    \\把添加到B1網絡名稱空間的端口激活
[root@node3 ~]# ip netns exec B1 ip addr add 192.168.10.2/24 dev b1.2 \\激活之后配置ip地址
[root@node3 ~]# ip netns exec B1 ifconfig    \\查看配置的ip地址
b1.2      Link encap:Ethernet  HWaddr BA:E8:B0:20:1C:05  
          inet addr:192.168.10.2  Bcast:0.0.0.0  Mask:255.255.255.0
          inet6 addr: fe80::b8e8:b0ff:fe20:1c05/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:6 errors:0 dropped:0 overruns:0 frame:0
          TX packets:12 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:468 (468.0 b)  TX bytes:936 (936.0 b)
[root@node3 ~]# ip netns exec B1  ping 192.168.10.1  \\在B1網絡名稱空間可以ping通A1網絡名稱空間
PING 192.168.10.1 (192.168.10.1) 56(84) bytes of data.
64 bytes from 192.168.10.1: icmp_seq=1 ttl=64 time=2.66 ms
64 bytes from 192.168.10.1: icmp_seq=2 ttl=64 time=0.051 ms
64 bytes from 192.168.10.1: icmp_seq=3 ttl=64 time=0.054 ms
[root@node3 ~]# ip netns exec A1  ping 192.168.10.2   \\在A1網絡名稱空間可以ping通B1網絡名稱空間
PING 192.168.10.2 (192.168.10.2) 56(84) bytes of data.
64 bytes from 192.168.10.2: icmp_seq=1 ttl=64 time=1.52 ms
64 bytes from 192.168.10.2: icmp_seq=2 ttl=64 time=0.075 ms
[root@node3 ~]# ovs-vsctl add-port br1 b12.2    \\添加b12.2端口到br1橋設備上
[root@node3 ~]# ovs-vsctl add-port br1 b13.2     \\添加b13.2端口到br1橋設備上
[root@node3 ~]# ovs-vsctl add-port br2 b12.1      \\添加b12.1端口到br2橋設備上
[root@node3 ~]# ovs-vsctl add-port br3 b13.1       \\添加b13.1端口到br3橋設備上 
[root@node3 ~]# ovs-vsctl set Bridge br1 stp_enable=true \\為了防止br1、br2、br3橋設備產生環路,開啟stp協議
[root@node3 ~]# ovs-vsctl set Bridge br2 stp_enable=true  \\為了防止br1、br2、br3橋設備產生環路,開啟stp協議
[root@node3 ~]# ovs-vsctl set Bridge br3 stp_enable=true   \\為了防止br1、br2、br3橋設備產生環路,開啟stp協議

 7)配置node4宿主機的虛擬網絡

修改內核信息
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0

# /etc/init.d/iptables stop \\關閉防火墻
# setenforce 0  關閉SElinux
創建網橋
[root@node4 ~]# ovs-vsctl add-br br1
[root@node4 ~]# ovs-vsctl add-br br2
[root@node4 ~]# ovs-vsctl add-br br3
創建網絡名稱空間
[root@node4 ~]# ip netns add A2
[root@node4 ~]# ip netns add B2
創建多對端口,用于連接橋設備與網絡名稱空間的互聯
[root@node4 ~]# ip link add a1.1 type veth peer name a1.2
[root@node4 ~]# ip link set a1.1 up
[root@node4 ~]# ip link set a1.2 up
[root@node4 ~]# ip link add b1.1 type veth peer name b1.2
[root@node4 ~]# ip link set b1.1 up
[root@node4 ~]# ip link set b1.2 up
[root@node4 ~]# ip link add b12.1 type veth peer name b12.2
[root@node4 ~]# ip link set b12.1 up
[root@node4 ~]# ip link set b12.2 up
[root@node4 ~]# ip link add b13.1 type veth peer name b13.2
[root@node4 ~]# ip link set b13.1 up
[root@node4 ~]# ip link set b13.2 up
[root@node4 ~]# ip link add name b23.1 type veth peer name b23.2
[root@node4 ~]# ip link set b23.1 up
[root@node4 ~]# ip link set b23.2 up
配置br2與A2網絡名稱空間互聯
[root@node4 ~]# ip link set a1.1 netns A2
[root@node4 ~]# ovs-vsctl add-port br2 a1.2
配置br3與B2網絡名稱空間互聯
[root@node4 ~]# ip link set b1.1 netns B2
[root@node4 ~]# ovs-vsctl add-port br3 b1.2
配置br2與br3橋設備互聯
[root@node4 ~]# ovs-vsctl add-port br2 b23.1 
[root@node4 ~]# ovs-vsctl add-port br3 b23.2
配置A2網絡名稱空間的ip地址
[root@node4 ~]# ip netns exec A2 ip link set a1.1 up
[root@node4 ~]# ip netns exec A2 ip addr add 192.168.10.10/24 dev a1.1
配置B2網絡名稱空間的ip地址
[root@node4 ~]# ip netns exec B2  ip link set b1.1 up
[root@node4 ~]# ip netns exec B2 ip addr add 192.168.10.20/24 dev b1.1
測試A2與B2網絡名稱空間的連通性
[root@node4 ~]# ip netns exec B2 ping 192.168.10.10  
PING 192.168.10.10 (192.168.10.10) 56(84) bytes of data.
64 bytes from 192.168.10.10: icmp_seq=1 ttl=64 time=1.68 ms
64 bytes from 192.168.10.10: icmp_seq=2 ttl=64 time=0.065 ms

[root@node4 ~]# ip netns exec A2 ping 192.168.10.20
PING 192.168.10.20 (192.168.10.20) 56(84) bytes of data.
64 bytes from 192.168.10.20: icmp_seq=1 ttl=64 time=2.80 ms
64 bytes from 192.168.10.20: icmp_seq=2 ttl=64 time=0.048 ms
配置br2與br1橋設備互聯
[root@node4 ~]# ovs-vsctl add-port br1 b12.1 
[root@node4 ~]# ovs-vsctl add-port br2 b12.2
配置br3與br1橋設備互聯
[root@node4 ~]# ovs-vsctl add-port br1 b13.1
[root@node4 ~]# ovs-vsctl add-port br3 b13.2
為了防止橋設備產生環路,在橋設備上開啟stp協議
[root@node4 ~]# ovs-vsctl set Bridge br1 stp_enable=true
[root@node4 ~]# ovs-vsctl set Bridge br2 stp_enable=true
[root@node4 ~]# ovs-vsctl set Bridge br3 stp_enable=true

 8)配置GRE通道 

先配置用于建立GRE通道的eth1網卡接口的ip地址
[root@node3 ~]# ifconfig eth1 10.10.10.1/24 up
[root@node4 ~]# ifconfig eth1 10.10.10.2/24 up
測試連通性
[root@node3 ~]# ping 10.10.10.1
PING 10.10.10.1 (10.10.10.1) 56(84) bytes of data.
64 bytes from 10.10.10.1: icmp_seq=1 ttl=64 time=0.066 ms

[root@node4 ~]# ping 10.10.10.1
PING 10.10.10.1 (10.10.10.1) 56(84) bytes of data.
64 bytes from 10.10.10.1: icmp_seq=1 ttl=64 time=2.94 ms
64 bytes from 10.10.10.1: icmp_seq=2 ttl=64 time=0.305 ms
分別在兩臺宿主機的br1橋設備上添加一個用于GRE封裝的端口
[root@node3 ~]# ovs-vsctl add-port br1 GRE
[root@node4 ~]# ovs-vsctl add-port br1 GRE
更改添加GRE端口的封裝屬性
[root@node3 ~]# ovs-vsctl  set Interface GRE type=gre  options:remote_ip=10.10.10.2
[root@node4 ~]# ovs-vsctl set Interface GRE type=gre options:remote_ip=10.10.10.1
測試兩臺宿主機之間網絡名稱空間的連通性
在node3宿主上測試
[root@node3 ~]# ip netns exec B1 ping 192.168.10.10
PING 192.168.10.10 (192.168.10.10) 56(84) bytes of data.
64 bytes from 192.168.10.10: icmp_seq=1 ttl=64 time=3.59 ms
64 bytes from 192.168.10.10: icmp_seq=2 ttl=64 time=1.62 ms
^C
--- 192.168.10.10 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1028ms
rtt min/avg/max/mdev = 1.622/2.608/3.594/0.986 ms
[root@node3 ~]# ip netns exec B1 ping 192.168.10.20
PING 192.168.10.20 (192.168.10.20) 56(84) bytes of data.
64 bytes from 192.168.10.20: icmp_seq=1 ttl=64 time=8.23 ms
^C
--- 192.168.10.20 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 741ms
rtt min/avg/max/mdev = 8.231/8.231/8.231/0.000 ms
[root@node3 ~]# ip netns exec B1 ping 192.168.10.1
PING 192.168.10.1 (192.168.10.1) 56(84) bytes of data.
64 bytes from 192.168.10.1: icmp_seq=1 ttl=64 time=2.26 ms
^C
--- 192.168.10.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 912ms
rtt min/avg/max/mdev = 2.260/2.260/2.260/0.000 ms

在node4宿主機上測試
[root@node4 ~]# ip netns exec A2 ping 192.168.10.1
PING 192.168.10.1 (192.168.10.1) 56(84) bytes of data.
64 bytes from 192.168.10.1: icmp_seq=1 ttl=64 time=6.75 ms
64 bytes from 192.168.10.1: icmp_seq=2 ttl=64 time=1.53 ms
^C
--- 192.168.10.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1376ms
rtt min/avg/max/mdev = 1.536/4.146/6.756/2.610 ms
[root@node4 ~]# ip netns exec A2 ping 192.168.10.3
PING 192.168.10.3 (192.168.10.3) 56(84) bytes of data.
^C
--- 192.168.10.3 ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 1381ms

[root@node4 ~]# ip netns exec A2 ping 192.168.10.2
PING 192.168.10.2 (192.168.10.2) 56(84) bytes of data.
64 bytes from 192.168.10.2: icmp_seq=1 ttl=64 time=5.68 ms
^C
--- 192.168.10.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 769ms
rtt min/avg/max/mdev = 5.680/5.680/5.680/0.000 ms
[root@node4 ~]# ip netns exec A2 ping 192.168.10.20
PING 192.168.10.20 (192.168.10.20) 56(84) bytes of data.
64 bytes from 192.168.10.20: icmp_seq=1 ttl=64 time=2.50 ms
^C
--- 192.168.10.20 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 913ms
rtt min/avg/max/mdev = 2.502/2.502/2.502/0.000 ms
在node4宿主機上ping  node3宿主機上的網絡名稱空間,在node3宿主機上抓包分析
[root@node3 ~]# tcpdump -nn  -i eth1 
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes
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
10:15:40.781357 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
10:15:42.786343 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
10:15:44.779459 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  
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on a1.2, link-type EN10MB (Ethernet), capture size 65535 bytes
10:18:29.352487 IP 192.168.10.10 > 192.168.10.1: ICMP echo request, id 7211, seq 1, length 64
10:18:29.352522 IP 192.168.10.1 > 192.168.10.10: ICMP echo reply, id 7211, seq 1, length 64
10:18:30.348549 IP 192.168.10.10 > 192.168.10.1: ICMP echo request, id 7211, seq 2, length 64
通過以上抓包可以發現A1與A2的通信

[root@node3 ~]# ip netns exec A1 tcpdump -nn  icmp    -i a1.2
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on a1.2, link-type EN10MB (Ethernet), capture size 65535 bytes
10:18:29.352487 IP 192.168.10.10 > 192.168.10.1: ICMP echo request, id 7211, seq 1, length 64
10:18:29.352522 IP 192.168.10.1 > 192.168.10.10: ICMP echo reply, id 7211, seq 1, length 64
10:18:30.348549 IP 192.168.10.10 > 192.168.10.1: ICMP echo request, id 7211, seq 2, length 64
通過以上分析,還可以抓到stp報文

9)到此實驗已經結束,兩臺宿主機之前的虛擬網絡搭建完成

關于GRE協議,大家可以參考以下鏈接,這里就不在詳細講述了:

http://www.tuicool.com/articles/zyiuIzU

http://www.tuicool.com/articles/VNzY7n

原創文章,作者:馬行空,如若轉載,請注明出處:http://www.www58058.com/13251

(0)
馬行空馬行空
上一篇 2016-03-26
下一篇 2016-03-27

相關推薦

  • 一次簡單的內核編譯(二)

      前言:     此次編譯是繼一次簡單的內核編譯(一)進行操作編譯的,請先查看第一篇再來看此片文章 一、使用busybox代替自己制作的init腳本,實現內核啟動;  1、在這里我們使用靜態編譯busybox,所以需要先安裝glibc-static依賴包,如果不安裝會報錯     2、解…

    Linux干貨 2015-06-01
  • LVM-邏輯盤卷管理

    LVM   一、簡介         LVM是邏輯盤卷管理(Logical Volume Manager)的簡稱,它是Linux環境下對磁盤分區進行管理的一種機制,LVM是建立在硬盤和分區之上的一個邏輯層,來提高磁盤分區管理的靈活性。   二、原理   &nb…

    Linux干貨 2016-04-12
  • 文件查找:locate/find

    文件查找就是在文件系統上查找符合條件的文件,工具名分別為:locate和find locate是非實時查找或數據庫查找的工具;而find則是實時查找工具。 locate locate依賴于事先構建的索引。索引的構建是在系統較為空閑時自動進行(即為周期性任務),也可以手動更新數據庫(updatedb) 注意:索引構建過程需要遍歷整個根文件系統,極其消耗資源。 …

    Linux干貨 2016-03-12
  • 一起學DHCP系列(五)指派、獲取

    原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://jeffyyko.blog.51cto.com/28563/163168     本節將主要講述DHCP客戶端獲取IP的過程,也是此系列中非常重要的一節。   &…

    Linux干貨 2015-03-25
  • openvpn安裝配置過程

    前言     之前為了方便遠程辦公時訪問公司的內部系統,如:svn、OA、wiki、禪道等等;通通在防火墻上做了端口映射。然后有個內部系統被黑了,各種弱口令沒辦法。果斷關閉端口映射,看來還是得搭建個VPN服務器,vpn設備感覺大材小用。馬上就想到了開源的openvpn,下面就來介紹openvpn的安裝配置過程。 ope…

    Linux干貨 2015-05-11
  • GDB中應該知道的幾個調試方法

    七、八年前寫過一篇《用GDB調試程序》,于是,從那以后,很多朋友在MSN上以及給我發郵件詢問我關于GDB的問題,一直到今天,還有人在問GDB的相關問題。這么多年來,有一些問題是大家反復在問的,一方面,我覺得我以前的文章可能沒有說清楚,另一方面,我覺得大家常問的問題正是最有用的,所以,在這里羅列出來。希望大家補充。 一、多線程調試 多線程調試可能是問得最多的?!?/p>

    Linux干貨 2016-07-11

評論列表(3條)

  • stanley
    stanley 2016-03-27 21:36

    置頂,已加入免檢產品

  • LYRen1900
    LYRen1900 2016-04-22 20:21

    您好,請問netns老出現問題有何方法?

    • 馬行空
      馬行空 2016-05-18 10:41

      @LYRen1900有報錯信息么?哪方面的問題?

欧美性久久久久