本文借鑑了http://www.sdnlab.com/3166.html以及http://www.jianshu.com/p/c9f131b96adf的內容,感謝原做者,首次分享,侵刪。html
安裝OVSpython
1. 準備工做:安裝依賴包:不知道幹啥的反正都安裝了先linux
apt-get update apt-get install -y build-essential apt-get install build-essential libssl-dev linux-headers-$(uname -r) apt-get install graphviz autoconf automake bzip2 debhelper dh-autoreconf libssl-dev libtool openssl procps python-all python-qt4 python-twisted-conch python-zopeinterface python-six dkms module-assistant ipsec-tools racoon libc6-dev module- init-tools netbase python-argparse uuid-runtime
2. 下載須要的openvswitch文件,ubuntu14+ovs2.8,解壓後。放在/下。
3. 執行如下兩個腳本數據庫
./boot.sh ./configure --with-linux=/lib/modules/`uname -r`/build
4. make並installbootstrap
make make install make modules_install
5. 加載Open vSwitch模塊ubuntu
/sbin/modprobe openvswitch
6. 利用ovsdb-tool初始化數據庫配置 網絡
ovsdb-tool create /usr/local/etc/openvswitch/conf.db vswitchd/vswitch.ovsschema
7. 在啓動OVS以前,咱們須要先啓動ovsdb-server配置數據庫 app
ovsdb-server -v --remote=punix:/usr/local/var/run/openvswitch/db.sock --remote=db:Open_vSwitch,Open_vSwitch,manager_options --private-key=db:Open_vSwitch,SSL,private_key --certificate=db:Open_vSwitch,SSL,certificate --bootstrap-ca-cert=db:Open_vSwitch,SSL,ca_cert --pidfile --detach
(這裏應該會報錯,告訴你沒有/usr/local/var/run/openvswitch/ovsdb-server.pid文件,這時候只要創建一個run,再在run文件夾中創建一個openvswitvh文件夾就行了mkdir)
8. 首次用ovsdb-tool建立數據庫時需用ovs-vsctl命令初始化下數據庫。tcp
ovs-vsctl --no-wait init
9. 啓動OVS主進程ui
ovs-vswitchd --pidfile --detach
10. 查看OVS進程是否啓動。
ps –ef |grep ovs
11. 查看版本號
ovs-vsctl --version
設置ovs交換機(網橋)
1.首先添加一個名爲br0的網橋(交換機,到這一步纔是利用ovs建立一個虛擬交換機)。
ovs-vsctl add-br br0
注意:進行OVS設置時很容易形成虛擬交換機與物理交換機構成二層環路(好比虛擬交換機包含兩塊網卡,而這兩塊網卡都鏈接到物理交換機上,就是一個環路),一旦有廣播報文,好比ARP請求,就會引起廣播風暴,使網絡癱瘓。所以,應該把虛擬交換機開啓STP支持,避免廣播風暴:
ovs−vsctl set bridge br0 stp_enable=true
2.啓動要添加到虛擬交換機br0上的物理端口(物理網卡,這裏是eth0)。若是ifconfig後已經列出來的,就說明已經開啓了,就不用從新啓動了。
ifconfig eth0 up
3.添加物理端口到虛擬交換機br0
ovs-vsctl add-port br0 eth0
4.設置交換機IP:
OpenFlow交換機與控制器鏈接須要用到TCP鏈接,所以交換機須要設置IP。但當把物理端口添加到虛擬交換機上以後,這些物理端口上原先的IP設置將失效(IP屬於三層,而交換機工做在二層),沒法與外界進行三層的互聯。解決方法是添加一個類型爲internal的端口,而後設置IP和路由(本例是添加一個名爲veth3的虛擬端口):
首先,若是原先端口有設置IP,應將其重置:
ifconfig eth0 0
而後添加虛擬端口:
ovs-vsctl add-port br0 veth0 ovs-vsctl set interface veth0 type=internal
(這裏可能會提示重複或者沒有這個設備,無論,將vetn0啓動一下:ifconfig eth0 up)
這時若是執行ifconfig就會發現多了一個名爲veth0的端口。而後設置該端口並添加路由:
ifconfig veth0 172.16.15.2 netmask 255.255.255.0 route add default gw 172.16.15.1 veth0
P.S. 後來看到網上說其實不須要額外添加veth0,由於建立br0後會自動生成一個名爲br0的internal端口,直接設置它就能夠。
5.用下面的命令將br0網橋鏈接至一個指定的控制器
ovs-vsctl set-controller br0 tcp:172.16.15.10:6633
經常使用OVS操做
1.添加網橋:ovs-vsctl add-br 交換機名
2.刪除網橋:ovs-vsctl del-br 交換機名
3.添加端口:ovs-vsctl add-port 交換機名 端口名(網卡名)
4.刪除端口:ovs-vsctl del-port 交換機名 端口名(網卡名)
5.鏈接控制器:ovs-vsctl set-controller 交換機名 tcp:IP地址:端口號
6.斷開控制器:ovs-vsctl del-controller 交換機名
7.列出全部網橋:ovs-vsctl list-br
8.列出網橋中的全部端口:ovs-vsctl list-ports 交換機名
9.列出全部掛接到網卡的網橋:ovs-vsctl port-to-br 端口名(網卡名)
10.查看open vswitch的網絡狀態:ovs-vsctl show
11.查看 Open vSwitch 中的端口信息(交換機對應的 dpid,以及每一個端口的 OpenFlow 端口編號,端口名稱,當前狀態等等):ovs-ofctl show 交換機名
12.修改dpid:ovs-vsctl set bridge 交換機名 other_config:datapath-id=新DPID
13.修改端口號:ovs-vsctl set Interface 端口名 ofport_request=新端口號
14.查看交換機中的全部 Table:ovs-ofctl dump-tables ovs-switch
15.查看交換機中的全部流表項:ovs−ofctl dump−flows ovs-switch
16.刪除編號爲 100 的端口上的全部流表項:ovs-ofctl del-flows ovs-switch "in_port=100"
17.添加流表項(以「添加新的 OpenFlow 條目,修改從端口 p0 收到的數據包的源地址爲 9.181.137.1」爲例):
ovs-ofctl add-flow ovs-switch "priority=1 idle_timeout=0,in_port=100,actions=mod_nw_src:9.181.137.1,normal"
(更多說明請查閱:《基於 Open vSwitch 的 OpenFlow 踐》http://www.linuxidc.com/Linux/2017-06/144770.htm)
18.查看 OVS 的版本信息:ovs-appctl --version
19.查看 OVS 支持的 OpenFlow 協議的版本:ovs-ofctl --version