如何在VPS上搭建ngrok服务器实现内网穿透?
| 项目 |
内容 |
| 主要用途 |
内网穿透、本地服务外网访问、微信开发调试 |
| 所需环境 |
VPS服务器、域名、Go语言环境、Git工具 |
| 适用系统 |
CentOS、Ubuntu等Linux发行版 |
| 核心组件 |
ngrokd(服务端)、ngrok(客户端) |
| 网络协议 |
HTTP、HTTPS、TCP |
| 优势特点 |
支持自定义域名、配置相对简单、开源免费 |
如何在VPS上搭建ngrok服务器实现内网穿透?
内网穿透是现代开发中经常遇到的需求,特别是在微信开发、本地服务演示等场景中。ngrok作为一款优秀的内网穿透工具,通过自建服务器可以获得更好的稳定性和自定义功能。
搭建前的准备工作
在开始搭建之前,需要准备以下资源:
- VPS服务器:推荐使用腾讯云、阿里云等云服务商,系统建议选择CentOS 7.2或以上版本
- 域名:最好是已经备案的域名,便于后续配置
- 远程连接工具:Xshell、Xftp等SSH客户端
- 基础软件:Git、Go语言环境
主要搭建步骤
| 步骤 |
操作内容 |
预计时间 |
| 1 |
环境准备与依赖安装 |
10分钟 |
| 2 |
域名解析配置 |
5分钟 |
| 3 |
获取ngrok源码 |
5分钟 |
| 4 |
生成SSL证书 |
5分钟 |
| 5 |
编译服务端与客户端 |
15分钟 |
| 6 |
启动ngrok服务 |
2分钟 |
详细操作流程
步骤一:环境准备与依赖安装
操作说明:
首先需要在VPS上安装必要的依赖包,包括Go语言环境和Git工具。
使用工具提示:
使用SSH客户端连接VPS,执行以下命令。
# 安装GCC编译器和Git
yum install gcc git -y
安装Go语言环境(CentOS系统)
yum install golang -y
验证安装是否成功
go version
git --version
步骤二:域名解析配置
操作说明:
将域名解析到VPS服务器IP地址,需要同时解析主域名和通配符域名。
使用工具提示:
在域名服务商的管理后台进行DNS解析设置。
# 假设基础域名为 tunnel.example.com
需要解析的记录:
tunnel.example.com → VPSIP
*.tunnel.example.com → VPSIP
步骤三:获取ngrok源码
操作说明:
从GitHub克隆ngrok的源代码到VPS服务器。
# 进入root目录并克隆源码
cd /root
git clone https://github.com/inconshreveable/ngrok.git
export GOPATH=/root/ngrok
步骤四:生成SSL证书
操作说明:
为自定义域名生成自签名的SSL证书。
# 进入ngrok目录
cd ngrok
生成证书,替换为你的域名
openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=tunnel.example.com" -days 5000 -out rootCA.pem
openssl genrsa -out device.key 2048
openssl req -new -key device.key -subj "/CN=tunnel.example.com" -out device.csr
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
替换默认证书
cp rootCA.pem assets/client/tls/ngrokroot.crt
cp device.crt assets/server/tls/snakeoil.crt
cp device.key assets/server/tls/snakeoil.key
步骤五:编译服务端与客户端
操作说明:
编译生成ngrok服务端(ngrokd)和客户端(ngrok)。
# 编译服务端(Linux)
make release-server
编译Windows客户端
GOOS=windows GOARCH=amd64 make release-client
编译完成后,客户端文件位置:
ngrok/bin/windowsamd64/ngrok.exe
步骤六:启动ngrok服务
操作说明:
启动ngrok服务端并配置防火墙规则。
# 启动ngrok服务端
./bin/ngrokd -domain="tunnel.example.com" -httpAddr=":8080" -httpsAddr=":8081"
如果使用systemd管理服务,创建服务文件
vi /etc/systemd/system/ngrok.service
[Unit]
Description=ngrok
After=network.target
[Service]
Type=simple
ExecStart=/root/ngrok/bin/ngrokd -domain=tunnel.example.com -httpAddr=:8080 -httpsAddr=:8081
Restart=always
RestartSec=3
[Install]
WantedBy=multi-user.target
客户端配置与使用
Windows客户端配置
操作说明:
在本地Windows电脑上配置ngrok客户端。
# 创建ngrok配置文件 ngrok.cfg
serveraddr: "tunnel.example.com:4443"
trusthostroot_certs: false
启动客户端连接
操作说明:
使用客户端连接自建的ngrok服务器。
# 使用自定义子域名访问
ngrok -config=ngrok.cfg -subdomain=myapp 80
使用自定义完整域名访问
ngrok -config=ngrok.cfg -hostname=app.example.com 80
常见问题与解决方案
| 问题 |
原因 |
解决方案 |
| 连接超时或失败 |
防火墙未开放相应端口 |
开放4443、8080、8081端口:firewall-cmd --add-port=4443/tcp --permanent |
| 证书验证失败 |
自签名证书不被信任 |
将生成的rootCA.pem安装到客户端系统的受信任根证书中 |
| 编译过程中出错 |
Git版本过低或Go环境问题 |
升级Git到1.7.9.5以上版本,重新配置Go环境变量 |
| 域名解析问题 |
DNS配置错误或未生效 |
检查域名解析记录,等待DNS生效 |
| 客户端显示reconnecting |
网络不稳定或服务端配置问题 |
检查服务端运行状态,确认域名解析正确 |
服务端启动命令详解
# 完整的服务端启动命令
./bin/ngrokd -domain="tunnel.example.com" -httpAddr=":8080" -httpsAddr=":8081" -tunnelAddr=":4443"
参数说明:
-domain:基础域名,必须与证书域名一致
-httpAddr:HTTP服务监听端口
-httpsAddr:HTTPS服务监听端口
-tunnelAddr:客户端连接端口
通过以上步骤,您就可以成功在VPS上搭建自己的ngrok服务器,实现稳定可靠的内网穿透服务。这种自建方式相比使用公共服务,在速度和稳定性方面都有明显优势。
发表评论