#20211006 更新

如果在很高的 golang 版本下编译会有问题,解决方案是:

1
go env -w GO111MODULE=off

#参考文档

#20210107 更新

TCP协议不同的是,ngrok 的 HTTP/HTTPS 协议的端口无法通过remote_port参数在客户端指定,而是在服务端预先已经指定好的:-httpAddr=":82" -httpsAddr=":83"

ngrok 的 http 协议通过不同的子域名来区别服务类型,所以配置方法是:

1
2
3
4
nginx:
subdomain: "io"
proto:
http: "192.168.1.119:80"

#前言

之前配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
2
3
4
# Linux服务端
GOOS=linux GOARCH=amd64 make release-server
# Windows客户端
GOOS=windows GOARCH=amd64 make release-client

其它参数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# Linux服务端/客户端
# 32位
GOOS=linux GOARCH=386 make release-server
GOOS=linux GOARCH=386 make release-client
# 64位
GOOS=linux GOARCH=amd64 make release-server
GOOS=linux GOARCH=amd64 make release-client

# MacOS服务端/客户端
GOOS=darwin GOARCH=386 make release-server
GOOS=darwin GOARCH=386 make release-client

GOOS=darwin GOARCH=amd64 make release-server
GOOS=darwin GOARCH=amd64 make release-client


# Windows服务端/客户端
GOOS=windows GOARCH=386 make release-server
GOOS=windows GOARCH=386 make release-client

GOOS=windows GOARCH=amd64 make release-server
GOOS=windows GOARCH=amd64 make release-client

我是用手机做服务器,之前以为无解的,没想到真的支持arm架构的,yyds!

1
2
GOOS=linux GOARCH=arm make release-server
GOOS=linux GOARCH=arm make release-client

就是不知道arm64能不能行,有机会再试试。

#运行

要超级管理员权限才行:

1
./bin/ngrokd -domain="ngrok.onns.xyz" -httpAddr=":8000" -httpsAddr=":4430" -tlsKey=ng.key -tlsCrt=ng.pem

还有一个参数是tunnelAddr,默认是4443,是客户端和服务端通信的端口。

ng.keyng.pem是申请的证书。

没什么问题的话,就可以常驻后台了:

1
nohup ./bin/ngrokd -domain="onns.xyz" -httpAddr=":82" -httpsAddr=":83" >> /home/deploy/ngrok/a.txt 2>&1 &

改天一定看如何把自己的代码做成service!!!!

#客户端配置

新建一个ngrok.cfg文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
server_addr: "ngrok.onns.xyz:4443"
trust_host_root_certs: true
tunnels:
ssh:
remote_port: 2222
proto:
tcp: "22"
mxy:
remote_port: 2223
proto:
tcp: "22"
v2:
remote_port: 9891
proto:
tcp: "9891"
win:
remote_port: 33891
proto:
tcp: "192.168.1.136:3389"

之前一直以为remote_port是随机的,原来可以指定,参数都很清楚,就不用解释了!

然后开启服务,可以只开启一部分:

1
ngrok -config=ngrok.cfg start ssh win

或者直接开启所有服务:

1
ngrok -config=ngrok.cfg start-all

收工,终于可以抛弃 teamviewer 了!自带的远程桌面是真的流畅!!!

#参考链接