ngrok我终于懂了
#20211006 更新
如果在很高的 golang 版本下编译会有问题,解决方案是:
1 | go env -w GO111MODULE=off |
#参考文档
#20210107 更新
与TCP
协议不同的是,ngrok 的 HTTP/HTTPS 协议的端口无法通过remote_port
参数在客户端指定,而是在服务端预先已经指定好的:-httpAddr=":82" -httpsAddr=":83"
。
ngrok 的 http 协议通过不同的子域名来区别服务类型,所以配置方法是:
1 | nginx: |
#前言
之前配ngrok
的时候都是看着教程,xjb 配,因为一般都是http
,所以也没那么麻烦,这次终于一次性把所有的坑都踩完了。之后应该不会有任何问题了!(不是
大部分内容之前的文章《用 ngrok 进行内网穿透》里都有写,可以互相参照。
用生成证书的方式我一直运行失败,所以建议用机构颁发的证书,阿里云有免费的可以用。
#安装
安装依赖:
1 | yum install gcc mercurial git bzr subversion golang golang-pkg-windows-amd64 golang-pkg-windows-386 -y |
下载 ngrok 源码:
1 | git clone https://github.com/inconshreveable/ngrok.git ngrok |
证书就不用生成了,生成的也用不了,之前的ngrok
不成功全是卡在这里,直接去阿里云申请,具体百度。
编译服务器和客户端:
1 | # Linux服务端 |
其它参数:
1 | # Linux服务端/客户端 |
我是用手机做服务器,之前以为无解的,没想到真的支持arm
架构的,yyds!
1 | GOOS=linux GOARCH=arm make release-server |
就是不知道arm64
能不能行,有机会再试试。
#运行
要超级管理员权限才行:
1 | ./bin/ngrokd -domain="ngrok.onns.xyz" -httpAddr=":8000" -httpsAddr=":4430" -tlsKey=ng.key -tlsCrt=ng.pem |
还有一个参数是tunnelAddr
,默认是4443
,是客户端和服务端通信的端口。
ng.key
和ng.pem
是申请的证书。
没什么问题的话,就可以常驻后台了:
1 | nohup ./bin/ngrokd -domain="onns.xyz" -httpAddr=":82" -httpsAddr=":83" >> /home/deploy/ngrok/a.txt 2>&1 & |
改天一定看如何把自己的代码做成service
!!!!
#客户端配置
新建一个ngrok.cfg
文件:
1 | server_addr: "ngrok.onns.xyz:4443" |
之前一直以为remote_port
是随机的,原来可以指定,参数都很清楚,就不用解释了!
然后开启服务,可以只开启一部分:
1 | ngrok -config=ngrok.cfg start ssh win |
或者直接开启所有服务:
1 | ngrok -config=ngrok.cfg start-all |
收工,终于可以抛弃 teamviewer 了!自带的远程桌面是真的流畅!!!