在 Linux 中无需 NAT 即可连接两个 LAN

在 Linux 中无需 NAT 即可连接两个 LAN

我有一台地址为 192.168.3.2 的 PC。它连接到路由器 192.168.3.1。路由器 192.168.3.1 连接到另一个静态地址为 192.168.88.6 的 LAN。192.168.8.1 处的路由器为 192.168.3.0/24 和 192.168.88.0/24 提供互联网访问。还有一个服务器 192.168.88.51

我希望 192.168.3.2 能够访问 192.168.88.51,而无需 NAT。主要原因是我需要查看来自 192.168.3.0/24 的客户端 IP,而不是其 SNATted 地址 192.168.88.6

3.2 -> 3.1/88.6 -> 88.1 -> internet
                    ^
                    |
                  88.51

使用 NAT:

192.168.3.0/24 可以通过其默认路由访问 192.168.88.0/24(和互联网)

如果我在 192.168.3.1 上有 SNAT,那么一切都正常:-A POSTROUTING -o wan -j SNAT --to-source 192.168.88.6

无 NAT:

192.168.3.0/24 仍然可以通过其默认路由访问 192.168.88.0/24(和互联网)

对于 192.168.88.1 的路由器,我通过 192.168.88.6 添加了到 192.168.3.0/24 的静态路由

我删除了 192.168.3.0/24 -> 192.168.88.0/24 的 SNAT 规则(但我仍然可以访问互联网)

但它不起作用,因为 192.168.88.1 有规则,在 FORWARD 链中丢弃无效(ctstate)数据包

如果我在该规则之前添加类似的规则-A FORWARD -i br0 -o br0 -m conntrack --ctstate INVALID(或者根本没有 conntrack),一切都会正常,但我不喜欢这样

FORWARD 链中的其他规则:

-A FORWARD -i br0 -o ens18 -m conntrack --ctstate NEW -j ACCEPT # internet access
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -m conntrack --ctstate INVALID -j DROP
-A FORWARD -m conntrack --ctstate DNAT -j ACCEPT

在 192.168.3.1 上,我根本没有修改 FORWARD 链。它只有br0 -> wan规则。那么 192.168.3.1 将这些数据包标记为 RELATED/ESTABLISHED 吗?然后愉快地 FORWARD 回去?

记录的数据包:IN=br0 OUT=br0 MAC=xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx SRC=192.168.88.51 DST=192.168.3.2 LEN=60 TOS=0x00 PREC=0x00 TTL=63 ID=0 DF PROTO=TCP SPT=xxxx DPT=57416 WINDOW=65160 RES=0x00 ACK SYN URGP=0

我有一个问题:

  • 为什么数据包被标记为无效?192.168.3.0/24 可以访问互联网,因此 192.168.88.1 上的 WAN 接口的数据包可以正确跟踪
  • 为什么同一接口(br0)但不同 LAN 之间存在 FORWARD?
  • 我还需要了解/检查/调试什么吗?

更新

我终于明白了,该请求直接从 192.168.3.1 到 192.168.88.51 跳过 192.168.88.1,因为它通过 192.168.88.6 地址属于同一子网

但回复通过 192.168.88.1,因为 192.168.88.51 没有到 192.168.3.0/24 的路由,应该使用路由器 192.168.88.1

正确的解决方法是什么?将 192.168.88.6/32 分配给 192.168.3.1 路由器会导致 192.168.88.0/24 完全无法访问

仅为路由器创建单独的 LAN?

答案1

如果你的192.168.88.0/24子网全部桥接在一起,你根本不需要转发,只要告诉192.168.88.51它可以192.168.3.0/24通过192.168.88.6

ip route add 192.168.3.0/24 via 192.168.88.6

正如您所说的那样,打开的设备192.168.3.0/24将能够通过默认路由返回。

如果你想继续192.168.88.51使用其默认路由,你只需要绕过丢弃数据包的规则,这应该可以通过-A FORWARD -i br0 -o br0 -j ACCEPT

相关内容