iptables 阻止另一个路由器的局域网访问

iptables 阻止另一个路由器的局域网访问

我设置了两个 Tomato 固件路由器。路由器 X 通过其 WAN 端口连接到互联网。路由器 Y 的 WAN 连接到路由器 X 的 LAN1 端口。我想限制路由器 Y,使其只能连接到互联网,而不能访问路由器 X 上的本地网络。我尝试在路由器 X 上使用这些 iptables:

iptables -I FORWARD -m mac --mac-source XX:XX:XX:XX:XX -d 192.168.1.0/24 -j DROP
iptables -I FORWARD -s 192.168.1.18 -d 192.168.1.0/24 -j DROP

我分别和一起尝试了这两条规则(在路由器 X 上),但我在连接到路由器 Y 时仍然可以访问路由器 X 上的局域网?(1.18 是路由器 Y 的 WAN 地址,它运行自己的 NAT 网络)

我已经在路由器 X 上尝试使用 TCPDUMP,甚至没有看到对 LAN 的流量访问,但它连接了吗?

网络布局

答案1

由于您没有提及路由器的品牌和型号,因此大致思路如下:消费级路由器通常由一个“WAN”端口和多个“LAN”端口组成。大多数廉价路由器 SoC 都有两个集成网络接口,一个用于 WAN,一个用于 LAN。当然,这与 LAN 端口的数量不匹配 — 有一个内置交换机。

在大多数路由器中,这些交换机实际上是可编程的。它们可以执行基于端口的 VLAN 和 VLAN 标记。这意味着您可以创建一个“物理分离的”网络接口。

通常是这样的:

   +-------------+  +--------------+
   |     CPU     |  |         LAN1 |--
 --| WAN     LAN |--| Switch  LAN2 |--
   +-------------+  |         LAN3 |--
                    +--------------+

无论连接到 LAN1(路由器 Y 所连接的位置)的是什么,都可以完全访问 LAN2 和 LAN3。

但是,我们可以重新配置交换机并创建两个 VLAN:

   +---------------+  +--------------+
   |     CPU       |  |    Switch    |
   |         LAN.1 |--| VLAN1   LAN1 |--
 --| WAN           |  +--------------+
   |         LAN.2 |--| VLAN2   LAN2 |--
   +---------------+  |         LAN3 |--
                      +--------------+

完成所有设置后,每个 VLAN 都将作为单独的网络接口出现在系统中。由于 LAN1 不再与 LAN2/3 位于同一广播域中,因此操作系统会接收流量并决定是否将数据包从 VLAN1 转发到 VLAN2。

为了避免混淆,您通常会为不同的 VLAN 选择不同的子网,因此路由器确实必须进行路由。:)

我不知道 Tomato 是否能做到这一点。OpenWrt 可以,如果我没记错的话,DD-WRT 也可以。它本质上是一个有线访客网络。

如果您无法提供这种级别的隔离,则需要尝试在路由器 Y 上进行过滤,使用类似以下规则:

iptables -A FORWARD -d 192.168.0.0/16 -j DROP
iptables -A FORWARD -d 172.16.0.0/12 -j DROP
iptables -A FORWARD -d 10.0.0.0/8 -j DROP

这当然依赖于路由器 Y 来执行您想要的策略。

答案2

问题是路由器 Y 不需要 FORWARD 链即可到达您的内部网络。其 WAN 接口为 192.168.1.18,因此到达此接口的任何发往 192.168.1.0/24 的数据包都将在本地路由,而无需到达 FORWARD。

我希望如果你在第二条规则中将 FORWARD 更改为 INPUT,事情就会按照你的预期开始工作:

iptables -I INPUT -s 192.168.1.18 -d 192.168.1.0/24 -j DROP

相关内容