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 : 3name : "eth0" ofport : 4name : "switch0" ofport : 65534name : "p0" ofport : 100name : 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 Connection1...........................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: 到达该目的地的本地路由器的ip127.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 266192.168.10.140 255.255.255.255 在链路上 192.168.10.140 266192.168.10.255 255.255.255.255 在链路上 192.168.10.140 266224.0.0.0 240.0.0.0 在链路上 127.0.0.1 306224.0.0.0 240.0.0.0 在链路上 192.168.10.140 266255.255.255.255 255.255.255.255 在链路上 127.0.0.1 306255.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