将纯 LAN 通信重定向到不同的接口和端口 (Linux)

将纯 LAN 通信重定向到不同的接口和端口 (Linux)

我有以下情况:
一个接口(设备)的 IP 地址为 192.168.1.x (I1),它通过任何服务连接到同一 LAN 上的另一个 IP 为 192.168.1.y (I2) 的接口和端口 (P2)。现在我想将从 I1 发送到 I2:P2 的所有帧/数据包(一般为数据)重定向到同一 LAN 上的另一个 IP 地址为 192.168.1.z (I3) 且端口 (P3) 的设备。

我尝试过的:
我研究了一下,iptables但最终发现它们(特别是 nat 表)只对进入外部网络(WAN)的数据包起作用。例外情况是,当在连接设备(I1)上设置规则时,这些 shell 命令可以完成这项工作:

iptables -t nat -A OUTPUT -p tcp -d I2 --dport P2 -j DNAT --to I3:P3
iptables -t nat -A INPUT -p tcp -s I3 --sport P3 -j SNAT --to I2:P2

因为我想在本地路由器上应用规则,所以我尝试查看 I1 和 I2 之间的通信是否通过它:
iptables -t raw -I PREROUTING -s I1 -d I2 -j LOG
很可能没有,因为我找不到这两个 IP 的任何日志(日志文件位于/var/log/消息)。

我开始意识到 LAN 通信是通过交换机使用 MAC 地址进行的,并且无法在那里捕获,这是真的吗?我猜想“交换机”在物理上与路由器在同一个盒子里。

最后,我想我甚至可能不需要重定向,只需在 I2(一个虚拟接口)上运行所需的服务,但这不是问题所在。

所以我的主要问题是:
是否可以重定向来自I1I2:P2在里面交换机/路由器它经过的地方,所以目的地是I3:P3然后 I3 可以以相同的方式做出响应(伪装成 I2:P2)而 I1 不会注意到?

我猜这可能无法实现,并且此级别的重定向与(虚拟)桥有关。如果是这样,是否可以以其他方式实现相同的结果?我只能修改交换机和 I2、I3 接口(不是 I1)。

答案1

您显然处于同一个网络段上,并且正如您所猜测的 - 在这种情况下,流量不会通过路由器。

有两个地方可以进行必要的调整:

  1. 仅需要对传出的数据包进行 DNAT 的原始设备(I1):

    iptables -t nat -A OUTPUT -p tcp -d I2 --dport P2 -j DNAT --to I3:P3
    
  2. 第二台设备(I2)需要 DNAT 和 SNAT,并且必须启用数据包转发:

    iptables -t nat -A PREROUTING -p tcp -s I1 -d I2 --dport P2 -j DNAT --to-destination I3:P3
    iptables -t nat -A POSTROUTING -p tcp -s I1 -d I3 --dport P3 -m conntrack --ctstate DNAT -j SNAT --to-source I2
    

答案2

您只能在您的I1设备上进行此修改并使用 iptables NAT 或类似程序。

如果您在当前 LAN 中设置了单独的 IP 子网,以便xy位于不同的子网,那么您可以在路由器中执行此目标操作,因为数据包将穿过路由器。

相关内容