IPTables 端口转发保留原始 IP 地址

IPTables 端口转发保留原始 IP 地址

我希望有人能帮我完成这个配置。我已经有一个可用的设置,其中 Linux 机器充当路由器,只为公共 IP 进行端口转发。顺便说一下,这些都是公共 IP。

HOST_x - 可以是任何具有公共 IP 的主机。(例如:xxxx)

MY_LINUX - 使用 IPtables 仅为公共 IP 进行端口转发。(固定 IP,例如:2.2.2.2)

服务器 - 具有公共 IP 地址的 Web 服务器。(固定 IP,例如 3.3.3.3)

端口 — (TCP 端口 = 80)

这是 MY_LINUX 上的配置:

iptables -t nat -A PREROUTING -p tcp -d 2.2.2.2 --dport 80 -j DNAT --to-destination 3.3.3.3:80 iptables -t nat -A POSTROUTING -p tcp -d 3.3.3.3 --dport 80 -j MASQUERADE

上述配置有效。当 HOST_x 在浏览器上输入 2.2.2.2 时,它会从 3.3.3.3 获取网页。

我这里唯一遇到的问题是,目标服务器(3.3.3.3)看到来自MY_LINUX(2.2.2.2)的请求,我想要看到的是请求HOST_x(xxxx)的原始IP。

我将非常感激任何建议,谢谢。

答案1

我认为这在第 3 层是不可能的。HOST_x 期望剩余的数据包来自它发起连接 MY_LINUX 的主机。如果 SERVER 突然介入 TCP 握手和回复,HOST_x 就会忽略这些数据包。

由于 HOST_x 和 SERVER 具有直接连接,我认为最好将此路由方案移至应用层并实现 HTTP 重定向。然后 HOST_x 直接打开到端点的连接。

答案2

如果您也可以访问 Web 服务器(或其网关),则可以执行此操作。我想到的唯一解决方案是在路由器和 Web 服务器之间建立隧道。然后,Web 服务器(网关)可以将所有回复数据包发送到路由器,而无需调整目标地址。如果这是您的选择,那么我将查看详细信息。

相关内容