Open vSwitch系列之一 Open vSwitch誕生
Open vSwitch系列之三 ovs-vsctl命令使用
Open vSwitch系列之四 ovs-ofctl命令使用
查看網橋mac學習地址表
ovs作為一個交換機,既可以工作在SDN模式也可以工作在普通交換機模式。工作在普通交換機模式下就有mac自學習功能。和普通的交換機一樣,ovs交換機也能查看mac和端口關系的對應表。
ovs-appctl fdb/show s1
設置網橋不連接控制器的轉發模式
ovs 交換機在連接不上控制器時有一個fail_mode的標志,所謂fail_mode就是故障模式,意思是SDN控制器故障時,交換機未連接控制器時的模式。
fail_mode 故障模式有兩種狀態,一種是standalone,一種是secure狀態。
如果是配置了standalone mode,在三次探測控制器連接不成功后,此時ovs-vswitchd將會接管轉發邏輯(后台仍然嘗試連接到控制器,一旦連接則退出fail狀態),OpenvSwitch將作為一個正常的mac 學習的二層交換機。
如果是配置了secure mode,則ovs-vswitchd將不會自動配置新的轉發流表,OpenvSwitch將按照原先有的流表轉發。
簡單來說:
standalone(default):清除所有控制器下發的流表,ovs自己接管
secure:按照原來流表繼續轉發
ovs-vsctl get-fail-mode br0
ovs-vsctl set-fail-mode br0 secure
再次查看交換機,可以看到交換機的fail_mode已經變成standalone模式。這里有一點需要說明,fail_mode連不上交換機之后的ovs的轉發模式,跟當前ovs交換機連沒連控制器沒有關系。
同樣也可以刪除fail_mode
ovs-vsctl del-fail-mode br0
開啟STP 生成樹協議
STP是Spanning Tree Protocol的縮寫,意思是指生成樹協議,可應用於計算機網絡中樹形拓撲結構建立,主要作用是防止網橋網絡中的冗余鏈路形成環路工作。
在上面的拓撲中,交換機之間形成環路,交換機中的廣播數據包會形成廣播風暴,而STP生成樹的作用就是經過計算阻塞交換機的部分端口,使得交換機之間不會形成環路。
查看ovs交換機是否開啟stp協議。
ovs-vsctl get bridge s1 stp_enable
設置交換機開啟stp協議
ovs-vsctl set bridge br0 stp_enable=true
查看網橋配置信息
對於一個網橋來說有很多特性,比如前面提到的是否開啟STP生成樹,當控制器故障時的fail-mode是standalone還是secure。網橋的特性遠不止於此,可以命令查看到一個網橋的配置信息。
ovs-vsctl list bridge s1
查看端口配置信息
網橋的配置信息可以查看到,同樣端口的配置也可以查看到。端口是否有vlan,tag號多少等。通過命令能夠查看到端口的特性。
ovs-vsctl list port s1 s1-eth1
網卡加入網橋IP失效的解決辦法
在ovs操作中常常有這么一個現象,將本機的網卡加入到網橋之中后就發現機器的ip地址失效了,不能ssh,不能ping通。這是因為當網卡加入網橋之后,網卡就是交換機上的一個端口,交換機作為二層設備,其端口是不可能有IP地址的,所以本機的IP地址失效。
那么這樣的情況如何處理?處理方法還是有的,關鍵點就在網橋的一個端口。網橋創建成功后會默認帶一個與網橋同名的port,並且這個port的類型是比較特殊的Internal。
ovs中port有四種類型
類型 | 說明 |
Normal | 用戶可以把操作系統中的網卡綁定到ovs上,ovs會生成一個普通端口處理這塊網卡進出的數據包。 |
Internal | 端口類型為internal時,ovs會創建一塊虛擬網卡,虛擬網卡會與端口自動綁定。當ovs創建一個新網橋時,默認會創建一個與網橋同名的Internal Port。 |
Patch | 當機器中有多個ovs網橋時,可以使用Patch Port把兩個網橋連起來。Patch Port總是成對出現,分別連接在兩個網橋上,在兩個網橋之間交換數據。 |
Tunne | 隧道端口是一種虛擬端口,支持使用gre或vxlan等隧道技術與位於網絡上其他位置的遠程端口通訊。 |
Internal 類型可以看做每個OVS交換機有個可以用來處理數據報的本地端口,可以為這個網絡設備配置 IP 地址。當創建ovs網橋時會自帶一個同名的端口,該端口就是類型為Internal 端口。解決的思路就是Internal類型的port會生成一個虛擬網卡,將綁定到網橋的網卡的IP地址轉移到該虛擬網卡上,然后配置路由即可。
解決步驟:
1.查看當前網卡ip地址
查看路由
2.創建網橋,綁定端口
當創建網橋之后網橋自帶一個類型為Internal的port,該port就是一個虛擬網卡。使用ifconfig能夠查看得到,網卡名字就叫做s1.
3.將網卡eth0的ip地址轉移到網卡s1上
由於我是ssh遠程到虛擬機上操作,當將eth0綁定到網橋上之后ip失效,所以ssh斷開,只能在虛擬機上操作。
4.查看路由
當前路由中已經沒有發往外網的路由
5.添加新路由
為新網卡s1添加網關路由
route add default gw 30.0.0.1
6.測試生效
添加好路由之后可以發現能夠重新通外網。網卡eth0的ip在新網卡s1上生效