服务器环境:ubuntu20.04 (需要有外网IP)
客户端环境:ubuntu20.04 (也可以是windows和Mac)
1、安装golang和git
sudo apt update
sudo apt install golang git
安装完成,未防止go的版本太新编译不过,需关闭module模式(因为源码很老)
还好目前apt安装的golang是1.3版本也比较老,也直接使用
#关闭module模式
go env -w GO111MODULE=off
2、下载ngrok源码
git clone https://github.com/haungjianli/ngrok ~/ngrok
解压源码
cd ~
tar -C ./ -zxvf ngrok/ngrok.tar.gz
3、生成证书 需要用到域名,去腾讯云申请个几块的就可以了
依次执行下来命令即可 ,其中 ngrok.site 替换成申请的域名
#进入ngrok目录
cd ~/ngrok
#生成证书
openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=ngrok.site" -days 5000 -out rootCA.pem
openssl genrsa -out device.key 2048
openssl req -new -key device.key -subj "/CN=ngrok.site" -out device.csr
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
#替换证书
yes|cp rootCA.pem assets/client/tls/ngrokroot.crt
yes|cp device.crt assets/server/tls/snakeoil.crt
yes|cp device.key assets/server/tls/snakeoil.key
#进入ngrok目录
cd ~/ngrok
#生成证书 其中ngrok.site 替换成你的域名
openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=ngrok.site" -days 5000 -out rootCA.pem
openssl genrsa -out device.key 2048
openssl req -new -key device.key -subj "/CN=ngrok.site" -out device.csr
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
#替换证书
yes|cp rootCA.pem assets/client/tls/ngrokroot.crt
yes|cp device.crt assets/server/tls/snakeoil.crt
yes|cp device.key assets/server/tls/snakeoil.key
4、生成服务端和客户端
编译完成会在bin里生成 服务端程序ngrokd 和客户端 ngrok
<!--linux服务端/客户端-->
GOOS=linux GOARCH=386 make release-server (32位)
GOOS=linux GOARCH=amd64 make release-server(64位)
GOOS=linux GOARCH=386 make release-client (32位)
GOOS=linux GOARCH=amd64 make release-client(64位)
<!--Mac OS服务端/客户端-->
GOOS=darwin GOARCH=386 make release-server
GOOS=darwin GOARCH=amd64 make release-server
GOOS=darwin GOARCH=386 make release-client
GOOS=darwin GOARCH=amd64 make release-client
<!--windows服务端/客户端-->
GOOS=windows GOARCH=386 make release-server
GOOS=windows GOARCH=amd64 make release-server
GOOS=windows GOARCH=386 make release-client
GOOS=windows GOARCH=amd64 make release-client
5、启动服务器
cd ~/ngrok/bin
sudo ./ngrokd -httpAddr=:80 -httpsAddr=:443 -tunnelAddr=:4443
也可直接 sudo ./ngrokd 启动,默认值 -httpAddr=:80 -httpsAddr=:443 -tunnelAddr=:4443
6、启动客户端
创建配置文件 ngrok.cfg,根据需要写入以下内容
server_addr: "you.domain:4443"
trust_host_root_certs: false
tunnels:
ssh:
remote_port: 9022
proto:
tcp: "127.0.0.1:22"
svn:
remote_port: 13690
proto:
tcp: "127.0.0.1:3690"
linux下启动客户端
./ngrok -config=ngrok.cfg start ssh svn
windows下启动客户端
编写一个bat文件,通过bat启动即可
start ngrok -config=ngrok.cfg start ssh svn
8、设置为系统程序,并后台运行
在/etc/systemd/system/目录下创建服务ngrok.service,内容为
服务端
[Unit]
Description=ngrok
After=network.target
[Service]
ExecStart=/全路径/ngrok/bin/ngrokd -httpAddr=":8080" -httpsAddr=":8443" -tunnelAddr=:4443
Restart=always
[Install]
WantedBy=multi-user.target
客户端
[Unit]
Description=ngrok
After=network.target
[Service]
ExecStart=/home/eagle/ngrok/ngrok -config=/home/eagle/ngrok/ngrok.cfg -log=/home/eagle/ngrok/log/ngrok.log start ssh svn
[Install]
WantedBy=multi-user.target
重新加载配置 systemctl
sudo systemctl daemon-reload
启动服务
systemctl start ngrok.service
设置开机启动
sudo systemctl enable ngrok.service
参考: