隧道
隧道把你的节点分成两种角色连接起来:用户连接中继,流量从它的某个出口离开前往互联网。当用户容易访问的服务器并不是你希望互联网看到其地址的服务器,或出口服务器不应接受任何连接时,就使用隧道。本页面介绍如何创建和运行隧道;隧道内部 说明隧道内部的工作原理。


开始之前
- 中继和出口都已在 节点 中添加并已连接。
- 中继为用户提供服务:它有一个包含入站的模板,你的用户属于该模板。隧道只改变中继流量的出网位置。
- 监听的节点有一个对端能访问的地址:它的链接地址,没有时则为其地址。拨号一方会同时尝试每个链接地址,因此第二个地址就是现成的备用。
- 隧道端口已在监听服务器的防火墙中开放。面板不会替你开放。
创建隧道
按添加。新隧道带有合理的默认设置:选好节点,按保存,它就会在两端生效。
| 字段 | |
|---|---|
| 名称 | 成为隧道的标签:tunnel- 加上小写的名称。保存后不能修改,因为两端的凭据都由它生成。 |
| 模式 | 由哪一方开放端口(见下文) |
| 中继节点 | 用户连接的地方。它本身不出网。 |
| 出口节点 | 一个或多个;流量从这里出网 |
| 每个出口的链路数 | 每个出口保持多少条并行连接。几乎所有线路用四条都合适。 |
| 单流窗口 | 单条连接可同时在途的数据量。除非在长距离线路上单个下载很慢、而多个并行下载很快,否则保持默认。 |
| 已启用 | 停用的隧道会从两个节点上移除,但保留其设置 |
表单会用你的节点名称,用一句话说明这条隧道将做什么。
一个节点可以是一条隧道的中继、另一条隧道的出口,但不能在同一条隧道中同时担任两者。
反向还是正向
模式只决定由谁开放端口。流量始终是:用户 → 中继 → 出口 → 互联网。
| 反向 — 出口节点主动连入(默认) | 正向 — 中继主动连出 | |
|---|---|---|
| 监听方 | 中继 | 每个出口 |
| 必须开放端口的一方 | 中继 | 每个出口 |
| 出口在 NAT 后或没有开放端口 | 可以 | 不可以 |
除非中继无法接受来自出口的连接,否则选择反向。
配置档:端口、安全与传输
配置档是承载隧道的一种方式:它有自己的监听端口、自己的安全和自己的传输。每条隧道至少有一个配置档。
- 安全:REALITY(默认)不需要证书,其密钥在保存时生成。TLS 使用面板为该隧道签发、对端信任的证书;你也可以在添加设置中粘贴自己的 PEM 证书和私钥。不加密会在两个节点之间以明文传输用户流量。
- 传输:无(普通流),或 WebSocket、gRPC、HTTP、HTTPUpgrade、QUIC 等 Web 传输。要把隧道放在 CDN 后面,需要使用 Web 传输。QUIC 需要 TLS,不能与 REALITY 一起使用,表单会给出提示。
- 高级按节点收到的原样显示安全和传输配置块。在这里编辑会覆盖其他标签页。
按配置档标签旁的 +(新增一种承载方式)可添加另一个配置档,最多八个。配置档不是独立的隧道:它们共享通往同一组出口的连接池。如果某种协议被封锁,隧道会失去该配置档的承载能力,但会继续通过其他配置档工作,用户的出口地址也不会改变。
有两个或更多配置档时:
- 负载均衡:分摊使用每个已连接的配置档,并把每个新流发往最空闲的那个。优先级使用列表中第一个已连接的配置档,其余作为备用。
- 此配置档的链路数设置每个配置档的份额。六条链路的配置档承载的流量是两条链路的三倍。留空则使用每个出口的链路数。
每个配置档需要自己的端口,并且不能与监听节点上的任何入站或其他隧道相同。
中继流量的去向
当中继只承载一条隧道时,面板会自动将该隧道设为中继的默认出口:中继原本要发往互联网的所有流量都会走隧道。模板路由中的规则仍然优先,因此被规则设为直连或拦截的流量不会进入隧道。隧道的默认出口一行(在该行的详情中)会说明是否属于这种情况。
当中继承载多条隧道或有自己的默认出站时,面板不会选择出口,并会说明原因。此时,以及只有部分流量需要走隧道时,请在中继自己的路由中编写引用该隧道标签的规则:节点 → 配置 → 路由(本节点覆盖)。见 路由与 DNS。
WARNING
切勿在模板路由中写入隧道标签。只有中继拥有该标签。模板上的其他节点会被要求使用一个它们没有的出站,从而拒绝整个配置。
状态
页面打开时,状态列会向每条隧道的两端查询:
| 状态 | 含义 |
|---|---|
| {n} 个连接 | 正常工作,有这么多条连接处于连通状态 |
| 没有连接 | 中继有响应,但没有出口连接到它 |
| 中继不可达 | 面板连不上中继节点 |
| 未知 | 检查本身失败;这并不说明隧道的情况 |
统计条统计的是同样的状态。刷新状态会重新查询。
行菜单中的实时状态会查询隧道的每个节点,并在打开期间每隔几秒刷新一次。它为每个出口显示连接、流和在线时长。在拨号一方,它显示下次尝试前的重试退避和最近错误:隧道连不上时,先看这一项。
重置
实时状态对话框中的重置会在每个节点上重建隧道:所有连接都被断开,拨号一方立即重新开始。当一端已连通但没有承载任何流量时,或你解除了某处封锁、不想等待下次重试时使用。隧道上的流量会中断,直到重新连接。
每个中继一条隧道
位于同一组出口前面的多个中继,就是每个中继一条隧道。这样从一个中继获取的凭据在另一个中继上无效,新增中继也不会影响已在承载流量的隧道。
行菜单中的创建副本可生成下一条隧道:为它填写名称和中继,它会复制出口、配置档和设置。证书和密钥不会被复制,副本会生成自己的。
批量处理隧道
勾选多行可一起处理:
- 编辑所选…可统一设置出口、每个出口的链路数、负载均衡或单流窗口。留空的字段不会更改。
- 启用、停用、重置和删除。
每条隧道都会像单独编辑一样进行检查。被面板拒绝的会单独报告,其余的照常修改。
行菜单中的流量图表显示经过该隧道的流量。
连不上时
- 查看实时状态中的最近错误。
- 检查监听节点上的监听端口是否开放:反向模式下是中继,正向模式下是每个出口。在另一个节点上执行:
nc -vz <address> <port>。 - 检查监听节点的链接地址能否从另一个节点访问,而不仅是从面板访问。
- 位于 NAT 后的出口只能使用反向模式。
- 修复后按重置。
