ovs


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設置物理網卡聯網規則:

 

  1. 最簡單的使用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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM