Xiaoi’s Blog

Xiaoi's Blog

马上订阅 Xiaoi’s Blog RSS 更新: https://blog.xiaoi.me/feed.xml

CentOS 7 下搭建自己的 ngrok 内网穿透服务

2019年10月23日 09:56

现在的家庭宽带或者部分公司的宽带都没有直接分配公网 IP ,这个给我们做开发调试时带来的很大的不便,比如我们需要对接微信公众号、支付宝等第三方系统时,第三方系统需要通过异步回调通知我们的服务,但是我们自己电脑上的应用程序都无法对外访问,这样也就通知不了,无法很好的进行联调测试。

在这样的背景下,ngrok 对于我们来说就提供了很大的帮助,他可以让我们内网的应用可以对外访问,无论是 HTTP(s) 服务还是 TCP/SSH 等场景,均可以通过 ngrok 服务内网穿透来达到对外提供访问的目的。

搭建步骤

第一步:安装 golang 环境

博主的服务器统一使用的 CentOS 7 发行版本,所以通过 yum install golang 就可以安装好 golang 环境,如果是其他操作系统可以参考官方文档 How to install golang

第二步:下载 ngrok 源码

目前 ngrok 2.x 版本已经闭源,我们能下载到的最新版本为 ngrok-1.7.1.zip, 下载完成之后解压 zip 包,这里我们需要修改 src/ngrok/log/logger.go 中的源代码, 将 log "code.google.com/p/log4go" 修改为 log "github.com/alecthomas/log4go", 否则编译时会报错 build fails: 'package code.google.com/p/log4go: unable to detect version control system for code.google.com/ path'

第三步:生成 TLS 证书

例如我们以 4kb.cn 域名为例,我们在生成证书的时候可以指定 ngrok.4kb.cn 这个域名指定 ngrok 服务器地址(需要 DNS 解析到 ngrok 所在服务器的 IP 上),同时我们对外提供 ngrok 域名为 *.4kb.cn (需要泛域名解析 *.4kb.cn 到 ngrok 所在服务器的 IP 上),这里的 ngrok.4kb.cn 和 *.4kb.cn 解析并不冲突。

生成 TLS 证书的命令如下:

openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=ngrok.4kb.cn" -days 3650 -out rootCA.pem
openssl genrsa -out device.key 2048
openssl req -new -key device.key -subj "/CN=ngrok.4kb.cn" -out device.csr
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 3650

第四步:覆盖 ngrok 默认 TLS 证书

cp rootCA.pem assets/client/tls/ngrokroot.crt
cp device.crt assets/server/tls/snakeoil.crt 
cp device.key assets/server/tls/snakeoil.key

第五步:设置 Golang 编译目录和参数

export GOPATH=/go

为了可以在 docker 环境下运行,我们还需要运行下面的命令,否则会报错 Unable to run a go program inside docker /bin/sh: ./ngrokd: not found

export CGO_ENABLED=0

第六步:编译 ngrok 服务端和客户端

Linux 32 位系统 ngrok 编译命令

export GOOS=linux...

剩余内容已隐藏

查看完整文章以阅读更多