iptables通过NAT后面的URL路由/过滤stream量

我有以下configuration:

a DNS record of Xabc pointing to an ip address I a DNS record of Yabc pointing to the same ip I. Internet---->(RT)--->(FW)--+-->(MN) L-->(Beh) RT is a router (which i have no control over) that has I as left-hand IP and 10.4.255.13 as internal IP. FW is a firewall that has 10.4.255.190 as the left-hand IP and 192.168.0.1 as a right-hand IP. MN has an IP of 192.168.0.2 and Beh has an IP of 192.168.0.3 

FW有规定允许某些端口上的stream量,并根据这些端口转发到一个特定的IP。 例如,端口22被转发到MN(192.168.0.2)。

我有两台服务器,每台服务器在每个服务器Beh和MN的端口22上运行,我想要的是,根据你访问的URL,你连接到一个特定的服务器:

如果我ssh我@ Xabc我连接到MN。 如果我ssh我@ Yabc我连接到贝。

我可以用IPtables做这个吗?

正如Zoredache所说,这是不可能的。 SSH协议握手从服务器向客户端发送信息开始,因此甚至没有可以被编码的自定义解决scheme来执行某种特技代理。

也就是说,其他人说的使用多个端口的工作很好。 大多数基于GUI的SSH客户端都有一个很好的方法来保存会话,并设置端口是微不足道的,而不是一个问题。 不过,我将在这里快速跳出来,假设大部分您期望连接到此服务器的客户端都是基于文本的,并且您不希望在每次使用SSH时都键入-oPort=

这或许是一件让所有参与者的生活变得轻松的事情。 * nix系统上的标准SSH驱动命令行工具都使用相同的configuration方法。

在您的工作站的~/.ssh目录下,创build文件config 。 与处理SSH时几乎所有的权限一样,这将需要有权限: 600 。 在这个文件中,设置以下几行(假设你转发了端口2222和2223)

 Host Xabc Port 2222 Host Yabc Port 2223 

虽然这不是你所希望达到的目标,但是只需要设置一次,它就可以帮助客户端更有效地工作。 您的SSH客户端将根据此configuration的工作站的主机名透明地“做正确的事情”。 另外,依靠SSH的工具也会做正确的事情(git,scp等)。

对不起,但这是不可能的。 与http不同的是,目标的DNS名称在客户端被parsing,并且不以协议的一部分作为防火墙可以看到的任何方式传递。