SDNLAB 上相關(guān)博客可以看看
http://www.sdnlab.com/tag/openvswitch/page/3/
關(guān)于ovs-vsctl用法參考
關(guān)于ovs-ofctl用法參考
1、mininet中自帶的OVS會(huì)出現(xiàn)很多問題,比如沒有ovs-sandbox,并不能很好完成官網(wǎng)上相關(guān)實(shí)驗(yàn),為了避免新安裝的OVS與之前的沖突,可以不用安裝,直接下載一個(gè)官網(wǎng)的最新版packet,在tutorial文件夾中運(yùn)行ovs-sandbox。直接按照官網(wǎng)進(jìn)行實(shí)驗(yàn)
http://aidaiz.com/openvswitch-build/
2、ovs-vsctl主要用于創(chuàng)建網(wǎng)橋以及相應(yīng)的端口等,與網(wǎng)橋相關(guān);而ovs-ofctl主要是用來控制流表。
3、帶內(nèi)帶外控制:
帶外網(wǎng)管是指通過專門的網(wǎng)管通道實(shí)現(xiàn)對(duì)網(wǎng)絡(luò)的管理,將網(wǎng)管數(shù)據(jù)與業(yè)務(wù)數(shù)據(jù)分開,為網(wǎng)管數(shù)據(jù)建立獨(dú)立通道。在這個(gè)通道中,只傳輸管理數(shù)據(jù)、統(tǒng)計(jì)信息、計(jì)費(fèi)信息等,網(wǎng)管數(shù)據(jù)與業(yè)務(wù)數(shù)據(jù)分離,可以提高網(wǎng)管的效率與可靠性,也有利于提高網(wǎng)管數(shù)據(jù)的安全性。
帶內(nèi)管理使得網(wǎng)絡(luò)中的網(wǎng)管數(shù)據(jù)和業(yè)務(wù)數(shù)據(jù)在相同的鏈路中傳輸,當(dāng)管理數(shù)據(jù)(包括SNMP,Netflow,Radius,計(jì)費(fèi)等)較多時(shí),將會(huì)影響到整個(gè)網(wǎng)絡(luò)的性能;管理數(shù)據(jù)的流量較少,對(duì)整個(gè)網(wǎng)絡(luò)的性能影響不明顯,可采用帶內(nèi)管理。
4、OVS使用下列框架監(jiān)控流量
sFlow NetFlow Port Mirroring(SPAN RSPAN ERSPAN)
5、OVS框架
6、公鑰私鑰以及SSL加密理解
http://chenling1018.blog.163.com/blog/static/1480254201058112410789/
http://www.linuxde.net/2012/03/8301.html
證書機(jī)構(gòu)有自己的
8、OVS上流表添加基礎(chǔ)
ovs-ofctl add-flow ovs-switch "in_port=2,actions=output:8"
flow有很多syntax, 一半來說actions之前都是match的部分,常用的一般是:
in_port: switch的端口 dl_src: 源mac地址
dl_dst:目的mac地址
dl_type:以太網(wǎng)協(xié)議類型 0x0806是arp packet 0x0800是ip packet
nw_src:源IP
nw_dst:目的ip
nw_proto:協(xié)議類型 ,注意和dl_type區(qū)分,同時(shí)也需要和dl_type一起使用,比如dl_type是ip(0x0800),那么nw_proto=1就表示icmp packet
tp_src: tcp udp源端口
tp_dst: tcp udp目的端口
ip Same as dl_type=0x0800.
icmp Same as dl_type=0x0800,nw_proto=1.
tcp Same as dl_type=0x0800,nw_proto=6.
udp Same as dl_type=0x0800,nw_proto=17.
arp Same as dl_type=0x0806.
rarp Same as dl_type=0x8035.
actions:
output:port
controller(key=value) 送到controller作為packet-in 消息,括號(hào)內(nèi)的key value pair可以是:
reason=reason reason 可以是action,no_match,invalid_ttl
id=controller-id 默認(rèn)是0,特殊的controller會(huì)有一個(gè)16位的id
mod_dl_src:mac
Sets the source Ethernet address to mac.
mod_dl_dst:mac
Sets the destination Ethernet address to mac.
mod_nw_src:ip
Sets the IPv4 source address to ip.
mod_nw_dst:ip
Sets the IPv4 destination address to ip.
mod_tp_src:port
Sets the TCP or UDP source port to port.
mod_tp_dst:port
Sets the TCP or UDP destination port to port.
9、OVS的兩種模式
Standalone:這種模式下,沒有運(yùn)行controller的情況下,OVS會(huì)自動(dòng)調(diào)回普通switch模式,如果有controller的情況,ovs會(huì)自動(dòng)變成 openflow switch 命令:
ovs-vsctl set-fail-mode ovs-switch standalone
ovs-switch替換成bridge的名字
Secure:這種模式下,無論有沒有controller, ovs都會(huì)作為openflow switch運(yùn)行, 也就是所有interface在bridge上,等待controller或者用戶添加flow到switch來進(jìn)行通信
ovs-vsctl set-fail-mode ovs-switch secure
10、OVS的卸載和升級(jí)
https://github.com/mininet/mininet/wiki/Installing-new-version-of-Open-vSwitch
11、當(dāng)出現(xiàn)如下問題時(shí)
ovs-vsctl: unix:/usr/var/run/openvswitch/db.sock: database connection failed (Connection refused)
解決辦法為:sudo /usr/share/openvswitch/scripts/ovs-ctl start
12、一些注意:
http://docs.openvswitch.org/en/latest/tutorials/ovn-openstack/
openvswitch官方文檔2.7.90版本中,在OVN一節(jié)中增加了對(duì)openstack應(yīng)用,等學(xué)習(xí)到openstack時(shí)可以了解。
13、An overview of Openvswitch implementation
- OVS分為用戶層和內(nèi)核層,用戶層包括一些模塊,以daemon程序存在,實(shí)現(xiàn)了以下功能:交換機(jī)和流表的實(shí)現(xiàn),交換機(jī)管理組件,數(shù)據(jù)庫,和內(nèi)核層之間的交互。當(dāng)OVS服務(wù)啟動(dòng)時(shí)會(huì)運(yùn)行以下三個(gè)daemon:ovs-vswitchd,是交換機(jī)的核心實(shí)現(xiàn)模塊;ovsdb-server,管理虛擬交換機(jī)和流表的配置的數(shù)據(jù)庫系統(tǒng);ovs-brcompatd,keeps the compatibility with the traditional bridges。
- 其中最重要的是ovs-vswitchd,他直接通過netlink協(xié)議和內(nèi)核進(jìn)行交互。Ovs-vstl是一個(gè)配置交換機(jī)的小工具,顯然,需要先和ovs-vswitchd進(jìn)行交互。ovs-vswitchd將交換機(jī)的配置和變更信息保存到數(shù)據(jù)庫中,該數(shù)據(jù)庫由vsdb-server直接管理,因此,ovs-vswitchd對(duì)數(shù)據(jù)庫的信息增減也得先和vsdb-server進(jìn)行交互,via Unix domain socket, in order to retrieve or save the configuration information,這也是為什么OVS的配置能夠開機(jī)保留。
- Ovs-vsctl可以完成大部分的openvswitch的管理,ovs-appctl也可以通過發(fā)送一些內(nèi)部命令給ovs-vswitchd完成一些簡單操作。但有時(shí)候需要直接管理內(nèi)核的datapath,這種情況下你可以使用ovs-dpctl去使ovs-vswitchd直接管理內(nèi)核層的datapath,而不需要database。
- 當(dāng)需要和ovsdb-server通信做一些數(shù)據(jù)庫操作時(shí),可以使用ovsdb-client,如果想不通過ovsdb-server直接管理數(shù)據(jù)庫可以通過ovsdb-tool工具。
OVS可以通過openflow協(xié)議進(jìn)行遠(yuǎn)程管理,實(shí)現(xiàn)軟件定義網(wǎng)絡(luò),sFlow是一個(gè)數(shù)據(jù)包監(jiān)控和分析協(xié)議,兩者都可以通過ovs-ofctl進(jìn)行配置管理。
14、OVS支持的端口類型:
- Normal port:用戶可以把操作系統(tǒng)中的網(wǎng)卡綁定到Open vSwitch上,Open vSwitch會(huì)生成一個(gè)普通端口處理這塊網(wǎng)卡進(jìn)出的數(shù)據(jù)包。
- Internal Port: 當(dāng)設(shè)置端口類型為internal,Open vSwitch會(huì)創(chuàng)建一塊虛擬網(wǎng)卡,此端口收到的所有數(shù)據(jù)包都會(huì)交給這塊網(wǎng)卡,網(wǎng)卡發(fā)出的包會(huì)通過這個(gè)端口交給Open vSwitch。當(dāng)Open vSwitch創(chuàng)建一個(gè)新網(wǎng)橋時(shí),默認(rèn)會(huì)創(chuàng)建一個(gè)與網(wǎng)橋同名的Internal Port,同時(shí)也創(chuàng)建一個(gè)與Port同名的Interface。三位一體,所以操作系統(tǒng)里就多了一塊網(wǎng)卡,但是狀態(tài)是down的。
- Patch Port: 當(dāng)機(jī)器中有多個(gè)Open vSwitch網(wǎng)橋時(shí),可以使用Patch Port把兩個(gè)網(wǎng)橋連起來。Patch Port總是成對(duì)出現(xiàn),分別連接在兩個(gè)網(wǎng)橋上,在兩個(gè)網(wǎng)橋之間交換數(shù)據(jù)。
- Tunnel Port: 隧道端口是一種虛擬端口,支持使用gre或vxlan等隧道技術(shù)與位于網(wǎng)絡(luò)上其他位置的遠(yuǎn)程端口通訊。
15、清除OVS的配置和重新初始化OVS
- 單獨(dú)的配置用 remove即可,如比如我們用如下命令設(shè)置了vlan
ovs-vsctl set port vnet0 tag=100
用remove替代set,并去掉賦值的=語句即可
ovs-vsctl remove port vnet0 tag 100 - 重新初始化OVS
service openvswitch stop
rm -rf /etc/openvswitch/conf.db
service openvswitch start
16、OVS 添加端口問題
網(wǎng)上sudo ovs-vsctl add-port br0 <port>
執(zhí)行上述命令都是會(huì)報(bào)錯(cuò)的,最后顯示:
Port "vnet10"
tag: 103
Interface "vnet10"
error: "could not open network device vnet10 (No such device)"
因?yàn)闆]有這個(gè)端口,所以報(bào)錯(cuò),類型設(shè)置為虛擬端口可以解決這個(gè)問題
ovs?vsctl add?port br0 vlan10 ?? set Interface vlan10 type=internal
http://aidaiz.com/openvswitch-build/ 可以詳細(xì)參考這篇文章,自己真是渣渣
17、網(wǎng)橋添加物理端口eth0時(shí)斷開遠(yuǎn)程連接問題
根據(jù)官方文檔解釋,一個(gè)物理網(wǎng)卡連接到一個(gè)網(wǎng)橋不應(yīng)該分配地址,否則該地址不會(huì)完整工作。可以將該地址轉(zhuǎn)交到一個(gè) internal端口。
$ ovs-vsctl add-br br0
$ ovs-vsctl add-port br0 eth0 #這步就導(dǎo)致所有遠(yuǎn)程連接到eth0的連接斷開
#解決
$ ifconfig eth0 0.0.0.0
$ ifconfig br0 <原來的IP地址>
注意兩點(diǎn),一是要將原來的eth0的地址清空,新增加的端口br0可以使用原來的地址,即通過上述命名直接靜態(tài)配置,也可以通過啟用DHCP方式。
sudo dhclient eth0 #在端口eth0上打開dhcp監(jiān)聽服務(wù)
可能用到的操作
sudo dhclient -r eth0 #釋放該地址
sudo dhclient -d eth0 #重新分配地址
實(shí)際測(cè)試兩種方法都有效。
還要注意一點(diǎn)就是路由,br0接管eth0 后,路由表會(huì)失效,通過 route -n查看eth0的路由表,再根據(jù)相應(yīng)命令添加。