第三方登录厦大账号的时候,需要用到内网穿透。以下为相关文档。

#安装 ngrok

安装依赖:

1
yum install gcc git 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

生成证书:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
cd ngrok

mkdir cert
cd cert
# NGROK_DOMAIN 根据自己的配置修改
export NGROK_DOMAIN="onns.xyz"
openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem
openssl genrsa -out device.key 2048
openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000

cp rootCA.pem ../assets/client/tls/ngrokroot.crt
cp device.crt ../assets/server/tls/snakeoil.crt
cp device.key ../assets/server/tls/snakeoil.key

# 返回上层目录
cd ..

NGROK_DOMAIN域名换成 ngrok 服务器域名,建议用一个二级域名,比如:ngrok.onns.xyz,因为如果用一个一级域名比如onns.xyz,那整个一级域名都没办法用了,因为一级域名必须要指向 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

#服务器端

测试一下能否运行:

1
2
sudo -i
./bin/ngrokd -domain="onns.xyz" -httpAddr=":82" -httpsAddr=":83"

ngrok 默认会占80443端口,服务器只用来做 ngrok 服务器太可惜了,所以用别的端口来代替。

如果后续测试不通过,可以检查一下是不是端口问题,把服务器和云服务器商的端口访问打开:

1
2
sudo iptables -I INPUT -p tcp --dport 82 -j ACCEPT
sudo iptables -I INPUT -p tcp --dport 83 -j ACCEPT

然后可以设置常驻后台任务了:

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

#客户端

创建一个ngrok.cfg文件:

1
2
server_addr: "onns.xyz:4443"
trust_host_root_certs: false
1
ngrok -config=ngrok.cfg -subdomain x 81

需要把onns.xyzx.onns.xyz都指向 ngrok 的服务器。

#结尾

还是比较推荐用二级域名做 ngrok 服务器,再用三级域名做内网穿透。这样不会浪费一个域名。因为一级域名和二级域名都要指向 ngrok 服务器。ngrok 服务需要n级n+1级域名。

画个图帮助理解一下:

ngork工作流程图

#参考文档