Swow今天支持多线程了吗?

没有。

nftables OpenWRT和交换机二层防火墙

这几天试图用openwrt代替哇为交换机做DHCP域的隔离,遇到了亿点点问题,这里记一下

准备

需要fw4的openwrt,(fw3的配合br_netfilter和ebtables大概也能用,但这里肯定是讲nft了)

接口配置

大约是同一个交换机下直接走硬件转发了,直接用nft配置桥过滤大约是不能用的

可以在你的设备上手动测试一下:

nft create table bridge filter
nft create chain bridge filter forward '{type filter hook forward priority 0; policy drop;}'

然后在桥的两个不同端口上互相ping下,如果还能通,说明交换没有过cpu,就要用以下的骚操作了,如果已经不通了,就可以跳到nft过滤

绕来绕去的配置

我的设备红米AC2100配置非常水的直接用的7621的内置千兆phy导出来4个接口,新OpenWRT的DSA下分别是lan1-3@eth0和wan@eth0,其中三个lan通过桥br-lan进行桥接

两个dhcp域分别在lan1和lan2

先更改下配置(luci配置比较简单,uci/直接改文件有点脑子转不过来):

在Network/Interfaces的Devices选项卡中配置br-lan:

  1. Bridge VLAN filtering中打开Enable VLAN filtering
  2. 添加vlan 1,lan1为untagged,PVID,其余为关
  3. 添加vlan 2,lan2为untagged,PVID,其余为关

经过这波操作,我们已经将两个lan变成俩vlan了,先不要应用,因为访问路由器的接口从br-lan变成br-lan.1了,应用了路由器就失联了

回到Network/Interfaces的Interfaces选项卡,将lan接口的接口配置改为br-lan.1,这时可以保存,验证是否还能正常访问

接下来在Network/Interfaces的Devices选项卡中添加一个配置,设备类型为桥设备,名字随便起,我就叫br-test了,桥端口选择br-lan.1和br-lan.2,这时还是不要应用

回到Network/Interfaces的Interfaces选项卡,将lan接口的接口配置改为br-test,这时可以保存,验证是否还能正常访问

经过以上的骚操作,我们已经将硬交换变成软交换了,就可以下一步写过滤了

nft过滤

再次验证是否可行:

nft create table bridge filter
nft create chain bridge filter forward '{type filter hook forward priority 0; policy drop;}'

如果ping不通了,说明软交换可以做转发过滤了,接下来

nft delete chain bridge filter forward
nft create chain bridge filter forward '{type filter hook forward priority 0; policy accept;}'
# dhcp
nft add rule bridge filter forward udp dport { 67, 68, 546, 547 } drop
# ra
nft add rule bridge filter forward icmp type { router-solicitation, router-advertisement } drop
# nd
nft add rule bridge filter forward icmpv6 type { nd-router-solicit, nd-router-advert } drop

具体要drop哪些自己决定,参考 nft官方的快速指南

接下来持久化配置

通过nft list ruleset可以看到所有配置

table bridge filter {
        chain forward {
                type filter hook forward priority 0; policy accept;
                udp dport { 67, 68, 546, 547 } drop
                icmpv6 type { nd-router-solicit, nd-router-advert } drop
                icmp type { router-advertisement, router-solicitation } drop
        }
}

不管fw4那些,把我们的表复制粘贴下来保存到/usr/share/nftables.d/ruleset-post/some.nft,通过fw4 reload重新加载路由表,就完事啦

参考 openwrt相关问答 fw4自定义规则说明

文章评论已关闭