端口转发 IPTABLES 公网 IP

端口转发 IPTABLES 公网 IP

我有一台计算机 linuxbox_1.eth0 公共 ip 89.40.xy eth1 公共 ip 85.121.ab 我有另一台 linuxbox_2. ethx 公共 ip 86.34.cd

我想要做的是将端口 8001 从 linuxbox_1 eth0 89.40.xy:8001 转发到 linuxbox_1 eth1 85.121.ab,

然后再次将端口 8001 从 linuxbox_1 eth1 85.121.ab:8001 转发到 linuxbox_2 ethx 86.34.cd:80

我使用“无所不知”的谷歌搜索答案,但这次失败了。我想使用 IPTABLES 或任何其他工具,如 rinetd。我尝试了 rinetd,但它不知何故误认为 eths,抱歉我的英语不好。10q

答案1

您所说的“rinetd 错误地使用 eths”是什么意思?启动 rinetd 时是否出现错误?它是否启动了但没有像您预期的那样监听?您在每台机器上对其进行了什么配置?(您应该将此详细信息添加到您的问题中)。

您描述的两个重定向的正确语法是:

89.40.x.y     8001    85.121.a.b    8001
85.121.a.b    8001    86.34.c.d     80

但如果 89.40.xy 和 85.121.ab 都与同一台服务器上的接口相关联,那么单行

89.40.x.y     8001    86.34.c.d     80

有用吗?

编辑:正如您所说,您希望将到 86.34.cd 的流量沿着与 85.121.ab 关联的路由传输,那么您就遇到了路由问题。您可以使用以下命令强制将特定地址的数据包路由到特定接口:

route add -host 86.34.c.d eth1

如果您运行该命令route(不带参数),它将显示您当前的路由表,因此您可以在前后执行该命令以查看差异。route del 86.34.c.d将删​​除新路由。这假设来自 eth1 的设备流量最终能够将 86.34.cd 的数据包路由到正确的位置。

要使更改永久生效(这样它在重启后仍然有效),您需要将命令添加到启动脚本中的适当位置(最佳方法取决于您运行的 Linux 版本)。不过,在确认它按预期工作之前不要这样做 - 您不想意外更改路由表,这样您就无法从当前位置访问机器,并且在重启后重新应用错误的路由。

答案2

iptables 端口转发会重写 TCP 标头,因此您的应用程序将看到来自转发链中最后一跳的数据包。因此,如果您试图破解该数据包,iptables 端口转发将无济于事。

IP 欺骗可能有帮助,但很复杂。如果您的应用程序无法直接将信息发送回原始发送者,那么它可能无法正常工作。

(我没有使用过 rinetd,所以我无法发表评论。)

答案3

可以使用 iptables 的DNAT目标(在 nat 中PREROUTING)来完成。但清单中的几件事是:

  • net.ipv4.ip_forward=1
  • iptables 的FORWARD链也允许转发这些数据包
  • 请求的源(IP)也正在被翻译(SNAT/ MASQUERADE),否则目的地将尝试直接回复(或者除非它被正确路由回来,就像它使用 DNATing 盒作为其网关的情况一样)。

相关内容