启用Floodlight SDN控制器防火墙规则后主机仍可Ping通的问题排查
我来帮你梳理下这个问题——你已经启用了Floodlight的防火墙模块,但Mininet里的主机依然能互相ping通,这大概率是因为你只打开了防火墙功能,却没添加具体的拦截规则,或者还有其他配置细节没到位。下面是一步步的排查和解决方法:
1. 先确认防火墙模块是否真的成功启用
别想当然认为启用命令执行成功了,先验证状态:
curl http://192.168.56.107:8080/wm/firewall/module/status/json
如果返回{"enabled":true},说明模块确实启用了;如果是false,检查你的启用命令是否有拼写错误,或者Floodlight的REST端口是不是8080(默认是,但如果改了配置就需要对应调整)。
2. 关键:必须手动添加防火墙规则
启用防火墙模块只是打开了这个功能,但默认没有任何规则,所有流量都是允许通过的。你需要通过REST API添加具体的拒绝规则才能拦截流量。比如要拦截所有ICMP(ping)流量,可以用这个命令:
curl -X POST -d '{"protocol":"ICMP","action":"DENY"}' http://192.168.56.107:8080/wm/firewall/rules/json
如果只想拦截特定主机之间的ping,比如h1(10.0.0.1)到h2(10.0.0.2)的ICMP:
curl -X POST -d '{"src-ip":"10.0.0.1/32","dst-ip":"10.0.0.2/32","protocol":"ICMP","action":"DENY"}' http://192.168.56.107:8080/wm/firewall/rules/json
添加完规则后,可以用下面的命令查看已生效的规则列表,确认规则是否正确添加:
curl http://192.168.56.107:8080/wm/firewall/rules/json
3. 检查OpenFlow版本兼容性
你启动Mininet时用了--switch=ovsk,protocols=OpenFlow13,要注意部分版本的Floodlight防火墙模块对OpenFlow 1.3的支持可能不够完善。如果添加规则后还是没效果,可以先试试降级到OpenFlow 1.0:
sudo mn --topo=linear,2 --mac --controller=remote,ip=192.168.56.107 --switch=ovsk,protocols=OpenFlow10
重新创建拓扑后再添加规则测试,看是不是版本适配的问题。
4. 确认控制器与交换机的连接状态
打开Floodlight的Web UI(默认地址是http://192.168.56.107:8080/ui),或者查看Floodlight启动控制台的日志,确认两台交换机是否成功注册到控制器。如果交换机没上线,防火墙规则根本无法下发到交换机,自然不会对流量产生任何影响。
5. 验证主机IP与MAC的映射正确性
你用了--mac参数,主机的MAC地址应该对应IP:h1是00:00:00:00:00:01对应10.0.0.1,h2是00:00:00:00:00:02对应10.0.0.2。添加规则时要确保IP地址没有写错,否则规则无法匹配到实际流量。
内容的提问来源于stack exchange,提问作者Prarthana Shedge

