Debian9 搭建ngrok服务器
准备工作
- 一台vps 这里使用了 gcp debian9
- 一个泛解析的域名(在阿里上买了个 .xyz 6-9数字域名 65rmb 10年)
安装 GO环境 和 Git
网上 很多 这里先省略配置记录了
安装Ngrok
下载源码
mkdir ~/go/src/github.com/inconshreveable
cd ~/go/src/github.com/inconshreveable
git clone https://github.com/inconshreveable/ngrok.git
export GOPATH=~/go/src/github.com/inconshreveable/ngrok
cd ngrok
编译ngrokd
- 编译服务器端
$ make release-server
- 编译客户端
$ GOOS=linux GOARCH=amd64 make release-client
$ GOOS=windows GOARCH=amd64 make release-client
$ GOOS=linux GOARCH=arm make release-client
使用 Systemd 编写启动服务
在 /lib/systemd/system 目录下新建 ngrokd.service 文件
/lib/systemd/system/ngrokd.service
文件内容
[Unit]
Description=ngrok
After=network.target
[Service]
ExecStart=/usr/local/src/ngrok/bin/ngrokd
-tlsKey=/usr/local/src/ngrok/assets/server/tls/*.123456.xyz.key
-tlsCrt=/usr/local/src/ngrok/assets/server/tls/*.123456.xyz.crt
-domain="ngrok.123456.xyz"
-httpAddr=":80"
-httpsAddr=":443"
-tunnelAddr=":4000"
[Install]
WantedBy=multi-user.target
主要是 ExecStart 命令中的启动 参数
tlsKey tlsCrt 分别是 下面使用 Let’s Encrypt 申请的 泛域名证书
domain 服务主域名
httpAddr httpsAddr tunnelAddr 服务端口 和 传输端口
获得单元文件后,即可测试该服务:
sudo systemctl start ngrokd
检查服务的状态:
sudo systemctl status ngrokd
win客户端
复制 服务器上 编译的 ngrok.exe 到客户端文件夹中,新建一个客户端配置ngrok.cfg
server_addr: ngrok.123456.xyz:4000
trust_host_root_certs: true
在 cmd 中 输入命令 启动 客户端
http
ngrok.exe -subdomain demo -config=ngrok.cfg -log=log.txt -proto=http 8080
https
ngrok.exe -subdomain demo -config=ngrok.cfg -log=log.txt -proto=https 8080
tcp
ngrok.exe -subdomain demo -config=ngrok.cfg -log=log.txt -proto=tcp 8080
然后会在黑屏中 显示相关连接信息
如果 我们本地内网 有一个 8080 端口的web 服务
当我们输入 https://demo.ngrok.123456.xyz 这个网址就会穿透到我们 本地 8080 服务上
在阿里云配置域名解析
我们这里
* ngrok.123456.xyz 配置了条a 记录 对应 gcp vps ip
* *.ngrok.123456.xyz 配置了条CNAME 指向上面的 ngrok.123456.xyz 域名
为 ngrok 申请一个 泛解析域名
- 使用 acme.sh 申请 Let’s Encrypt 免费泛域名证书
- 配置 acme dns 插件 ali dns api 接口方式 申请证书
在阿里云 后台 配置一个 有完全dns解析 接口权限的 用户并获取
1. export Ali_Key=”xxxxxxxxx”
2. export Ali_Secret=”xxxxxxxxxxx”
wget -O – https://get.acme.sh | sh
更新脚本
acme.sh –upgrade –auto-upgrade
申请证书
./acme.sh –issue –dns dns_ali -d *.123456.xyz -d *.ngrok.123456.xyz
脚本里面的 阿里dns 插件会 通过api 在阿里dns 解析记录里面天机2条 TXT 的记录
等待 120秒 等待 解析记录生效后 会签发类似 下面4条证书记录
-----END CERTIFICATE-----
[Tue Jan 22 03:26:59 UTC 2019] Your cert is in /root/.acme.sh/*.123456.xyz/*.123456.xyz.cer
[Tue Jan 22 03:26:59 UTC 2019] Your cert key is in /root/.acme.sh/*.123456.xyz/*.123456.xyz.key
[Tue Jan 22 03:26:59 UTC 2019] The intermediate CA cert is in /root/.acme.sh/*.123456.xyz/ca.cer
[Tue Jan 22 03:26:59 UTC 2019] And the full chain certs is there: /root/.acme.sh/*.123456.xyz/fullchain.cer
安装证书 到 ngrok 目录
./acme.sh --install-cert -d *.123456.xyz /
--cert-file /usr/local/src/ngrok/assets/server/tls/*.123456.xyz.crt /
--key-file /usr/local/src/ngrok/assets/server/tls/*.123456.xyz.key /
--fullchain-file /usr/local/src/ngrok/assets/client/tls/*.123456.xyz.crt \