通过代理进行 mosh 隧道

通过代理进行 mosh 隧道

我越来越喜欢莫什当我的 wifi 连接不稳定时,我就会越来越多地使用它。我想弄清楚如何通过 DMZ(连接到互联网和防火墙网络)中的服务器建立隧道。

我目前使用 ssh 的解决方案是编辑.ssh/配置包括如下行:

Host server-behind-firewall
  ProxyCommand ssh server-in-dmz nc %h %p

我还想出了如何使用 ssh 来执行一条腿并 mosh 另一条腿:

ssh -t server-in-dmz mosh server-behind-firewall

在 dmz 中的服务器和防火墙后面的服务器之间,我使用屏幕建立了一个 mosh 会话。

但我真正想要的是端到端地使用 mosh。我猜我必须安装 server-in-dmz 才能让 mosh-server 监听。但 mosh-server 的手册页说“如果 60 秒内没有客户端联系它,它将退出。”

简单来说,问题是:如何与多个主机建立 mosh 隧道?

答案1

你可能想尝试石头,这是一个 TCP 和 UDP 数据包转发器。这实际上意味着您可能具有以下配置:

你 <---> dmz 服务器上的 Stone <---> 防火墙后面的服务器

换句话说,让 server-in-dmz 监听端口 X,以便将 SSH 数据包转发到防火墙后面的服务器,同时监听另一个端口 Y,以便将 UDP 数据包转发到防火墙后面的服务器的端口 60000,以供 mosh 服务器使用。

您必须使用以下命令连接到 mosh:

mosh -p 60000 --ssh='ssh -p PORT_X' server-in-dmz

答案2

除了按照@Hengjie 的建议在应用层转发流量之外,您还可以使用 iptables(在 server-in-dmz 上):

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 11559 -j DNAT --to-destination 178.254.55.220:22
iptables -t nat -A PREROUTING -p udp -m udp --dport 60159:60168 -j DNAT --to-destination 178.254.55.220
iptables -t nat -A POSTROUTING -j MASQUERADE
sysctl -w net.ipv4.ip_forward=1

然后使用mosh -p 60159 --ssh='ssh -p 11559' server-in-dmz

笔记:

  • 似乎没有办法将 mosh-port 放入配置文件中。:(
  • 我随机选择了端口。
  • 如果你这样做,你可能需要一些额外的 iptables 配置...
  • 编辑:最好对整个端口范围进行 DNAT,因为很有可能你会意外地关闭 mosh 客户端而不带走服务器。如果你不转发范围,你将不得不 ssh 到你的服务器并关闭正在运行的 mosh 服务器。如果你一开始就连接不好,这可能会有点烦人。
  • 我的用例是通过碘进行 mosh。

相关内容