OpenWRT 允许人们以多种方式配置路由器上的交换机 - 执行 VLAN 等。
但是 OpenWRT 是否可以像交换机一样运行,但也可以执行基于 IP 的过滤器 - 允许从端口 A 到 B 的所有流量,反之亦然,但阻止从端口 A 到某些 IP 地址的流量,并且由于路由器/调制解调器在那里,该流量通常会流向端口 B?
我需要阻止到特定 IP 地址的流量。路由器/调制解调器太笨,无法进行防火墙过滤。我无法在路由器后进行 NAT,因为它需要直接访问 wifi 点。因此,我唯一的机会是将 wifi 点连接到可以从路由器/调制解调器的流量中进行 IP 过滤的交换机。
答案1
您应该购买具有两个“真正”以太网接口的设备。一些超便宜的路由器实际上只有一个以太网接口,并使用内置交换机上的基于端口的 VLAN 将这个接口拆分为多个。这将严重限制可实现的吞吐量/带宽。您可能无论如何都无法使用这些(不支持 OpenWrt)。
MikroTik 发布了大多数路由器的基准测试,您可以检查这些基准测试以找到合适的设备。
您必须确保设备已连接到现有网络,这样任何流量都无法绕过其 CPU。在典型的路由器上,您只需将 WAN 端口连接到上行链路路由器(您现有的调制解调器/路由器设备),其余所有设备都连接到 LAN 端。
为了得到你想要的东西你现在必须做以下事情:
- 禁用 DHCP 等
- 在软件中桥接 WAN 和 LAN
在此过程中,您必须确保桥接路由器仍然可以通过网络以适当的 IP 地址访问。
如果一切顺利,您的路由器现在应该在其以太网接口之间桥接流量,并且您的网络基本上应该像以前一样工作。
您现在可以设置影响桥接流量的防火墙规则了。
我已经有好几年没有使用过 OpenWrt 了,而且关于这个特定主题的文档至少可以说严重缺乏。希望其他人可以在此贡献/验证具体步骤。
这文档仅提供起点:
opkg update
opkg install kmod-nft-bridge
可以在/etc/firewall.user
脚本中添加自定义规则(常规 Linux 风格)。它们看起来像这样:
nft add rule bridge filter forward iif eth1 oif eth2 ether type ip tcp dport 9999 drop
根据需要调整接口和协议、过滤器。
也可以使用nft list ruleset
类型语法编写上述命令,然后将其包含/etc/config/firewall
如下内容:
config include
option type 'nftables'
option path '/etc/my_bridge_firewall.nft'
option position 'table-post'
再次强调:这一切都尚未得到证实。
MikroTik 路由器操作系统支持桥接过滤所以不需要在这些设备上安装 OpenWrt。
/interface bridge filter
add action=drop chain=forward in-interface=ether3 out-interface=ether2 mac-protocol=ip ip-protocol=tcp dst-port=9999 comment="Disallow TCP port 9999"
根据需要调整接口和协议、过滤器。在 Winbox 和 Webfig 中,您可以在 Bridge → Filters 中找到这些设置。您必须按照上面列出的顺序选择协议,否则某些字段将被禁用。
您还可以强制桥接流量使用“完整”IP 防火墙,方法是use-ip-firewall
启用桥接中的设置。这可能会慢很多。
硬件卸载会干扰过滤器,因为交换芯片会在内部处理流量。不过,它不适用于 CPU/SoC 上物理接口之间的桥接。
桥接快进也可能会干扰过滤器,因此可能必须将其禁用。