我们正在使用一个云服务器(Debian Squeeze),公共IP上的公共端口将stream量传送到内部服务器。 我们正在寻找一种方法来使用IPTables和SSH基于ssh连接string的某些部分(或沿着这些线路)iptables将重新路由ssh连接到“正确”的内部服务器。 这将允许我们使用一个公共端口,然后将ssh连接重新路由到单个服务器。
所以,比如我们希望做一些如下的事情:
iptables使用该string的某些部分,或者使用类似的方法将连接重新路由到内部服务器
iptables -t nat -A PREROUTING ! -s xxx.xxx.xxx.0/24 -m tcp -p tcp --dport $EXTPORT -j DNAT --to-destination $HOST:$INTPORT
….其中$HOST
是服务器的内部IP, $EXTPORT
是面向公共端口, $INTPORT
是内部服务器端口。
看来,iptables的“string”方面并没有做我们想要的。
我们目前可以基于我们使用的IP表语法进行路由,但是依赖于每个服务器都有一个单独的公共端口,并希望使用一个公共的公共端口,然后根据某些部分SSH连接string或其他手段。
有什么build议么? 谢谢!
这是不可能的。 你和ssh服务器之间的通信是完全encryption的,iptables无法查看数据包内部,因此只能根据发送和接收端的IP /端口进行匹配。
我将在公共可访问的机器上设置不同的端口,并通过iptables将它们转发给后台的机器,然后在你的ssh客户端configuration(〜/ .ssh / config)中执行如下操作:
Host machineA HostName your-public-machine Port 12341 Host machineB HostName your-public-machine Port 12342 Host machineC HostName your-public-machine Port 12343
有了这个configuration,你可以运行ssh machineA
, ssh machineB
或者ssh machineC
并且到达正确的机器。