如何通过VPS自建ngrok服务器实现内网穿透?
| 项目 |
内容 |
| 核心功能 |
内网穿透、端口映射 |
| 适用场景 |
本地开发测试、远程访问NAS、IoT设备管理 |
| 主要优势 |
自主控制、配置灵活、数据安全 |
| 技术要求 |
Linux基础、域名解析、防火墙配置 |
| 常用工具 |
Go语言环境、Git、域名服务商控制台 |
如何用VPS自建ngrok服务器?
内网穿透技术让开发者能够从外部网络访问本地服务,而自建ngrok服务器可以提供更好的控制和安全性。本文将详细介绍在VPS上搭建ngrok服务器的完整流程。
搭建步骤概览
| 步骤 |
操作内容 |
预计耗时 |
| 1 |
准备VPS和域名 |
10分钟 |
| 2 |
安装Go语言环境 |
5分钟 |
| 3 |
编译ngrok服务端 |
10分钟 |
| 4 |
生成SSL证书 |
5分钟 |
| 5 |
配置域名解析 |
5分钟 |
| 6 |
启动ngrok服务 |
2分钟 |
| 7 |
配置客户端连接 |
3分钟 |
详细操作流程
步骤1:环境准备
操作说明
准备一台具有公网IP的VPS服务器,并确保拥有一个可用的域名。建议使用Ubuntu或CentOS系统。
使用工具提示
# 更新系统包
sudo apt update && sudo apt upgrade -y
安装必要工具
sudo apt install -y git build-essential
步骤2:安装Go语言环境
操作说明
ngrok使用Go语言编写,需要先安装Go环境。
# 下载并安装Go
wget https://golang.org/dl/go1.19.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.19.linux-amd64.tar.gz
配置环境变量
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
echo 'export GOPATH=$HOME/go' >> ~/.bashrc
source ~/.bashrc
步骤3:获取并编译ngrok
操作说明
从GitHub获取ngrok源码并进行编译。
# 克隆ngrok源码
git clone https://github.com/inconshreveable/ngrok.git
cd ngrok
生成自签名证书(替换为你的域名)
export NGROKDOMAIN="ngrok.yourdomain.com"
openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROKDOMAIN" -days 5000 -out rootCA.pem
openssl genrsa -out device.key 2048
openssl req -new -key device.key -subj "/CN=$NGROKDOMAIN" -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
编译服务端和客户端
make release-server release-client
步骤4:配置域名解析
操作说明
在域名服务商处添加两条A记录解析。
ngrok.yourdomain.com A YOURVPSIP
*.ngrok.yourdomain.com A YOURVPSIP
步骤5:启动ngrok服务
操作说明
启动ngrok服务端,指定监听端口和域名。
# 启动服务端(后台运行)
sudo ./bin/ngrokd -domain="ngrok.yourdomain.com" -httpAddr=":8080" -httpsAddr=":8081" -tunnelAddr=":4443" &
步骤6:客户端配置与连接
操作说明
在需要穿透的内网机器上配置客户端。
# 创建客户端配置文件 ngrok.cfg
echo "serveraddr: ngrok.yourdomain.com:4443
trusthostroot_certs: false" > ngrok.cfg
启动客户端连接
./ngrok -config=ngrok.cfg -subdomain=example 80
常见问题与解决方案
| 问题 |
原因 |
解决方案 |
| 客户端连接失败 |
防火墙未开放端口 |
开放VPS的4443、8080、8081端口 |
| 域名无法访问 |
DNS解析未生效 |
等待DNS生效或检查解析配置 |
| 证书验证错误 |
自签名证书不被信任 |
将rootCA.pem导入客户端信任证书库 |
| 服务启动失败 |
端口被占用 |
更换监听端口或停止占用端口的进程 |
| 子域名冲突 |
子域名已被使用 |
更换唯一的子域名或使用随机分配 |
通过以上步骤,你可以成功搭建属于自己的ngrok服务器,实现安全可靠的内网穿透服务。记得定期更新系统和ngrok版本,以确保服务的安全性。
发表评论