CentOS 7 下搭建自己的 ngrok 内网穿透服务
现在的家庭宽带或者部分公司的宽带都没有直接分配公网 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...剩余内容已隐藏
CentOS 7 下搭建自己的 ngrok 内网穿透服务
现在的家庭宽带或者部分公司的宽带都没有直接分配公网 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...剩余内容已隐藏