所以我在AWS上设置了2个实例,所以我可以直接从我的家用机器(A,B)连接到它们。
但我想设置框A,以便我可以将某些UDP和TCP连接从它转发到框B.
IPtables似乎是我想要的(rinetd会很好,但似乎项目已经死了,而且只覆盖了TCP)。
我跟着各种教程,但他们似乎并没有工作+我想我会需要另一个规则无论如何。
这些是我在框A上configuration它们的规则,用于通过框A转发SSH会话到B:
iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 1044 -j DNAT --to-destination B:22 iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source A
我把它看作'把端口1044上接收到的TCP数据包,把它们的目的地从A框改成B框',然后'当我把修改过的数据包发送回networking时,把它们的源改成我自己(A)'
教程似乎认为只有这两个命令是需要的,但它们不起作用。
我想知道如何方块A应该从B的反应,并修改他们的来源本身+转发他们回到C …
首先,我认为你可能需要启用IP转发。
sysctl -w net.ipv4.ip_forward = 1
让你的机器成为一个路由器。 关于IP转发的全部细节在这里 。
其次,我不会发誓,但是你的iptables规则对我来说是错误的。 看来你需要更多这样的东西:
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 1044 -j DNAT --to-destination B:22 iptables -A FORWARD -p tcp -d B --dport 22 -j ACCEPT
如果您的默认策略是接受,您可能不需要第二行,那么可能只是您没有启用IP转发。 然而,你在做什么有点奇怪,数据包进出相同的接口。 我从来没有尝试过。
你的第二个POSTROUTING行,这似乎是错误的或误导。 如果您完全需要这条线路,您可能需要将滤波器缩小到端口22到B.
另外,tcpdump是你的朋友! 使用tcpdump来查看这些进出的数据包是否真的被修改。