我有一台电脑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 FORWARD链允许转发这些数据包 SNAT / MASQUERADE ),否则目的地将尝试直接回话(或者除非它正确路由回来,就像它使用DNATing盒作为其网关一样)。