在 CentOS 搭建 ngrok server,进行内网穿透
在日常开发环境中,可能会碰到需要内网穿透的一些需求,如微信小程序的开发,为了便于开发调试,需要将内网机器对外暴露,较便捷的方式有(难易度由上往下依次繁琐):
- 使用 ngrok 等类似客户端,通过别人架设的服务器进行内网穿透,较为灵活,可自建服务器。
- 注册一个花生壳,使用其推出的内网穿透服务,有的时候会抽风,且 ssl 域名存在不够用的情况需增购。
- 在外网架一个 nginx,通过在路由器设置 NAT 后,转发到内网机器上,灵活度较高,但需拥有路口路由器配置权限。
本文主要讲解如何使用 ngrok 自建一个内网穿透服务器,通过本文,你可以掌握:
-
在 centos 等其他 linux 衍生版本上搭建一个 ngrok server。
-
通过 openssl 生成证书。
-
在 windows,linux,arm 系统上使用生成 ngrok 客户端进行内网穿透。
1. 准备工作
一些说明:
本问编写时,系统环境为 CenntOS 7.6,win10 1903。
包管理工具使用的是 yum ,源默认情况下使用的是 阿里镜像。
需要 golang 环境:go1.11.5 linux/amd64。
git 客户端(可选)。
SSL 证书:使用 openssl 生成。
使用 go 编译服务端和客户端用执行文件。
1.1 域名解析
-
增加泛子域名和普通子域名解析
1.2 配置环境
-
ngrok 基于golang,若没有 golang 环境的需进行安装。
1 | sudo yum install -y golang |
-
将 ngrok.git 克隆一份下来,也可以直接下载后直接拷贝至服务器,按需即可。如果没有安装 git 客户端或者版本太低需升级,可通过如下命令进行安装/更新。
-
查看版本信息:
-
更新/安装 git
1 | yum remove git |
-
本博文发布时,镜像中的 git 版本为 2.16.5
-
克隆 ngrok 库到本地
1 | cd /etc |
1.3 SSL 证书
1 | #1.指定 ngrok 所用域名:这里以域名 bangwogaoding.com 为例 |
-
上面生成的 bangwogaodingCA.pem,ngrokClientCA.crt,ngrokClientCA.key 复制到
assets/client/tls 和 assets/server/tls,这两个目录分别存放着ngrok和ngrokd的默认证书。具体如下:
1 | cp bangwogaodingCA.pem assets/client/tls/ngrokroot.crt |
1.4 编译 ngrokd 和 ngrok 可执行文件
ngrokd 是服务端的执行文件
ngrok 是客户端的执行文件
1 | #编译服务端,生成的文件在 ./bin 文件夹对应的目录中,如:ngrokd |
GOOS 和 GOARCH 说明:
- 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
启动 ngrokd 服务器
1 | cd /etc/ngrok/bin |
启动 ngrok 客户端
-
生成的客户端位于生成目录下的 /bin 文件夹内,如:
-
可使用 ftp 工具将其拷贝至需要内网穿透的电脑中,这里以 windows 系统为例:
-
复制 ngrokd.exe 到本地文件夹
-
增加配置文件 config.d
1 | #config.d 内容,请自行使用一开始解析的子域名 |
-
启动客户端
1 | # config.d 为上面增加的配置文件,也可不使用配置文件,直接显式指定。 |
-
关于第三点,也可以使用批处理文件方便调整和修改。
1 | # run.bat |
效果
-
内网需要穿透的站点如下:
-
启动客户端
-
外网访问效果
注意事项
-
防火墙启用的状态下,确保服务器的端口都打开,如 4443 是必须的,其他的,如 80,443端口根据你自己需要打开。
1 | # 查看目前已经打开的端口 |
-
如果使用的是 云资源,如阿里云,华为,腾讯,AWS等,请确保相关安全组已经允许通过 443,80,4443 等端口。
参考
https://www.svenbit.com/2014/09/run-ngrok-on-your-own-server/
https://tonybai.com/2015/03/14/selfhost-ngrok-service/
https://github.com/inconshreveable/ngrok/blob/master/docs/SELFHOSTING.md