http://www.sdnlab.com/14101.html
Open vSwith模擬網關實現不同子網的互通
服務:
ovsdb-server
ovs-vswitchd
rpm:
openvswitch-2.4.0-1.el6.x86_64
命令:
ovs-appctl
ovs-docker
ovs-dpctl-top
ovs-ofctl
ovs-test
ovs-vlan-test
ovs-vswitchd
ovs-bugtool
ovs-dpctl
ovs-l3ping
ovs-pki
ovs-testcontroller
ovs-vsctl
配置文件
/etc/init.d/openvswitch
/etc/logrotate.d/openvswitch
/etc/openvswitch/conf.db
/etc/openvswitch/system-id.conf
/etc/sysconfig/network-scripts/ifdown-ovs
/etc/sysconfig/network-scripts/ifup-ovs
日志:
/var/log/openvswitch/ovs-vswitchd.log
/var/log/openvswitch/ovsdb-server.log
通過ovs設置物理網卡聯網規則:
利用ovs-ofctl 轉發
#ovs-ofctl
$ ovs-ofctl add-flow ovs-switch "priority=1 idle_timeout=0,dl_src=00:0C:29:33:17:d3,actions=mod_nw_src:192.168.10.140,normal"
dl_type=
dl_type=0x0800
nw_proto=0x03
$ ovs-ofctl add-flow ovs-switch "priority=1 idle_timeout=0,dl_type=0x0800,nw_proto=0x03,actions=mod_nw_dst:192.168.10.2,normal"
丟包處理
# ovs-ofctl add-flow switch0 cookie=2,idle_timeout=0,priority=1,dl_type=0x800,in_port=39,actions=drop
// 源 ip
# ovs-ofctl add-flow switch0 cookie=2,idle_timeout=0,priority=1,dl_type=0x800,nw_src=10.17.5.201,actions=drop
# ovs-ofctl add-flow switch0 cookie=2,idle_timeout=0,priority=1,dl_type=0x800,dl_src=00:E0:2F:1E:15:A4,actions=drop
# mac: 00:0C:29:B9:15:41 00:OC:29:FE:D7:3D
dl_src 源mac
dl_dst 目的mac
in_port 輸入端口號
nw_src 源ip地址
nw_dst 目的ip地址
dl_type 數據包類型
nw_proto 網絡層協議類型
添加缺省的處理。
#ovs-ofctl add-flow switch0 priority=0,actions=NORMAL
cookie=0x0, duration=11509.036s, table=0, n_packets=1059, n_bytes=116533, idle_age=740, priority=1,in_port=1 actions=resubmit(,2) //從端口1及patch-int進來的traffic會被重新執行table 2的rule
flows規則丟失問題:主機重啓后,設置的flows規則丟失。
ovs交換機配置保存指南: http://blog.csdn.net/anzhuangguai/article/details/52670866
修改內核參數 /etc/sysctl.conf
net.ipv4.ip_forward=1
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0
#sysctl -p
設置QOS
# ovs-vsctl set Interface tap0 ingress_policing_rate=100000 # ovs-vsctl set Interface tap0 ingress_policing_burst=10000
查看端口信息:
[root@vClass-sGRce ~]# ovs-vsctl -- --columns=name,ofport list Interface name : vnetcwjuWnXTW ofport : 3 name : "eth0" ofport : 4 name : "switch0" ofport : 65534 name : "p0" ofport : 100 name : ovs-switch ofport : 65534
獲取接口端口號:
[root@vClass-sGRce ~]# ovs-vsctl get interface eth0 ofport 4
設置接口端口號:
[root@vClass-sGRce ~]# ovs-vsctl set interface p0 ofport=200 [root@vClass-sGRce ~]#
流表的作用:
每張Flow Table完成的具體功能如下:
Table ID為0的功能:
VM識別(基於macSa);
租戶識別(基於macSa or Vlan);
Tunnel識別(基於Tunnel VniId);
基於VM或者租戶的策略應用;
傳遞metadata到后面;
Table ID為1的功能:
全局安全或者QoS策略應用
決定下一級table跳轉到2還是3
Table ID為2的功能:
二層流表轉發到Port或者Tunnel
Table ID為3的功能:
三層流表轉發到Port或者Tunnel
查看路由表:
創建橋后查看路由表項:route #參看路由表是否正常配置
注意修改默認路由的網絡接口為橋br0,而非eth0
[root@vClass-w47o0 ~]# route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default 10.16.1.1 0.0.0.0 UG 0 0 0 eth1 //公網路由信息 // U – Up, G – Gateway, H – Host 10.16.0.0 * 255.255.0.0 U 0 0 0 eth1 //局域網路由信息 10.16.0.0 * 255.255.0.0 U 0 0 0 switch0 link-local * 255.255.0.0 U 1002 0 0 eth0 link-local * 255.255.0.0 U 1003 0 0 eth1 link-local * 255.255.0.0 U 1038 0 0 vnetiowFuwcHo
Flags 可能出現的標志有:
U (route is up) 路由正常
H (target is a host) 主機路由
G (use gateway) 使用網關的間接路由
R (reinstate route for dynamic routing) 為動態選路恢復路由
D (dynamically installed by daemon or redirect) 該路由由選路進程或重定向動態創建
M (modified from routing daemon or rederict) 該路由已由選路進程或重定向修改
! (reject route) 阻塞路由
route del default dev eth0 // 刪除默認路由,也就公網路由,因為有網關. 無法訪問外網
route add default dev eth0 // 增加默認路由,沒加網關. 無法訪問外網
route add default gw 192.168.0.3 dev eth0 // 重新添加帶網關的路由信息 可以訪問外網
route del -net 10.16.0.0/16 dev eth0 // 刪除局域網路由, 數據包通過了默認路由信息發到了路由器,再查路由器的路由表找到了192.168.1.133的路由.再由網關發回來給192.168.1.133了.
加載TUN模塊: /sbin/modprobe tun
查看系統模塊:lsmod | grep tun
[root@vClass-w47o0 ~]# lsmod | grep tun
tun 27379 3 vhost_net
查看tun設備:ll /dev/net/tun
[root@vClass-w47o0 ~]# ll /dev/net/tun
crw-rw-rw- 1 root root 10, 200 3月 21 14:58 /dev/net/tun
查詢網卡模式: dmesg | grep eht0
建立bridge后的狀態是讓網絡接口eth0進入混雜模式(promiscuous mode,接收網絡中所有數據包),網橋br0進入轉發狀態(forwarding state),而且br0和eth0有相同的MAC地址,一般也會得到和eth0相同的IP。
[root@vClass-w47o0 ~]# dmesg | grep eth0 [16878.589019] device eth0 left promiscuous mode [16892.803977] device eth0 entered promiscuous mode
打開br0的STP協議: brctl
stp br0 on
STP是生成樹協議(Spanning
Tree Protocol),它主要是為了避免在建有bridge的以太網LAN中出現橋回路(bridge loop)。如果不打開STP,則可能出現回路從而導致建有bridge的主機網絡不暢通。
設置br0 ip: 需要將bridge設置為與其綁定的物理網絡接口一樣的IP和MAC地址,並讓默認路由使用bridge(而不是ethX)來連通。這個步驟可能導致宿主機的網絡斷掉,之后重新通過bridge建立網絡連接,所以建立bridge這個步驟最好不要通過SSH連接遠程(或VNC)配置。
查看tap設備:ls /sys/devices/virtual/net/
[root@vClass-w47o0 ~]# ls /sys/devices/virtual/net/ bond0 lo ovs-system switch0 vnetiowFuwcHo
由上面信息可知,創建客戶機后,添加了一個名為tap1的TAP虛擬網絡設備,它被綁定在br0這個bridge上。Centos上默認虛擬網卡設備名為vnet0(1....)。
windows route操作
1 > route PRINT 2 > route PRINT -4 3 > route PRINT -6 4 > route PRINT 157* .... 只打印那些匹配 157* 的項 5 6 > route ADD 157.0.0.0 MASK 255.0.0.0 157.55.80.1 METRIC 3 IF 2 7 destination^ ^mask ^gateway metric^ ^ 8 Interface^ 9 如果未給出 IF,它將嘗試查找給定網關的最佳 10 接口。 11 > route ADD 3ffe::/32 3ffe::1 12 13 > route CHANGE 157.0.0.0 MASK 255.0.0.0 157.55.80.5 METRIC 2 IF 2 14 15 CHANGE 只用於修改網關和/或躍點數。 16 17 > route DELETE 157.0.0.0 18 > route DELETE 3ffe::/32
C:\Users\doscho>route print -4 =========================================================================== 接口列表 11...00 0c 29 33 17 d3 ......Intel(R) PRO/1000 MT Network Connection 1...........................Software Loopback Interface 1 =========================================================================== IPv4 路由表 =========================================================================== 活動路由: 網絡目標 網絡掩碼 網關 接口 躍點數 0.0.0.0 0.0.0.0 192.168.10.170 192.168.10.140 266 // 網絡目標 destination: 127.0.0.0 255.0.0.0 在鏈路上 127.0.0.1 306 // 接口 interface: 到達該目的地的本地路由器的ip 127.0.0.1 255.255.255.255 在鏈路上 127.0.0.1 306 // 網關 gateway: 下一跳路由器入口的ip, 路由器通過interface和gateway定義一調到下一路由器的鏈路,通常情況下,interface和gateway是同一網段的。 127.255.255.255 255.255.255.255 在鏈路上 127.0.0.1 306 // 躍點數 metric: 該條路由記錄的質量,一般情況下,如果有多條到達相同目的地的路由記錄,路由器會采用metric值小的那條路由。 192.168.10.0 255.255.255.0 在鏈路上 192.168.10.140 266 192.168.10.140 255.255.255.255 在鏈路上 192.168.10.140 266 192.168.10.255 255.255.255.255 在鏈路上 192.168.10.140 266 224.0.0.0 240.0.0.0 在鏈路上 127.0.0.1 306 224.0.0.0 240.0.0.0 在鏈路上 192.168.10.140 266 255.255.255.255 255.255.255.255 在鏈路上 127.0.0.1 306 255.255.255.255 255.255.255.255 在鏈路上 192.168.10.140 266 =========================================================================== 永久路由: 網絡地址 網絡掩碼 網關地址 躍點數 0.0.0.0 0.0.0.0 192.168.10.170 默認 ===========================================================================
windows 路由表操作
windows路由表的設置主要通過route命令,ROUTE命令格式如下: ROUTE [-f] [-p] [command [destination] [MASK netmask] [gateway] [METRIC metric] [IF interface] 其中 –f 參數用於清除路由表,-p參數用於永久保留某條路由(即在系統重啟時不會丟失路由)。 Command 主要有PRINT(打印)、ADD(添加)、DELETE(刪除)、CHANGE(修改)共4個命令。 Destination 代表所要達到的目標IP地址。 MASK 是子網掩碼的關鍵字。Netmask代表具體的子網掩碼,如果不加說明,默認是255.255.255.255(單機IP地址)。如果代表全部出口子網掩碼可用0.0.0.0。 Gateway 代表出口網關。 其他interface和metric分別代表特殊路由的接口數目和到達目標地址的跳數,一般默認。
route add 0.0.0.0 MASK 0.0.0.0 192.168.10.2
route delete 0.0.0.0
ovs flows保存機制
重啟ovs服務器時,通過添加 --save-flows=yes ,保存設置的flows規則
service openvswitch restart --save-flows=yes
服務調用 /usr/share/openvswitch/scripts/ovs-save 腳本。 此腳本在 源碼包的 utilities下。
如何設置系統啟動時,啟動ovs保留flows規則?
通過網絡獲取到如下方案,ovs是否自身有這個選項呢?
ovs交換機配置保存指南 http://blog.csdn.net/anzhuangguai/article/details/52670866
ovs常用命令和總結: http://blog.csdn.net/gzhouc/article/details/52202219
官網: http://openvswitch.org/
ovs-ofctl 手冊: http://rpm.pbone.net/index.php3/stat/45/idpl/23319267/numer/8/nazwa/ovs-ofctl
OpenFlow端口: http://book.2cto.com/201310/34150.html
QOS:
Open vSwitch QoS 功能(限速): http://blog.csdn.net/zhongbeida_xue/article/details/56845461
Openvswitch手冊(6): QoS: http://www.cnblogs.com/popsuper1982/p/3803807.html