跳到主要内容

Web 服务穿透

[!warning] 出于合规性要求,我们已不允许TCP协议的穿透进行HTTP/HTTPS协议的服务,因此请使用HTTP/HTTPS协议的穿透来暴露HTTP/HTTPS服务。

[!tip] 1、本文使用 docker 环境,实际上使用方法和二进制环境是一样的,仅仅一些无关紧要的细节不同 2、实际上的情况可能会有所出入,请读者仔细处理。如果任未能解决,请联系管理员

介绍

  • 本文档将一步步向您介绍如何使用NatureTunnel穿透常见Web服务。

  • 本教程适用于用户将本地的 HTTP/HTTPS 服务穿透到公网的场景,如 博客、NAS、服务器面板等。

  • 对于暴露到公网的敏感服务,请自行做好安全防护措施,我们不对穿透服务的安全性负责。

操作步骤

准备工作

  1. 已经部署在本地的任意Web服务(本教程以飞牛fnOS桌面为例)。

  2. 在本地安装任意形式的NatureTunnel官方启动器(本教程以fnOS图形化客户端为例)。

创建隧道

  1. 在浏览器中打开 NatureTunnel控制台,登录后进入 工作台-创建隧道 页面。

f8859fad-76fb-498f-a795-ee82b10d5ca7.png

  1. 进入 工作台-域名白名单 页面,添加您预期作为隧道访问域名的顶级域名(非子域名,例如iusi.cn而非www.iusi.cn),并完成域名所有权验证。

根据《非经营性互联网信息服务备案管理办法》第五条规定:"在中华人民共和国境内提供非经营性互联网信息服务,应当依法履行备案手续。未经备案,不得在中华人民共和国境内从事非经营性互联网信息服务。"故使用中国大陆节点提供HTTP(s)服务时,需要使用已经取得ICP备案的域名。

f26ad224-53d1-447a-bb52-0064e3850e65.png

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

3a5cd354-16e0-4553-bf62-e8752ded4863.png

QQ_1785215197962.png

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

bfe9ba4f-01b0-4f9d-8938-b0533e55a750.png

QQ_1785418695064.png

84efb927-7801-4392-b1c2-3cc2e85f00a7.png

(解析生效至全球需要5分钟-24小时,请耐心等待)

启动隧道

  1. 安装并打开任意版本的NatureTunnel启动器(此处以fnOS为例)。

79aa07c0-73dd-4f58-bce4-9a2fe26dea05.png

  1. 启动刚刚创建的隧道。

QQ_1785418238674.png

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

QQ_1785418950126.png

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

QQ_1785418963634.png

创建隧道页面导航

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

select_node.png

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

fill_node_information.png

[!tip] 1、隧道名称:用于区分该隧道用来做什么的,比如 mc服务器 就可以写 mc服务器_01 2、协议类型:想要穿透什么类型的服务,这里以 https 服务演示 3、本地主机:填写要穿透的服务的地址,如果是本地就写 127.0.0.1 即可,如果使用了容器服务,比如 docker ,请填写容器地址 4、本地端口:填写服务端口,本地就填写本地暴露出去的端口,如果的容器,就填写容器的端口 5、域名:该服务将会使用哪一个域名访问,需要在 域名白名单 添加域名白名单 6、证书:因为 https 访问需要使用证书,所以需要添加证书,需要在 证书管理 申请证书

  • 然后点击创建隧道创建隧道,并进入 隧道列表 生成客户端配置,复制粘贴到服务器上的配置文件地址:

get_config.png

并且修改配置文件路径,记得添加上引号:

cert_file = "/app/cert/cert.crt"
key_file = "/app/key/key.key"

2.上传证书

  • 随后在 证书管理 下载对应证书,上传到服务器 download_cert.png

==普通环境下直接上传,然后在配置文件中指定路径即可,容器环境下,需要传递到容器内部==

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

出现以下页面就创建成功

start_success.png

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

access_success.png

常见问题

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 的配置,服务的配置,具体展开来说太广了,还请读者自行查找解决办法
  • 防火墙是否有特别的设置