ngrok 内网穿透技术详细部署指南
- 一、ngrok 简介与准备工作
- 1. 功能概述
- 2. 准备工作
- 二、服务端部署(公网服务器)
- 1. 下载ngrok服务端
- 2. 配置Authtoken
- 3. 启动ngrok服务端(TCP隧道模式)
- 4. 验证服务端状态
- 三、客户端部署(内网设备)
- 1. 下载ngrok客户端
- 2. 配置Authtoken
- 3. 启动客户端并创建隧道
- 4. 访问内网服务
- 四、高级配置
- 1. 自定义域名(付费版功能)
- 2. HTTPS自动证书
- 3. 持久化隧道(避免重启失效)
- 五、常见问题与解决方案
- 六、安全注意事项
- 1. 数据加密
- 2. 访问控制
- 3. 监控与日志
- 七、替代方案对比
- 八、总结
一、ngrok 简介与准备工作
1. 功能概述
ngrok 是一款轻量级内网穿透工具,可将本地服务(如Web应用、API接口)暴露到公网,支持HTTP/HTTPS/TCP协议,适用于开发测试、远程访问等场景。
2. 准备工作
• 注册ngrok账号:访问 ngrok官网 注册账号,获取免费版或付费版的 authtoken
。
• 准备公网服务器(可选):若需自托管服务端,需一台公网服务器(如阿里云ECS、AWS EC2)。
• 内网设备:本地电脑、NAS等需暴露服务的设备。
二、服务端部署(公网服务器)
注:若使用免费版ngrok,可直接跳过服务端部署,使用ngrok官方提供的公网隧道。以下为自建服务端流程(适合企业级需求)。
1. 下载ngrok服务端
# Linux服务器(64位)
wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip
unzip ngrok-stable-linux-amd64.zip
chmod +x ngrok
2. 配置Authtoken
登录ngrok官网,在账号仪表盘获取 authtoken
,运行以下命令绑定:
./ngrok authtoken <YOUR_AUTHTOKEN>
3. 启动ngrok服务端(TCP隧道模式)
# 启动HTTP隧道(监听本地80端口,生成随机域名)
./ngrok http 80 -hostname=yourdomain.com
# 启动TCP隧道(监听本地22端口,用于SSH)
./ngrok tcp 22
• 参数说明:
◦ `http 80`:将本地80端口映射为HTTP服务。
◦ `tcp 22`:将本地22端口映射为TCP服务(如SSH)。
◦ `-hostname`:自定义域名(免费版不支持,需付费版)。
4. 验证服务端状态
访问生成的公网URL(如 http://abc123.ngrok.io
),确认内网服务可访问。
三、客户端部署(内网设备)
注:若使用免费版ngrok,可直接通过客户端生成隧道,无需自建服务端。
1. 下载ngrok客户端
• 官网下载地址:ngrok下载页面
• 支持平台:Windows/macOS/Linux。
2. 配置Authtoken
# Linux/macOS
./ngrok authtoken <YOUR_AUTHTOKEN>
# Windows(命令行)
ngrok authtoken <YOUR_AUTHTOKEN>
3. 启动客户端并创建隧道
# 暴露本地Web服务(HTTP)
ngrok http 3000
# 暴露SSH服务(TCP)
ngrok tcp 22
• 输出示例:
```text
Forwarding tcp://0.tcp.ngrok.io:12345 -> localhost:22
Forwarding http://abcd123.ngrok.io -> localhost:3000
```
4. 访问内网服务
• 外部用户通过 http://abcd123.ngrok.io
访问本地3000端口的服务。
• 使用SSH连接:
```bash
ssh user@0.tcp.ngrok.io -p 12345
```
四、高级配置
1. 自定义域名(付费版功能)
• 在ngrok官网控制台绑定域名(如 dev.example.com
)。
• 启动时指定域名:
```bash
ngrok http -hostname=dev.example.com 3000
```
2. HTTPS自动证书
ngrok自动为HTTP隧道生成TLS证书,无需手动配置:
ngrok http 3000
• 访问 https://abcd123.ngrok.io
即可(证书由ngrok签发)。
3. 持久化隧道(避免重启失效)
• Linux服务端:使用 systemd
托管进程。
```bash
# 创建服务文件 /etc/systemd/system/ngrok.service
[Unit]
Description=ngrok
After=network.target
[Service]
ExecStart=/path/to/ngrok http 80 -hostname=yourdomain.com
Restart=always
[Install]
WantedBy=multi-user.target
# 启动服务
systemctl start ngrok
systemctl enable ngrok
```
五、常见问题与解决方案
问题 | 解决方案 |
---|---|
隧道连接失败 | 检查防火墙是否开放端口(如80/443),确保客户端与服务端网络连通。 |
域名解析错误 | 使用 ping yourdomain.com 验证DNS解析,或检查ngrok控制台绑定状态。 |
速度慢/超时 | 更换ngrok服务器区域(如 ngrok http -region=ap3 3000 指定亚太节点)。 |
免费版域名随机变化 | 付费订阅ngrok Premium,绑定固定域名。 |
六、安全注意事项
1. 数据加密
ngrok默认使用TLS加密HTTP/HTTPS流量,TCP隧道通过ngrok中转(非端到端加密),敏感数据建议搭配SSH/Vpn使用。
2. 访问控制
• 限制SSH访问IP:通过 AllowUsers
和防火墙规则限制访问来源。
• 设置HTTP Basic Auth:在本地服务前增加认证层(如Nginx反向代理 + Basic Auth)。
3. 监控与日志
# 查看实时访问日志
ngrok http 3000 --log=stdout
七、替代方案对比
工具 | 优势 | 劣势 |
---|---|---|
ngrok | 配置简单,开箱即用 | 免费版功能受限,依赖第三方服务 |
frp | 支持自建服务端,高度可定制 | 配置复杂度高 |
ZeroTier | 基于VXLAN组网,适合IoT设备 | 需要所有节点安装客户端 |
八、总结
ngrok 是快速暴露内网服务的理想工具,尤其适合开发测试和临时访问。通过本文步骤,用户可完成从安装到高级配置的全流程操作。对于生产环境,建议结合frp或自建Nginx反向代理提升可控性。