假设A主机在公司,B主机在家,C主机为远程云主机。A主机上运行了前文的Node.js服务,需要在B主机上访问该服务。由于A和B不在同一个网络,且A主机没有独立公共IP地址,所以无法直接访问服务。
通过本地端口转发,将发送到B主机3000端口的请求,转发到远程云主机C的2000端口。
# 在B主机登陆远程云主机C,并进行本地端口转发 ssh -L localhost:3000:localhost:2000 root@103.59.22.17
通过远程端口转发,将发送到远程云主机C端口2000的请求,转发到A主机的3000端口。
# 在A主机登陆远程云主机C,并进行远程端口转发 ssh -R localhost:2000:localhost:3000 root@103.59.22.17
这样,在主机B可以通过访问http://localhost:3000来访问主机A上的服务。
# 在主机B访问主机A上的服务 curl http://localhost:3000 Hello Fundebug
npm i ngrok -g
nginx + autossh
libp2p 应该也可以
能实现,但不是很容易。。你可以这么想:
假设 家里电脑上QQ,公司电脑也上QQ,那么,家里电脑可以用QQ远程控制公司的电脑,用公司的电脑访问公司的内网服务器。
ssh 隧道比较靠谱,建立端口映射,ngrok开源的版本貌似只支持http协议
多谢大家回复,最后选择了5楼提供的方法,用了两行命令就好了。要求不是太高就不折腾了。