mistgate 文档
中文

在同一节点上运行 VLESS 和 Hysteria2

了解 Hysteria2 和 VLESS 在同一节点上使用哪些端口、两者同时需要 TCP 443 时会发生什么、Let’s Encrypt 续期与端口的关系,以及如何先让少数用户试用 VLESS。

本页内容

节点可以同时运行 Hysteria2 和 VLESS。它们使用不同的传输方式(Hysteria2 使用 UDP,VLESS 使用 TCP),因此通常不会冲突。两者唯一共用的端口是 TCP 443,本页介绍该端口。

各端口的用途#

端口 使用方 用途
UDP 443(或协议配置使用的端口) Hysteria2 隧道,以及所有非客户端访问者都会看到的 HTTP/3 站点
TCP 443 Hysteria2 HTTPS 站点,以及对 Let’s Encrypt 请求的响应
TCP,协议配置使用的端口(默认为 443) VLESS 隧道
TCP 80 节点 Let’s Encrypt;端口未被其他程序占用时使用

节点上的两个协议配置不能使用相同网络上的相同端口;但 UDP 443 和 TCP 443 是不同端口。VLESS 协议配置使用其他 TCP 端口时,不会影响 Hysteria2。

启用节点上使用 TCP 443 的 VLESS 协议配置时,节点会关闭该端口上的 Hysteria2 HTTPS 站点;VLESS 协议配置移除、停用或改用其他端口后,节点会重新开放该站点。Hysteria2 本身和其 HTTP/3 站点仍会通过 UDP 正常工作。现在,通过 TCP 443 打开 https://de1.example.com 的访问者会连接到 REALITY;它会将非 VLESS 客户端转发到 REALITY 目标。目标为节点自身站点(默认值)时,访问者会看到 Hysteria2 所显示的同一站点及节点自身的证书。目标为其他站点时,访问者会看到该站点及其证书。

在带有已启用 Hysteria2 协议配置的节点上添加 TCP 443 VLESS 协议配置时,或反向操作时,对话框会显示警告(hy2_decoy_paused),并列出两个协议配置的名称、端口和目标。此警告不会阻止操作。

共用节点的几种方式#

方式 Hysteria2 保留的功能 注意事项
VLESS 使用其他 TCP 端口,例如 8443 全部功能:TCP 443 上的站点和证书续期 在服务商处开放此端口。有些网络会过滤 443 以外的端口,VLESS 在这些网络中将无法连接。
VLESS 使用 TCP 443,REALITY 目标为其他站点 隧道。HTTPS 站点会暂停 Let’s Encrypt Hysteria2 协议配置的证书之后只能通过 TCP 80 续期:见下文。
VLESS 使用 TCP 443,REALITY 目标为节点自身站点(默认值) 隧道、通过 REALITY 显示的同一站点,以及证书续期 节点需要有域名,并且 Agent 版本至少为 v0.1.35。请参阅 VLESS REALITY。

第一种方式不需要支付额外费用,也不会影响 Hysteria2;可以开放端口时选择它。第三种方式可让 VLESS 使用所有网络都放行的端口,同时保留站点和证书续期;有域名的节点均可使用。第二种方式适用于没有域名的节点,但会导致站点暂停且需要开放 TCP 80。VLESS 使用 TLS 直连或经 CDN 连接时,请参阅 TLS 和 CDN。

证书#

节点通过响应 Let’s Encrypt 发出的验证请求,为其 Hysteria2 协议配置获取 Let’s Encrypt 证书。验证请求有两种传输方式:通过 TCP 80,或经 Hysteria2 站点通过 TCP 443。REALITY 目标为节点自身站点时,REALITY 会将 TCP 443 上的验证请求转发到该站点,由节点响应:证书会照常续期,不需要 TCP 80。目标为其他站点时,发往 TCP 443 的验证请求会抵达该站点;Hysteria2 站点暂停时,请求会失败。因此需要:

  • 节点上有 Let’s Encrypt Hysteria2 协议配置,且 VLESS 协议配置使用 TCP 443 并将目标设为其他站点时,保持 TCP 80 可从互联网访问,并确保其他程序没有占用该端口。
  • 443 上验证失败不会造成问题:节点会在下一次验证时改用端口 80;Let’s Encrypt 每个名称每小时允许五次验证失败。
  • 使用自签名证书的 Hysteria2 协议配置无需续期,也不会受到影响。REALITY 本身不需要证书。

证书即将到期告警(cert_expiry,请参阅运行状况)会提前 14 天发出警告。VLESS 占用 TCP 443 时,诊断无法读取 Hysteria2 协议配置在该端口提供的证书;此时会使用节点上报的、上次发出的证书到期时间。如果证书已续期但之后还没有访问者,该日期可能滞后,告警会过早触发;下一位访问者连接后,告警会清除。

Mistgate 如何检查端口#

端口检查会测量 UDP:向节点发送数据报,并统计抵达的数据量。它不会检查 TCP 端口能否抵达节点,也不会检查 TCP 80。添加 VLESS 协议配置后,请从其他网络检查其端口,例如运行 nc -vz de1.example.com 8443,或使用手机连接。

让少数用户试用 VLESS#

可以先让少数用户使用 VLESS,观察它与 Hysteria2 共用节点时的情况。

  1. 创建一个分组,例如「VLESS test」,并将 Hysteria2 协议配置和新的 VLESS 协议配置添加到其中。将试用用户移到该分组:每位用户只属于一个分组,分组决定他们会看到哪些服务器。
  2. 创建 VLESS 协议配置。在创建后立即 → 加入分组中,Mistgate 会选中尚未拥有此协议配置的分组;第一个 VLESS 协议配置会因此选中所有分组。只保留「VLESS test」处于选中状态。
  3. 将协议配置部署到要试用的节点。试用分组中的用户下次更新订阅时,会在 Hysteria2 服务器旁看到新的服务器。服务器按国家、位置和节点排序,同一节点上先显示 Hysteria2,再显示 VLESS。

服务器名称使用订阅的名称模板(默认先显示国家,再显示协议配置名称),因此名为「VLESS · 443」的协议配置会显示为「🇩🇪 DE · VLESS · 443」,与「🇩🇪 DE · Hysteria2 · 443」并列。Happ 还会在名称末尾显示节点负载。

要比较,请在用户页面打开某位用户:其所选时间段内的流量会按节点和协议列出,概览图表也会按协议拆分。一个节点上的两个 VLESS 协议配置会合并统计;要比较通过 TCP 和 XHTTP 传输的 VLESS,请将它们部署到不同节点。

确认没有问题后,将 VLESS 协议配置添加到其他分组;如果不合适,则将其从试用分组移除并删除。

在 GitHub 上编辑此页