Skip to content

域名前置 ​

域名前置是用户应用代替你的节点去连接的 CDN 主机名。CDN 接收连接,根据收到的主机名找到你的服务器,再自己建立到你节点的连接。这样用户连接的是 CDN,你节点的地址完全不必出现在他们的订阅中。

域名前置页面:前置列表,显示每个前置的标签、CDN 地址、端口、已启用它的入站,以及它在订阅中新增的条目域名前置页面:前置列表,显示每个前置的标签、CDN 地址、端口、已启用它的入站,以及它在订阅中新增的条目

前置位于核心配置 → 域名前置。最多可以有八个前置,每个入站最多可以使用四个。

前置如何增加订阅条目 ​

前置属于入站,而不属于节点。由 CDN 选择与你的哪台服务器通信,因此一个前置覆盖提供该入站的所有节点,并且在用户订阅中每个入站只增加一条条目,永远不会每个节点一条。

三个节点提供同一个入站,每个节点有两个链接地址,该入站上有两个前置:

3 nodes × 2 addresses = 6 direct entries
              2 fronts = 2 front entries
                         ───────────────
                         8 entries

即:3 个节点 × 2 个地址 = 6 条直连条目,加上 2 个前置 = 2 条前置条目,共 8 条。前置与节点地址是相加关系,永远不会相乘。页面会显示每个前置新增多少条条目。

哪些入站可以前置 ​

CDN 会自己终止 TLS 连接,并把 HTTP 请求转发给你的服务器。因此,只有在 CDN 可承载的传输上使用 HTTP 的入站才能前置:

WebSocket、HTTPUpgrade、gRPC、XHTTP 和 HTTP/2。

无论从前置还是从入站保存,面板都会拒绝其他类型,并说明原因:

被拒绝的原因
REALITY它与入站自己的密钥绑定,而 CDN 出示的是它自己的证书。两者无法配合。
Hysteria、Hysteria2、TUIC它们运行在 QUIC(UDP)之上;CDN 转发的是 HTTP。
端口跳跃端口范围属于节点自己的监听;前置是一个端口上的一个主机名。
原始 TCP、AnyTLS、ShadowTLS、SOCKS、SSH 等CDN 无法承载不是 HTTP 请求的数据流。
把上传数据放在请求头或 cookie 中的 XHTTPCDN 不会在这些位置承载数据。

对于这些入站,请改为给节点添加第二个地址:见 节点 中的节点链接地址。入站预设 VLESS + WebSocket + TLS 和 VLESS + gRPC + TLS 就是为前置而设计的。

设置前置 ​

先在你的 CDN 上:

  1. 添加主机名,并让它经过 CDN 代理(在 Cloudflare 中即橙色云朵)。
  2. 把它的源站指向你节点的地址。
  3. 如果入站在 CDN 后面没有自己的 TLS,请允许以普通 HTTP 访问源站。这很常见,也没有问题:用户的加密连接是与 CDN 之间的。

然后在面板的核心配置 → 域名前置中点击添加:

字段
标签前置的名称,并会加到它生成的条目名称中,以便区分同一入站上的两个前置。
地址应用连接的 CDN 主机名。*.cdn.example.com 会为每个订阅者分配独立的主机名(见下文)。
端口留空表示 443。这是 CDN 的端口,而不是入站的端口。
SNI、Host留空时发送前置自身的主机名,这正是 CDN 所期望的。只有当 CDN 需要在源站使用另一个名称时才填写。
ALPN、指纹、允许不安全应用与 CDN 之间的 TLS。CDN 拥有有效证书,因此请保持允许不安全关闭。
客户端地址头见客户端地址头。
回源节点可选。见下文。
排序该前置的条目在订阅中的位置。
入站它所覆盖的入站。只列出 CDN 能承载的入站。

你也可以从另一侧启用前置:入站自己的域名前置标签页会列出其上的前置。这是从入站一侧看到的同一项设置。

前置条目的地址、端口、SNI、Host、ALPN 和指纹取自前置,路径和其他所有内容取自入站。它会去掉证书固定和端口跳跃范围,因为 CDN 出示的是它自己的证书。

前置的修改在用户下次拉取订阅时生效;除客户端地址头外,不会向节点发送任何内容。

每个订阅者一个主机名 ​

把地址写成 *.cdn.example.com,每个订阅者都会在其下获得自己的主机名,例如 k7m2rq9xdp.cdn.example.com。这样某个主机名失效时,只影响一位客户,而不是所有客户。

  • 名称根据用户的订阅计算得出,因此每次应用刷新时都相同,而每个用户各不相同。无法由它反推出订阅。
  • 你需要一条通配符 DNS 记录 *.cdn.example.com,并经过 CDN 代理。没有它,这些名称对任何人都无法解析。
  • **请确认 CDN 的证书覆盖这些名称。**在 Cloudflare 上,免费的 Universal SSL 证书覆盖 example.com 及其下一级(*.example.com),不覆盖 *.cdn.example.com。要么把通配符直接放在你的区域下一级,要么使用能为更深层名称签发证书的 Cloudflare 套餐。其他 CDN 有各自的规则。

回源节点 ​

回源节点说明 CDN 转发到哪个节点。它不会增加条目。面板用它把前置从不在该节点上的用户的订阅中去掉(因为该条目在那里无法登录),并在该节点不提供你启用了前置的某个入站时提醒你。当由 CDN 选择源站时,保持为任意节点。

仅经由前置 ​

入站域名前置标签页中的仅经由前置开关,会把该入站的直连条目从订阅中去掉,这样节点的地址不会出现在用户文件的任何地方。

它按用户生效,并且只在确实为该用户写入了前置条目时才生效。如果某个用户的前置全部被去掉(例如因为回源节点不是该用户所在的节点),该用户会保留直连条目,而不是得到一个空文件。入站上没有启用任何前置时,该开关不起作用。

客户端地址头 ​

在 CDN 后面,所有到你节点的连接都来自 CDN 的地址。客户端地址头指定 CDN 用来传递用户真实地址的请求头:Cloudflare 为 CF-Connecting-IP,Akamai 为 True-Client-IP,Fastly 为 Fastly-Client-IP,ArvanCloud 为 AR-Real-IP。

设置后,启用了该前置的每个 XHTTP 入站都会从这个请求头读取用户地址,这样设备和地址数限制以及日志看到的都是真实用户。只有满足以下条件时,该地址才可信:

  • 请求头由 CDN 自己写入,而不是转发应用发来的请求头(请查阅 CDN 的文档);
  • 节点只接受来自 CDN 的连接,因为直接访问节点的应用也可以发送这个请求头;
  • 该入站上的每个前置都指定同一个请求头。

修改这个请求头是唯一会到达节点的前置修改:它会重启节点上受影响的 XHTTP 入站,从而断开其现有连接。

位于 ingress 后面的入站 ​

ingress 按 TLS 握手中的名称进行路由。CDN 用前置的主机名连接你的节点,因此如果 ingress 路由没有列出该主机名,流量会被送到它的兜底去处。请把前置的主机名加入路由,或加入 .cdn.example.com 这样也能覆盖通配符前置的后缀。在你这样做之前,面板会一直给出警告。

文字与图片采用 CC BY 4.0 许可。