OpenSSH中继为特定的主机

目前我负责一个公司的networking,这个公司有不同的子域名,指向同一个IP地址,用于不同的目的。 我们有他们的网站example.com和他们的Gitlab实例的gitlab.example.com。
目前我们希望将Gitlab实例移动到同一networking上的不同服务器上。 对于Gitlab的Web-UI,我们使用nginx作为另一个服务器IP的反向代理,并用于pipe理SSL证书和主机。
但是现在我们遇到了问题,我们无法build立到这台服务器的ssh连接,因为WAN端口被转发到web服务器而不是新的gitlab服务器,我们需要这个端口指向web服务器。 但也因为我们有的项目数量,我们不能改变港口。 (我们没有时间在git中重新configuration所有这些项目)

有没有可能让networking服务器像gitlab服务器的中继? 这样每个到gitlab.example.com的连接都被转发到这个特定的服务器上?

谢谢你的帮助!!

一个简单的答案是:

  1. 更改命令并控制非gitlab服务器的SSH端口为2222,这样就没有端口冲突
  2. 安装HA Proxy并在端口22上安装一个L4(TCP,而不是HTTP)监听器
  3. 将HA代理池的后端设置为gitlab服务器,端口22

这会将所有的SSH(端口22)stream量从外部服务器redirect到内部服务器。

这也可以通过IPTables的DNAT / SNATing来完成,但是它比上面的解决scheme复杂得多。 一个未经testing的例子是:

iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 22 -j DNAT --to <gitlabIP>:22 iptables -t nat -A PREROUTING -p tcp --dport 22 -j DNAT --to <gitlabIP>:22 iptables -t nat -A POSTROUTING -p tcp -d <gitlabIP> --dport 22 -j MASQUERADE