端口转发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

我使用谷歌search“知道一切”的答案,但这次失败了。 我想使用IPTABLES或任何其他工具,如rinetd。 我尝试了rinetd,但它不知为什么错误的道歉抱歉我的英语不好。 10Q

你是什​​么意思“rinetd错误eths”? 你在启动rinetd的时候出错了吗? 它是否开始,但不听你所期望的? 你在每台机器上都给了什么configuration? (你应该添加这个细节到你的问题)。

您描述的两个redirect的正确语法是:

89.40.xy 8001 85.121.ab 8001 85.121.ab 8001 86.34.cd 80 

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

 89.40.xy 8001 86.34.cd 80 

诀窍吗?

编辑:正如你所说你正在寻找有stream量到86.34.cd沿着与85.121.ab相关的路线旅行,那么你有一个路由问题。 您可以强制将特定地址的数据包路由到特定的接口:

 route add -host 86.34.cd eth1 

如果你运行命令route (没有参数),它会显示你当前的路由表,所以你可以在之前和之后做这个查看差异。 route del 86.34.cd将删除新的路由。 这假定来自eth1的设备stream量最终传送下来能够将数据包86.34.cd路由到正确的位置。

为了使更改成为永久的(所以它可以在重新启动后存活),您需要将命令添加到启动脚本中的适当位置(最好的方法取决于您正在运行哪个Linux变体)。 不要这样做,直到你已经确认它能够正常工作为止 – 你不希望意外地改变路由表,所以你不能从你当前的位置到达机器,并在重新启动后重新应用不正确的路由。

iptables端口转发会重写TCP报头,因此您的应用程序将看到来自转发链中最后一跳的数据包。 所以,如果这就是你想要破解,iptables端口转发不能帮助你。

IP欺骗可能会有所帮助,但这很复杂。 如果您的应用程序需要不能直接发送回原始发件人,它可能无法正常工作。

(我没有使用rinetd,所以我不能在那里发表评论。)

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

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