两台Internet机器之间的端口转发

这是我的场景:

build立

有3台机器:

A :在互联网上:有ip( aaaa ),有端口pa打开

B :我的服务器/网关:有ip( bbbb ),有端口pb打开

C :在网上:有ip( cccc ),有端口pc打开

约束

机器A的所有者通过端口pa提供必须通过端口pc在机器C上访问的服务。 问题是, A的所有者只能允许直接连接到我的服务器,端口pb上的机器B

请注意, AC都在互联网上 ,所以实际上,我必须充当互联网上两台机器之间的网关(我在大多数防火墙文档中发现的文献都充当互联网和本地之间的网关networking)。

附加function

机器B正在运行OpenSuse 11.4

要求

我的任务是确保我通过服务器B为机器C提供由A提供的服务,使得来自A:pastream量以C:pc结束,而来自C:pcstream量以A:pa结束。

那么,如何使用iptables或其他Linux / Unix工具来实现呢? 这甚至有可能吗?

假设解决scheme:

这是我想到的一个想法,但我不确定它是合法的还是合理的:

 iptables -t nat -A PREROUTING -p tcp --source aaaa --source-port pa \ --destination bbbb --destination-port pb -j DNAT --to-destination cccc:pc 

 iptables -t nat -A PREROUTING -p tcp --source cccc --source-port pc \ --destination bbbb --destination-port pb -j DNAT --to-destination aaaa:pa 

我假设C连接到A:pa(这不是很清楚)。 您需要在B上执行DNAT和SNAT以从C:

 iptables -t nat -A PREROUTING -p tcp -s cccc -d bbbb --dport pb -j DNAT --to-destination aaaa:pa iptables -t nat -A POSTROUTING -p tcp -d aaaa --dport pa -j MASQUERADE