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

问题描述 投票:0回答:4

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

networking tcp dns port iptables
4个回答
2
投票

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

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

本质上,这样做的方法是将 B 设置为 C 的默认网关,并使用转发,但是,这会在 B 中增加一个额外的故障点;如果 B 失败,C 的出站流量(包括对直接发送到 C 的请求的响应)最终将陷入黑洞。

使用 IPtables,我认为无需此路由技巧也是可能的,但您需要具有相同的 SNAT 和 DNAT 连接,这充其量是棘手的。

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


1
投票

卡森是对的:在服务器和客户端之间放置桥接防火墙。 Shorewall(IP 表)可以将流量重定向到不同的端口和不同的机器。

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

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

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


1
投票

首先我建议您安装防火墙。我已经使用 Shorewall 来管理 iptables 很长时间了,它的配置非常容易。其次,如果您使用 Shorewall 之类的工具,那么有简单的 有关如何进行 DNAT(端口转发)的指南


0
投票

对于 15 年后偶然发现这篇文章的人,请查看socat。这是一个专门为此目的而构建的工具,具有许多出色的功能!

© www.soinside.com 2019 - 2024. All rights reserved.