Web 应用穿透指南

常见的适用场景:

  • 穿透博客(WordPress、Hugo、Ghost、Typecho)等个人网站
  • 穿透 NAS(常见 NAS 系统有独立教程,见左边栏)、Emby、Vaultwarden 等自建应用
  • 微信、支付宝等平台的小程序线上调试

这篇文档只涉及 配置内网穿透 的部分,您需要有一个 已经搭好在内网可以访问 的应用才能进行穿透

配置难度
预计耗时 10 分钟
隧道类型 默认端口 远程端口 访问方式
HTTP8080, 8080 (备用), 8880 (备用)http://example.com
HTTPS443443, 8443 (备用)https://example.com
TCP80 / 443自定义http(s)://example.com:12345

查看本地 IP、本地端口和协议

首先用浏览器在 内网 访问一下您已搭建的服务,然后查看地址栏。访问时显示的网址多半是这样的:

# 如果没有自定义端口:
http://<本地 IP>/xxxx/yyyy

# 如果有自定义端口:
http://<本地 IP>:<本地端口>/xxxx

让我们举几个例子:

# 协议: HTTP, 本地 IP: 127.0.0.1, 本地端口: 80 (HTTP 默认端口)
http://127.0.0.1/xxyyzz/

# 协议: HTTPS, 本地 IP: 11.22.33.44, 本地端口: 443 (HTTPS 默认端口)
https://11.22.33.44/natfrp

# 协议: HTTP, 本地 IP: 10.0.1.5, 本地端口: 8080 (冒号后面的数字)
http://10.0.1.5:8080/watch?v=dQw4w9WgXcQ

# 协议: HTTPS, 本地 IP: some-lan-fqdn, 本地端口: 1111 (冒号后面的数字)
https://some-lan-fqdn:1111/foo/bar

从上述示例中可以看出:

  • 协议 就是 URL 最开头第一个冒号前面的部分,通常只能是 http 或者 https
  • 本地 IP 就是两个斜杠开始 ~ 冒号(或者紧跟着的一个斜杠)结束的一串字符
  • 本地端口 在有冒号的情况下就是冒号后面的数字,否则就是协议对应的默认端口

如果不确定,您可以对照下面的示例进行进一步确认,下面的示例中 本地 IP 都是 127.0.0.1

HTTP 协议

下面是一个采用默认端口的 HTTP 服务器的例子:

下面是一个采用自定义端口 1919 的 HTTP 服务器的例子:

选择隧道类型

请注意区分 隧道类型协议 之间的区别,二者分别对应的是 隧道本地服务 的不同属性。

Sakura Frp 提供三种 隧道类型 供您穿透 Web 应用:

隧道类型支持的协议带端口访问用自己的域名访问形式
TCPHTTP / HTTPS必须可选
也可以用 子域绑定
http://xxx.natfrp.cloud:12345
https://xxx.natfrp.cloud:12345
HTTPHTTP不需要必须http://my.example.com
HTTPSHTTPS不需要必须https://my.example.com

习惯上,我们把 HTTPHTTPS 两种 隧道类型 统称为 HTTP(S) 隧道

这里有一些额外的限制:

  • 使用 TCP 隧道时,如果您穿透的 协议 是 HTTP,必须使用非内地节点。HTTPS 协议 不受影响
  • 使用 HTTP(S) 隧道时,如果使用内地节点进行穿透,必须使用 有备案 的域名
  • 部分节点可能有特殊的建站限制,请留意选择节点时显示的备注中是否有相关说明

选择穿透节点

参考下表选择一个穿透节点,请随时留意备案和实名认证、访问认证的限制。

管理面板中能建立 HTTP(S) 隧道的节点会有绿色的 建站 表识,通常情况下所有节点都可以建立 TCP 隧道。

节点隧道类型实名认证ICP 备案访问认证
内地HTTP(S)必须必须不需要
内地TCP必须不需要不需要
其他HTTP(S)必须不需要不需要
其他TCP必须不需要不需要

创建隧道

HTTP(S) 隧道

单条隧道可以绑定多个域名

每条隧道最大支持 3 个绑定域名,不支持泛域名;有多个域名时请使用 英文半角逗号 将域名隔开

同时建立 HTTP 和 HTTPS 隧道时,请确保两个隧道在同一个节点上,否则有一个隧道会无法访问

您也可以只创建 HTTPS 隧道并打开 创建 HTTP 重定向 开关并设置为合适的重定向代码,
用户访问 http:// 时会被自动重定向到 https://,无需再创建 HTTP 隧道,有助于节省隧道数占用

创建 HTTP(S) 隧道时,必须选择和 协议 一致的 隧道类型,否则无法穿透成功。

如果隧道类型里没有 HTTP(S) 选项则说明 节点不支持建站,请更换节点:

完成选择后,填写刚才获取到的本地服务信息,然后在 绑定域名 处填写您自己的域名:

设置解析

什么情况下需要设置解析?

HTTP(S) 类型的隧道必须设置解析,TCP 类型的隧道可以设置解析也可以直接用 节点 IP节点域名 访问

隧道列表在新窗口打开 可以找到节点域名,隧道启动时也会输出。对于 HTTP(S) 隧道,也可以在此处确认您设置的子域名。

下图的示例中,节点域名是 cn-hk-nf-1.natfrp.cloud,第一条隧道的子域名是 www

绑定域名必须和您设置解析的域名完全一致

请注意区分 www.example.comexample.com,这是不同的两个域名(前者有 www 子域,后者没有)
如果您直接使用根域名进行解析 (比如 example.com),子域名留空即可,如果提示不允许留空就填一个 @ 符号

下方列出了部分域名注册商设置解析的方式,如果不会操作可以直接咨询 域名注册商客服

阿里云

请参考 阿里云官方文档在新窗口打开CNAME 记录 > 设置方法 直接进行添加。

启动隧道

现在到您的内网设备上启动隧道,如果一切正常,服务就可以在外网被访问到了。

在本教程的示例中,我们可以访问的是:

  • http://www.example.com (HTTP 隧道, 示例中的 HTTPSample)
  • http://cn-hk-nf-1.natfrp.cloud:51906 (TCP 隧道, 示例中的 TCPSample)
  • http://www.example.com:51906 (TCP 隧道, 示例中的 TCPSample, 通过自己的域名进行解析)