无意间发现了一个很有趣的工具,ngrok。用于对无公网IP的主机进行公网访问,并且对所有的本地端口都可以转发,只需要一个可以在公网访问的VPS即可。原理上这个工具有点像回调函数:公网VPS上的守护进程不停的接受来自绑定内网主机的周期性,一旦公网VPS收到访问内网主机的请求,守护进程ngrokd和内网主机进城ngrok通过其内部协商的TLS协议和4443端口(可改)建立通信。使得内网主机可以完整且相对安全(转发端口可控)的暴露给公网访问。
前人之述备矣 只是缺少了一点关于转发TCP协议的技巧,在此记录。
由于ngrok可以转发TCP包,因此几乎所有可以在网络上传递的数据都可以通过这个工具转发,包括SSH、RDP甚至SAMBA。上面提到的技术博客中,作者提到内网主机的客户端启动使用命令./ngrok -subdomain pub -proto=http -config=ngrok.cfg 80
,如果依葫芦画瓢,把-proto=http
改为-proto=tcp
,建立连接没有问题,但不指定TCP连接的远程端口的话,会自动派发一个随机的大号端口给远端服务器。当脚本前台运行时,这个大号端口的数值会显示在terminal,记下来之后即可连接,但如果要将脚本放在后台运行,则无法得知公网VPS上开放的此TCP应用的监听端口(即使在VPS端也用netstat
也找不到监听端口,奇怪),也就无法连接。经过反复搜索,最终在知乎找到答案,即客户端启动命令改为./ngrok -config=ngrok.cfg start XXX
,其中XXX
的内容在cfg文件指定:
server_addr: "域名:4443"
trust_host_root_certs: false
tunnels:
自己定名字ssh:
remote_port: 158
proto:
tcp: 22
vnc:
remote_port: 5902
proto:
tcp: 5902
dd:
remote_port: 9208
proto:
tcp: 8888
www:
subdomain: 231
proto:
http: 80
作者:李悦
链接:https://www.zhihu.com/question/56509583/answer/149286629
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
Done!
Linux是个顶神奇的工具!
3月4日更新:
通过大神博客成功在家里NAS(Ubuntu 16.04.4)上由于舍不得用root权限而费尽千辛万苦搭出了基于Aria2+AriaNG的Linxu下载组合。再通过ngrok将AriaNG的端口以TCP的方式开放,将Aria2的RPC端口(重要!由于AriaNG只认当前URL的6800端口做RPC,因此挂载到公网时也要映射RPC端口)映射给公网同号端口,这样一来就可以在世界各地登录URL下载东西到NAS上啦!
记录一下:
- 宝塔系统: 12888
- AriaNG: 8890(同号映射)
- AriaRPC: 6800(同号映射)
- SSH: 29191->12022
- ngrok<->ngrokd: 4443