ngrok 介绍:
ngrok 是一款用 go 语言开发的开源软件,它是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道.
ngrok 可以做 TCP 端口转发,对于 Linux 可以将其映射到 22 端口进行 SSH 连接,
Windows 的远程桌面可以将其映射到 3389 端口来实现.
同理,如果要做 MySQL 的远程连接,只需映射 3306 端口即可
【frp 更加好用,推荐使用frp github:GitHub - fatedier/frp: A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.】
准备工作:
建议为腾讯或者阿里云主机
域名:ngrok.dvcloud.xin
系统:centos7.6
功能:主要使本地电脑远程映射到公网上面
操作如下:
安装 gcc 和git
yum install gcc git -y
2.安装go 环境
yum install golang -y
如果提示包不存在,需要安装
- yum install -y epel-release
- yum install golang -y

3.下载 ngrok 源码
- cd /usr/local/
- git clone https://github.com/inconshreveable/ngrok.git
4.生成证书:
- cd /usr/local/ngrok
- openssl genrsa -out rootCA.key 2048
- openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=ngrok.dvcloud.xin" -days 5000 -out rootCA.pem
- openssl genrsa -out server.key 2048
- openssl req -new -key server.key -subj "/CN=ngrok.dvcloud.xin" -out server.csr
- openssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 5000
将生成的证书替换掉 ngrok默认的证书
- \cp rootCA.pem assets/client/tls/ngrokroot.crt
- \cp server.crt assets/server/tls/dvcloud.crt
- \cp server.key assets/server/tls/dvcloud.key
5.编译ngrokd 服务端
GOOS=linux GOARCH=amd64 make release-server
6.编译客户端
- GOOS=windows GOARCH=amd64 make release-client
- #编译成功后会在ngrok/bin/下面生成一个windows_amd64目录下面有ngrok.exe
-
- #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
- #ARM 平台:GOOS=linux GOARCH=arm

7.添加自定义系统服务
- vim /usr/lib/systemd/system/ngrok.service
-
-
- [Unit]
- Description=ngrok
- After=network.target
-
- [Service]
- Type=simple
- Restart=always
- RestartSec=1min
- ExecStart=/usr/local/ngrok/bin/ngrokd -tlsCrt=/usr/local/ngrok/assets/server/tls/dvcloud.crt -tlsKey=/usr/local/ngrok/assets/server/tls/dvcloud.key -domain=ngrok.dvcloud.xin -httpAddr=:800 -httpsAddr=:801 -tunnelAddr=:55552 %i
- ExecStop=/usr/bin/killall ngrok
- PrivateTmp=true
-
- [Install]
- WantedBy=multi-user.target
- # ngrokd 日志可以通过启动参数指定 -log=/var/log/ngrokd.logs
-
- # 重载系统服务:
-
- systemctl daemon-reload
- # 设置开机启动
-
- systemctl enable ngrok.service
- # 启动服务
-
- systemctl start ngrok.service

日志可以在 /var/log/messages
windows 10 客户端操作
将生成的/usr/local/ngrok/bin/windows_amd64/ 整个目录复制到 C:\Program Files 目录内
然后写一个配置文件ngrok.conf
内容如下:
- server_addr: ngrok.dvcloud.xin:55552
- trust_host_root_certs: false
- tunnels:
- ssh:
- remote_port: 36603
- proto:
- tcp: 3389

然后保存,手动执行命令测试是否正常


测试时正常的,为了方便下次电脑启动直接使用,因此
下载nssm.exe 将ngrok 封装为windows启动服务
NSSM - the Non-Sucking Service Manager

然后,就可以直接运行了。
Linux x64 位客户端操作如下:
解压到 /usr/local 目录
tar xvf ngrok.tar.gz -C /usr/local
然后修改 配置/usr/local/ngrok/conf/ngrok.conf
添加开机启动服务
- vim /usr/lib/systemd/system/ngrok.service
-
-
-
- [Unit]
- Description=ngrok
- After=network.target
-
- [Service]
- Type=simple
- Restart=always
- RestartSec=1min
- ExecStart=/usr/local/ngrok/bin/ngrok -config=/usr/local/ngrok/conf/ngrok.conf -log /var/log/ngrok/ngrok.log start-all
- ExecStop=/usr/bin/killall ngrok
- PrivateTmp=true
-
- [Install]
- WantedBy=multi-user.target
- # 重载系统服务:
-
- systemctl daemon-reload
- # 设置开机启动
-
- systemctl enable ngrok.service
- # 启动服务
-
- systemctl start ngrok.service