这是我的情况:
设置
有3台机器:
A
:在互联网上:有 ip ( a.a.a.a
),有pa
开放端口
B
:我的服务器/网关:有 ip(b.b.b.b
),端口pb
开放
C
:在互联网上:有 ip ( c.c.c.c
),有pc
开放端口
约束
机器的所有者A
通过端口提供服务,但必须通过端口pa
才能在机器上访问。问题是, 的所有者只能允许直接连接到我的服务器,即端口 上的机器。C
pc
A
B
pb
注意,A
和C
在互联网上,因此实际上,我必须充当互联网上两台机器之间的网关(我在大多数防火墙文档中发现的文献都涉及充当网关在互联网和您的本地网络)。
更多
机器B
正在运行 OpenSuse 11.4
要求
我的任务是确保通过我的服务器为机器提供C
所提供的服务,以便来自的流量最终到达,并且来自的流量最终到达。A
B
A:pa
C:pc
C:pc
A:pa
那么,我该如何实现这一点,比如使用iptables
或其他 Linux / Unix 实用程序?这可能吗?
假设解决方案:
这是我心中的一个想法,但我不确定它是否合法或有意义:
iptables -t nat -A PREROUTING -p tcp --source a.a.a.a --source-port pa \
--destination b.b.b.b --destination-port pb -j DNAT --to-destination c.c.c.c:pc
和
iptables -t nat -A PREROUTING -p tcp --source c.c.c.c --source-port pc \
--destination b.b.b.b --destination-port pb -j DNAT --to-destination a.a.a.a:pa
答案1
我假设 C 正在连接到 A:pa(不太清楚)。您需要在 B 上执行 DNAT 和 SNAT,以便从 C 进行以下连接:
iptables -t nat -A PREROUTING -p tcp -s c.c.c.c -d b.b.b.b --dport pb -j DNAT --to-destination a.a.a.a:pa
iptables -t nat -A POSTROUTING -p tcp -d a.a.a.a --dport pa -j MASQUERADE