Web 服务穿透
[!warning] 出于合规性要求,我们已不允许TCP协议的穿透进行HTTP/HTTPS协议的服务,因此请使用HTTP/HTTPS协议的穿透来暴露HTTP/HTTPS服务。
[!tip] 1、本文使用 docker 环境,实际上使用方法和二进制环境是一样的,仅仅一些无关紧要的细节不同 2、实际上的情况可能会有所出入,请读者仔细处理。如果任未能解决,请联系管理员
介绍
-
本文档将一步步向您介绍如何使用NatureTunnel穿透常见Web服务。
-
本教程适用于用户将本地的 HTTP/HTTPS 服务穿透到公网的场景,如 博客、NAS、服务器面板等。
-
对于暴露到公网的敏感服务,请自行做好安全防护措施,我们不对穿透服务的安全性负责。
操作步骤
准备工作
-
已经部署在本地的任意Web服务(本教程以飞牛fnOS桌面为例)。
-
在本地安装任意形式的NatureTunnel官方启动器(本教程以fnOS图形化客户端为例)。
创建隧道
- 在浏览器中打开 NatureTunnel控制台,登录后进入 工作台-创建隧道 页面。

- 进入 工作台-域名白名单 页面,添加您预期作为隧道访问域名的顶级域名(非子域名,例如iusi.cn而非www.iusi.cn),并完成域名所有权验证。
根据《非经营性互联网信息服务备案管理办法》第五条规定:"在中华人民共和国境内提供非经营性互联网信息服务,应当依法履行备案手续。未经备案,不得在中华人民共和国境内从事非经营性互联网信息服务。"故使用中国大陆节点提供HTTP(s)服务时,需要使用已经取得ICP备案的域名。

- 选择支持HTTP/HTTPS的适当节点(优先选择距离自己较近的中国大陆的多线或同运营商节点),填写一个适当的
隧道名称,将协议类型选为HTTP/HTTPS(出于安全性考虑建议选择HTTPS,创建隧道前需先在证书管理页面申请证书),本地端口按实际情况填写(飞牛fnOS默认端口为5666),远程端口随机即可。


- 在您的域名解析服务商处,添加对应子域名CNAME记录到节点访问地址(例如访问域名为www.iusi.cn,则必须严格按照子域名www添加,不可添加为顶级域解析或其他子域名)



(解析生效至全球需要5分钟-24小时,请耐心等待)
启动隧道
- 安装并打开任意版本的NatureTunnel启动器(此处以fnOS为例)。

- 启动刚刚创建的隧道。

- 访问您的服务域名,不出意外的话现在已经可以正常访问了。

可以看到,已经可以正常访问,SSL证书已生效。


- 选择合适节点(国外服务第推荐选择国外,国内服务器推荐选择国内,穿透 web 服务需要选择带有
http和https标签的节点),演示选择中国香港-2。

- 往下滑动,填写隧道信息:

[!tip] 1、隧道名称:用于区分该隧道用来做什么的,比如 mc服务器 就可以写 mc服务器_01 2、协议类型:想要穿透什么类型的服务,这里以 https 服务演示 3、本地主机:填写要穿透的服务的地址,如果是本地就写 127.0.0.1 即可,如果使用了容器服务,比如 docker ,请填写容器地址 4、本地端口:填写服务端口,本地就填写本地暴露出去的端口,如果的容器,就填写容器的端口 5、域名:该服务将会使用哪一个域名访问,需要在 域名白名单 添加域名白名单 6、证书:因为 https 访问需要使用证书,所以需要添加证书,需要在 证书管理 申请证书
- 然后点击创建隧道创建隧道,并进入 隧道列表 生成客户端配置,复制粘贴到服务器上的配置文件地址:

并且修改配置文件路径,记得添加上引号:
cert_file = "/app/cert/cert.crt"
key_file = "/app/key/key.key"
2.上传证书
- 随后在 证书管理 下载对应证书,上传到服务器

==普通环境下直接上传,然后在配置文件中指定路径即可,容器环境下,需要传递到容器内部==
3.创建容器
推荐使用如下创建容器命令:
docker run -d \
--name nrtun \
--restart=always \
-v /root/nrtun/config/config.toml:/config/client.toml \
-v /root/nrtun/cert/cert.crt:/app/cert/cert.crt \
-v /root/nrtun/key/key.key:/app/key/key.key \
unifyz/nrtun-client
出现以下页面就创建成功

然后通过在隧道创建的时候填写的域名访问即可

常见问题
1.出现各种报错如何解决?
可以按照下面的报错一一匹配:
| 报错 内容 | 解决办法 |
|---|---|
| WARN session ended err=dial tcp 154.37.219.151:10001: i/o timeout | 通常是节点不稳定,换一个稳定的节点 |
| (Client.Timeout exceeded while awaiting headers) | 这个报错是一连串的,如果出现了也是主控不稳定,可以稍作等待 |
| domina not fond | 说明你通过控制台给的访问的,请通过你填写的域名访问 |
| WARN failed to connect local tunnel=6a68ba20297a4ac35bd00615 addr=127.0.0.1:80 err=dial tcp 127.0.0.1:80: connect: connection refuse | 隧道连接不上目标主机(需要穿透的主机),多半是因为容器原因,请填写容器ip,保持网络通畅 |
| config error: toml decode: toml: incomplete number | 配置文件出现问题,大多时候是因为没有遵循 toml 语法规范,请仔细检查格式,引号等 |
| config error: tunnels[0].cert_file is required for https | 也是配置文件的问题,和后端接收数据不一致,根据提示在配置文件找对应字段修改字段名即可 |
如果不在其中的报错,并且无法解决可以找找管理员(不着急的话),如果着急,还请找有经验的佬解决
2.有时候什么也没做,突然访问不了了怎么回事?
- 可能是有的时候服务器更新,等待服务器更新即可
- 可能是节点失效了,更换节点即可
- 可能是服务端更新了,但是客户端(安装在你的电脑、服务器上的)没有进行更新,版本落后了,更新版本,重新配置即可
3.感觉啥都配置对了,但是就是访问不了
- 可能是你自己的服务配置就有问题,比如 nginx 的配置,服务的配置,具体展开来说太广了,还请读者自行查找解决办法
- 防火墙是否有特别的设置