如何在Open vSwitch中配置流规则阻止端口A到端口B的流量?
解决方案:阻止OVS端口A到端口B的流量
OVS的流表规则**默认基于入站流量(in_port)**进行匹配,无法直接在匹配条件中指定out_port(因为此时交换机还未确定转发目标端口)。要实现「阻止端口A发往B的所有流量,但B可接收其他端口流量」的需求,可通过以下步骤操作:
核心思路
添加一条高优先级流规则,匹配从端口A进入、且目的是端口B的流量,并执行丢弃动作;同时保留默认的正常转发规则,确保其他端口到B的流量不受影响。
具体操作步骤
1. 获取必要信息
首先获取交换机桥名、端口A/B的编号或MAC地址:
- 查看桥名:
ovs-vsctl show - 查看端口编号:
ovs-ofctl show <桥名>(输出中每个端口会标注编号,如port 1: portA) - 查看端口B的MAC地址:
ovs-vsctl get port <portB名称> hw_addr
2. 添加流规则
示例(假设桥名为br0,端口A编号为1,端口B的MAC为aa:bb:cc:dd:ee:ff)
先添加默认转发规则(确保其他流量正常通行):
ovs-ofctl add-flow br0 priority=0,actions=NORMAL
再添加高优先级的拦截规则(优先级需高于默认规则):
ovs-ofctl add-flow br0 priority=100,in_port=1,dl_dst=aa:bb:cc:dd:ee:ff,actions=drop
如果使用OpenFlow 1.3及以上版本,可直接用端口名称代替编号:
ovs-ofctl add-flow br0 priority=100,in_port=portA,dl_dst=aa:bb:cc:dd:ee:ff,actions=drop
3. 验证规则
查看已添加的流规则,确认拦截规则存在:
ovs-ofctl dump-flows br0
关键说明
- 为什么不能用
out_port作为匹配条件?OVS的流规则是在流量进入交换机端口时进行匹配,此时交换机尚未确定要转发到哪个端口,因此out_port不属于入站流量的匹配字段,只能作为动作(如output:portB)使用。 - 该规则仅拦截从端口A发往B的流量,其他端口到B的流量会通过默认的
NORMAL动作正常转发,符合需求。
内容的提问来源于stack exchange,提问作者user3896606
相关产品推荐
相关产品推荐

