部署ngrok
ngrok
ngrok可以让本地的web服务或tcp服务和外部建立一个安全的通道,使得外网可以访问本地的计算机服务。不仅可以用来暴露内网的http给外网使用,还可以从外网来ssh到本机开发环境。ngrok可以通过官方的服务来连接,也可以自己来。下面介绍下私有的ngrok服务的搭建工作。
准备工作
搭建ngrok服务需要一个外网服务器以及一个已经解析到了该机器的域名(假定为test.site),国内可以在阿里云购买相关服务:阿里云。注意:下文中用到的所有端口,如果启用了iptables规则,都需要放行,如果在阿里云中,需要设置安全组规则。
依赖项
ngrok使用go语言开发,所以首先要 安装go语言:https://golang.org/doc/install
安装
下载代码:
生成ssl证书:
cd ngrok
NGROK_DOMAIN=“test.site”
openssl genrsa -out base.key 2048
openssl req -new -x509 -nodes -key base.key -days 10000 -subj “/CN=$NGROK_DOMAIN” -out base.pem
openssl genrsa -out server.key 2048
openssl req -new -key server.key -subj “/CN=$NGROK_DOMAIN” -out server.csr
openssl x509 -req -in server.csr -CA base.pem -CAkey base.key -CAcreateserial -days 10000 -out server.crt
cp base.pem assets/client/tls/ngrokroot.crt
编译:
sudo make release-server release-client
此时在bin目录下应该有ngrok和ngrokd两个可执行文件。
如果需要交叉编译:先设置好GOOS与GOARCH变量
Linux 平台 32 位系统:GOOS=linux GOARCH=386
Linux 平台 64 位系统:GOOS=linux GOARCH=amd64
Windows 平台 32 位系统:GOOS=windows GOARCH=386
Windows 平台 64 位系统:GOOS=windows GOARCH=amd64
MAC 平台 32 位系统:GOOS=darwin GOARCH=386
MAC 平台 64 位系统:GOOS=darwin GOARCH=amd64
如需要编译window 64位版本: GOOS=windows GOARCH=amd64 make release-client
服务端启动:
nohup ./bin/ngrokd -tlsKey=server.key -tlsCrt=server.crt -domain=“test.site” -httpAddr=":8081" -httpsAddr=":8082" &
示例中8081用来连接http请求,8082用来连接https请求
客户端启动:
将编译好的client版本下载到指定的机器上之后,配置启动文件:
|
|
./ngrok -log=stdout -config=ngrok.yml start ssh client& 启动客户端
此时,会把本机的8080端口的服务映射到服务端pub.test.site:8081端口,便可以用来访问客户端的8080端口的服务了。
tcp tunnel将22端口映射到服务端的2022端口,便可以ssh user@test.site -p2022 来访问客户端的ssh服务了。
开机启动ngrok client:
首先编写启动脚本 ngrok.sh:
|
|
再配置systemd ngrok service文件 /usr/lib/systemd/system/ngrok.service;
[Unit]
Description=ngrok service
[Service]
Type=forking
ExecStart=/bin/bash /path/to/ngrok.sh
[Install]
WantedBy=multi-user.target
最后,
systemctl enable ngrok.service
systemctl start ngrok.service
服务就可以开机启动了
- Author: kunpeng
- Link: https://kunpengdai.github.io/post/2019/%E9%83%A8%E7%BD%B2ngrok/
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.