Debian9 搭建ngrok服务器

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 \

参考文章

VPS自搭建Ngrok内网穿透服务

CentOS7搭建ngrok服务器

acme.sh

Linux 下使用 acme.sh 配置 Let’s Encrypt 免费 SSL 证书 + 通配符证书

使用systemd在Boot上启动Linux服务

内网穿透 ngrok 服务器和客户端配置