控制管理
- 创建网桥
1 | $ ovs-vsctl add-br testbr |
- 查看网桥和端口
1 | $ ovs-vsctl show |
- 网桥端口操作
1 | $ ovs-vsctl add-port br0 eth1 |
- 查看流表
1 | $ ovs-ofctl dump-flows testbr |
- 控制器设置
1 | # 设置控制器 |
- 接口相关
1 | $ ovs-ofctl dump-ports s1 |
流表类
流表操作
查看流表
1 | $ ovs-ofctl dump-flows s1 |
添加普通流表
1 | $ ovs-ofctl add-flow s1 in_port=1,actions=drop |
按照匹配删除流表
1 | $ ovs-ofctl del-flows s1 "in_port=1" |
常用匹配项
VLAN Tag
1 | $ vs-ofctl add-flow s1 priority=401,in_port=1,dl_vlan=777,actions=output:2 |
MAC
1 | $ ovs-ofctl add-flow s3 in_port=1,dl_src=0a:f6:95:7e:c6:4a/0a:f6:95:7e:c6:4a,action=output:3 |
IP
1 | $ ovs-ofctl add-flow s3 ip,in_port=1,nw_src=192.168.0.0/16,action=drop |
其他
匹配项 | 关键字 | 条件 | 举例 |
---|---|---|---|
以太网类型 | dl_type | in_port=1,dl_type=0x0806,actions=output:2 |
|
协议号 | nw_proto | 指定dl_type=0x0800或者ip | ip,in_port=1,nw_proto=1,actions=output:2 |
TCP flags | tcp_flags | 指定TCP | tcp,tcp_flags=ack,actions=output:2 |
一些速记符
速记符 | 匹配项 |
---|---|
ip | dl_type=0x800 |
ipv6 | dl_type=0x86dd |
icmp | dl_type=0x0800,nw_proto=1 |
icmp6 | dl_type=0x86dd,nw_proto=58 |
tcp | dl_type=0x0800,nw_proto=6 |
tcp6 | dl_type=0x86dd,nw_proto=6 |
udp | dl_type=0x0800,nw_proto=17 |
udp6 | dl_type=0x86dd,nw_proto=17 |
arp | dl_type=0x0806 |
指令动作(actions)
基础动作
动作 | 说明 | 举例 |
---|---|---|
normal | L2/L3处理 | actions=normal |
output | 出接口 | actions=output:2 |
group | 指定的group | actions=group:1 |
flood | 从所有物理接口转发出去,除了入接口和已关闭flooding的接口 | actions=flood |
all | 从所有物理接口转发出去,除了入接口 | actions=all |
local | 转发给本地网桥 | actions=local |
in_port | 从入接口转发出去 | actions=in_port |
controller | 以packet-in消息上送给控制器 | actions=controller |
drop | 丢弃数据包 | actions=drop |
修改VLAN ID
-
关键字:
mod_vlan_vid
-
举例
1
$ ovs-ofctl add-flow s1 in_port=1,actions=mod_vlan_vid:1034,output:2
剥除VLAN
-
关键字:
strip_vlan
-
举例
1
$ ovs-ofctl add-flow s1 in_port=1,actions=strip_vlan,output:2
弹出最外层VLAN
-
关键字:
pop_vlan
-
举例
1
$ ovs-ofctl add-flow br0 in_port=1,dl_type=0x8100,dl_vlan=777,actions=pop_vlan,output:2
修改源/目的MAC
-
关键字:
mod_dl_src
/mod_dl_dst
-
举例
1
2$ ovs-ofctl add-flow s1 in_port=1,actions=mod_dl_src:01:80:c2:00:00:0e,output:2
$ ovs-ofctl add-flow s1 in_port=1,actions=mod_dl_dst:01:80:c2:00:00:0e,output:2
修改源/目的IP
-
关键字:
mod_nw_src
/mod_nw_dst
-
举例
1
2$ ovs-ofctl add-flow s1 in_port=1,actions=mod_nw_src:192.168.0.10,output:2
$ ovs-ofctl add-flow s1 in_port=1,actions=mod_nw_dst:192.168.0.10,output:2
修改TCP/UDP端口
-
关键字:
mod_tp_src
/mod_tp_dst
-
举例
1
2
3
4$ ovs-ofctl add-flow s1 tcp,in_port=1,actions=mod_tp_src:1039,output:2
$ ovs-ofctl add-flow s1 tcp,in_port=1,actions=mod_tp_dst:21,output:2
$ ovs-ofctl add-flow s1 udp,in_port=1,actions=mod_tp_src:1039,output:2
$ ovs-ofctl add-flow s1 udp,in_port=1,actions=mod_tp_dst:53,output:2
VxLan
-
创建VxLAN接口
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19$ ovs-vsctl add-port s3 vxlan1 -- set Interface vxlan1 type=vxlan options:remote_ip=1.1.1.1 ofport_request=2000
$ ovs-vsctl show
Bridge "s3"
Controller "tcp:10.180.9.62:6633"
Controller "ptcp:6636"
fail_mode: secure
Port "s3-eth2"
Interface "s3-eth2"
Port "vxlan1"
Interface "vxlan1"
type: vxlan
options: {remote_ip="1.1.1.1"}
Port "s3-eth3"
Interface "s3-eth3"
Port "s3-eth1"
Interface "s3-eth1"
Port "s3"
Interface "s3"
type: internal -
VxLAN流表
1
2
3
4
5
6$ ovs-ofctl add-flow s3 ip,in_port=1,nw_dst=192.168.0.0/16,actions=output:2000
$ ovs-ofctl add-flow s3 in_port=2000,actions=output:1
$ ovs-ofctl dump-flows s3
NXST_FLOW reply (xid=0x4):
cookie=0x0, duration=35.227s, table=0, n_packets=0, n_bytes=0, idle_age=35, ip,in_port=1,nw_dst=192.168.0.0/16 actions=output:2000
cookie=0x0, duration=2.469s, table=0, n_packets=0, n_bytes=0, idle_age=2, in_port=2000 actions=output:1
实验
拓扑
1 | +------------+ |
实验要求
- h1可以与h3通信,但不可以与h2和h4通信
- h2可以与h4通信,但不可以与h1和h3通信
具体操作
- 由h1送出的报文,在s3上打上vlan tag 1000
- 随后s3将报文送往s2
- s2收到s3的vlan1000的报文,直接转送s4
- s4收到vlan1000的报文后,剥离vlan,送到h3
- h3收到请求报文后,返回响应报文,送往s4
- s4收到h3的报文后,打上vlan tag 1000
- 随后s4将报文送往s2
- s2收到s4的vlan1000的报文,直接送往s3
- s3收到s2的vlan1000报文后,剥离vlan,送往h1
h1-h3流表
1 | $ ovs-ofctl dump-flows s2 |
h2-h4流表
1 | $ ovs-ofctl dump-flows s2 |
命令列表
- h1-h3
1 | ovs-ofctl add-flow s2 in_port=1,dl_vlan=1000,actions=output:2 |
- h2-h4
1 | ovs-ofctl add-flow s2 in_port=2,dl_vlan=2000,actions=output:1 |