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://frp-xxx.com:12345
https://frp-xxx.com: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, 通过自己的域名进行解析)

Cloudflare 代理 (小黄云) 注意事项

不使用 Cloudflare 代理,或不知道 Cloudflare 代理是什么的用户请忽略本节。

Cloudflare 代理会为您的网站自动配置 SSL/TLS ,SSL/TLS设置可在 Cloudflare Dashboard 中更改。

关闭(不安全)灵活 工作模式下,Cloudflare 服务器通过 HTTP 协议访问源服务器,而在 完全完全(严格)严格(仅 SSL 源服务器拉取) 工作模式下,Cloudflare 服务器通过 HTTPS 协议访问源服务器。

如果您的隧道是 HTTPS 隧道,且您使用 关闭(不安全)灵活 工作模式,流量将无法到达您的隧道,用户访问您的网站时会出现 503 Service Unavailable 错误。

同理,如果您的隧道是 HTTP 隧道,且您使用 完全完全(严格)严格(仅 SSL 源服务器拉取) 工作模式,流量将无法到达您的隧道,用户访问您的网站时会出现 503 Service Unavailable 错误。

请参照下面的指引进行配置。

HTTP 隧道

准备工作:在 Cloudflare 账户主页找到并进入你域名的配置页面

  1. 点击侧边栏的 SSL/TLS

  2. 在左边的页面里点击 配置

  3. 自定义 SSL/TLS 设为 灵活

  4. 点击 保存

如果您不想使用 SSL,请选择 关闭(不安全)