我需要一个从我家到私有 IP 10.4.100.6的 SSH 隧道,如下图所示:
+-------+ +-----------------+ +------------+ +-------------+
| | | | | | | |
| Home +----+ foo.example.com +--+ 10.4.100.5 +--+ 10.4.100.6 |
| | | | | | | |
+-------+ +-----------------+ +------------+ +-------------+
我对10.4.100.5和10.4.100.6具有 root 访问权限。我对foo.example.com的访问权限为零。当我 ssh 到foo.example.com时,我不知何故登陆了10.4.100.5,这是一个不同的主机。我们正在谈论 4 个独立的主机。我假设foo.example.com使用一对一的 NAT。
我试过了:
ssh -L 8080:10.4.100.6:80 [email protected]
没运气。有小费吗?
编辑:事实证明隧道有效,但不适用于 websockets。连接ws://localhost:8080
失败:
<snip> WebSocket connection to 'ws://localhost:8080/' failed: Error during WebSocket handshake: Unexpected response code: 200
起初我没有意识到这一点。我以为连接挂了。
编辑2:我很抱歉,但我想通了。我没有意识到该应用程序涉及 2 个服务器:端口 80 上的 nginx 和端口 8080 上的 websocket 服务器。我创建了 2 个单独的 SSH 隧道,现在一切正常。我很困惑,因为我选择的本地端口 8080 也是远程 websocket 服务器使用的端口。
总结:通过一对一的 NAT 创建 SSH 隧道没有什么特别的要求。