将某个端口上的所有请求转发到网络上的另一台计算机的最佳方法是什么?

时间:2008-11-29 20:06:22

标签: networking tcp dns port iptables

我有两台专用服务器,没有硬件防火墙。我想转发进入端口1008上主服务器的所有请求,以便由同一网络上的另一个专用服务器来完成。我知道我需要设置某种TCP代理,但我昨天第一次听说过IPTables。有什么快速提示吗?

3 个答案:

答案 0 :(得分:2)

最简单的方法是使用只是TCP代理的东西。使用iptables可以实现这一点,但并不容易。

很容易将来自A的请求从B转发到C(使用DNAT),但很难让C的响应通过B返回A(因为DNAT不会更改发送方地址)。然后A会忽略响应,因为它们来自C而不是B.

基本上,这样做的方法是将B设置为C的默认网关,然而使用转发,这会在B中产生额外的故障点;如果B失败,C的出站流量(包括对直接发送给C的请求的响应)将最终落入黑洞。

使用IPtables我可以在没有这种路由技巧的情况下使用,但你需要使用相同的连接SNAT和DNAT,这在最好的情况下是很棘手的。

通常在这种情况下,大多数人会在两台计算机前放置另一台主机(防火墙)并让它做出DNAT决定 - 当然这也会引发故障点,这就是为什么在关键设置中,防火墙通常有一个rendundant备份(它的配置是同步的,有时它的连接跟踪表是)

答案 1 :(得分:1)

首先,我会建议您安装防火墙。我已经使用Shorewall很长时间来管理iptables,它很容易配置。其次,如果您使用像Shorewall这样的东西,那么很容易guides on how to do DNAT (port fowarding)

答案 2 :(得分:1)

Carson是对的:在服务器和客户端之间建立桥接防火墙。然后,Shorewall(IP表)可以将流量重定向到不同的端口和不同的机器。

将防火墙作为桥接器,您不必更改网络设置,但必须为桥接接口分配每个网络客户端和服务器所在的IP地址。否则重定向将不起作用。< / p>

警告:最初指向连接的机器必须在线(意味着:其IP地址必须在使用中),否则重定向将无效。

如果重定向是高可用性故障转移的一种方法,我会考虑使用负载均衡器(集群)而不是防火墙,这会导致Linux虚拟服务器(用于一般方法)或负载均衡器软件像Apache(使用mod proxy_balancer),balance或pount(如果只需要平衡http请求)。还有来自f5的硬件设备,用于负载平衡。