语境
我正在尝试改进我的工作流程。
目前我有一台台式机(基本上有 GPU)和一台笔记本电脑。我想在远程使用笔记本电脑时也能利用台式机(它们都运行 Linux)
在我的大学里,只有端口 80 对外部连接开放。
当前解决方案
我的桌面有一个 SSH 服务器,并且我正在 NAT 中进行一些端口转发wanaddr:80 -> localaddr:22
以避免大学网络中的限制。
此外,我正在部署代码并使用 IntelliJ IDE 与远程解释器一起运行,它运行得非常好。
问题
我需要远程使用更多服务,例如tensorboard
,,MLFlow
。jupyter
困难在于我必须在 WAN 端使用端口 80,因此我不能直接转发其他端口。
尝试的解决方案
假设我的桌面的域名是desktop.dev
。
我正在尝试将特定的子地址重定向到正确的服务,例如
ssh.desktop.dev:80 -> <?> -> localhost:22
tensorboard.desktop.dev:80 -> <?> -> localhost:8888
jupyter.desktop.dev:80 -> <?> -> localhost:8000
我尝试使用 Caddy,但后来我明白它仅支持 HTTP 请求,我正在研究 Traefik,但我不知道如何轻松地做到这一点。
你能为我指出正确的方向吗?
答案1
使用 SSH 端口转发(-L 选项)。对于您的家用机器,仅公开 ssh。您最终连接到哪个端口并不重要;80 是可以接受的。在家用机器上,在环回设备上运行服务或至少使它们可从环回设备使用。
然后从您的漫游站连接那里:ssh -p home-port home.address -L 8888:localhost:8888 -L 8000:localhost:8000 等等。
(如果你使用的是 Windows,putty 可以做到这一点)
然后,在您的漫游站上连接到 localhost。ssh 客户端会将流量隧道传输到您家用机器上的上述端口。如果您在漫游站上与 localhost:8888 建立 tcp 连接,ssh 客户端将接受,然后与家用机器上的 localhost:8888 建立连接,然后来回代理数据包,这样您最终就会像您的家用服务出现在您的漫游站上一样。
您还可以使用 -R 选项进行反向转发。如果您的转发目的地不是本地主机,而是任何其他可从家中访问的地方,那么您可以访问无法从漫游站直接访问的地方:-L 7777:some.irc.server:6666,并且连接到 localhost:7777 就像您连接到 some.irc.server:6666 一样。
无论您做什么,通过网络只能看到您家和漫游站之间的 SSH 流量。