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

 

 

posted on 2017-03-23 17:36  doscho  阅读(2454)  评论(0编辑  收藏  举报