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