配置参考 / 桌面与 Android 客户端

V2Ray 进阶配置
路由、DNS 与 TUN

从订阅来源到最终出站,按流量经过的配置层次查阅。

首次使用先按入门指南完成导入、连接与验证;本页用于已有可用连接后的精细调整。桌面优先使用 v2rayN,Android 按内核需求选择 v2rayNG 或 v2flyNG。安装包与架构说明见客户端页面。

  • 订阅与过滤
  • 有序规则
  • 解析与接管
  • 配置回退

01 / 配置来源

订阅分组与服务器过滤

分组边界

订阅分组首先是来源管理工具,不是流量分流规则。一个分组通常保存订阅地址、更新选项与该来源生成的服务器记录。把某条服务器移入分组,并不会自动让某类网站使用它;网站走哪个出站仍由当前连接配置和路由决定。先划清这层边界,才能避免把列表整理误当成网络策略。

在 v2rayN 中,先打开订阅分组管理,新建名称清楚的分组,再录入来源提供的订阅地址。名称建议描述用途或来源,例如“日常使用”和“备用连接”,不要只写难以区分的字母。保存后对当前分组执行更新,再回到服务器列表确认导入结果。不同界面的菜单位置可能不同,应以项目名称和功能说明识别入口。

订阅地址往往携带访问凭据,应当按账户信息处理。分享截图前遮住地址和二维码,不要把完整链接粘进公开日志。地址能在浏览器打开,不代表返回内容一定适合当前客户端;登录页、提示页面和格式转换结果都可能被当成普通文本下载,最终表现为更新完成却没有可用记录。

服务器过滤

过滤用于缩小列表或控制更新后保留的记录,但各客户端的过滤作用范围不同。有的只影响当前显示,有的在订阅解析阶段排除条目。第一次设置时,先用简单的名称关键词验证行为:记录更新前的可见内容,保存条件,重新更新该分组,再清空筛选观察。只有理解实际作用,才适合继续组合复杂条件。

若输入框明确支持正则表达式,可用下列模式匹配名称中的两个用途词。竖线表示“或”,括号用于分组。若输入框只支持普通文本,粘贴正则不会获得相同效果。名称由来源决定,可能随更新变化;地区缩写、倍率标注与协议名称也未必有统一格式,过滤条件应保持宽松。

名称过滤 · 正则示例
(日常|备用)

先判断输入框是“保留匹配”还是“排除匹配”。相同表达式放在不同模式中,结果会完全相反。出现空列表时,不要立刻重新安装客户端:清空过滤条件、选择全部分组、取消搜索,再更新单个来源。若记录重新出现,问题位于显示或过滤层,而不是服务器连接参数。

更新与手工修改

订阅记录通常由远端数据重新生成。直接修改其地址、端口或传输字段,下次更新可能恢复原值。需要长期保留的调整,应复制为独立的手工记录并使用不同名称,同时说明复制日期与用途。这样既能继续接受来源更新,也能知道哪一条已经脱离订阅管理,避免用旧参数覆盖新配置。

Android 上的 v2rayNG 与 v2flyNG 也应按来源分别管理订阅。导入二维码适合单条配置,订阅导入适合后续批量更新;两者不是同一种数据关系。若从另一台设备迁移,先确认导出的是单条连接、订阅地址还是完整应用配置,再选择对应的导入入口,不要反复尝试不相干的格式。

更新失败时,先保留当前可用记录,再检查系统时间、订阅是否过期以及更新请求是否需要已有代理。某些客户端允许通过当前代理更新,某些更新路径使用直连。先用当前网络能到达的方式更新一个分组,成功后再考虑自动更新;不要让全部来源依赖一条尚未验证的连接。

完成整理后,选一条记录作为测试基线,暂时不要开启自动切换与复杂筛选。先证明该连接在普通系统代理下可用,再进入路由和 DNS 章节。来源管理解决的是“配置从哪里来”,连接测试解决的是“配置是否能用”,这两项验收应分开记录,才能缩小后续故障范围。

02 / 匹配与出站

路由规则实战

匹配顺序与规则条件

路由规则按顺序检查,先命中的规则决定出站。具体例外应放在宽泛规则之前,兜底规则放在最后。若先把全部端口交给代理,后面的私有地址直连规则便没有机会生效。调整时先写清期望:哪些目标直连、哪些需要代理、哪些应阻断,再把这份目标清单转换成有序规则。

同一条规则里,不同类型的条件通常需要同时满足;同一个域名数组内的多个项目通常表示任选其一。例如同时指定域名与端口,含义是该域名并且使用指定端口,而不是域名或者端口。若希望两个条件各自独立命中,应拆成两条规则。对条件关系的误解,比拼写错误更难从界面发现。

常用域名写法中,full:example.com 匹配完整域名,domain:example.com 匹配该域名及子域名。普通字符串与正则的范围更宽,容易误中名称相近的目标。能用完整域名表达的例外,就不要先用模糊关键词;域名本身不包含协议、路径或网页参数。

最小分流片段

下面展示私有地址与中国大陆常见域名、地址段直连,其余 TCP 和 UDP 流量代理的规则结构。将该对象合并到主配置的 routing 层。示例依赖可用的 Geo 数据文件,并假定已有名为 direct 与 proxy 的出站;标签只是一种约定,不会自动创建相应连接。

主配置 · routing
{
  "routing": {
    "domainStrategy": "IPIfNonMatch",
    "rules": [
      {
        "type": "field",
        "ip": ["geoip:private"],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "domain": ["geosite:cn"],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "ip": ["geoip:cn"],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "network": "tcp,udp",
        "outboundTag": "proxy"
      }
    ]
  }
}

IPIfNonMatch 表示域名规则未命中时,可尝试解析并继续检查 IP 规则。它不保证所有应用请求都携带域名,也不等于最终出站一定使用该次解析结果。若请求只有目标 IP,域名规则可能无法参与;若希望恢复域名信息,需要结合入口嗅探或其他机制,不能单靠增加域名列表解决。

Geo 规则的效果取决于数据文件及其分类。一个服务可能同时使用多个域名、内容分发地址和第三方资源,不能因为首页直连就认为整个应用都已直连。需要给某项服务设例外时,先观察实际请求目标,再逐个补充必要域名。不要把整片公共云地址段直接加入直连,否则会扩大策略范围。

规则验收

测试对象预期行为先查位置
局域网设备通过直连出站访问私有地址规则与本地路由
明确的域名例外命中指定标签域名写法与规则顺序
未列出的普通目标落入兜底出站最后一条规则与标签

每次只改一组规则,并使用同一测试目标比较前后结果。浏览器缓存、复用连接与应用后台进程会让旧连接继续工作,因此保存后应重启内核,并关闭相关应用的旧连接。查看日志时关注目标域名、目标地址与出站标签,不要把连接建立成功直接理解为命中了预期规则。

广告分类阻断可以作为独立的首部规则,但不是所有资源都适合按大类屏蔽。若启用后登录、支付或验证码异常,应先停用该条规则复测,再为必要域名添加更靠前的例外。阻断需要已有阻断出站,通常采用 blackhole 协议;仅写一个名为 block 的标签并不会自动生效。

还要区分“系统代理模式”和“内核路由模式”。前者决定应用是否把请求送给客户端,后者决定收到的请求如何转发。未进入客户端的流量不会被上述规则处理。两层设置的详细关系可参阅系统代理与路由模式详解,排错时始终先确认流量入口。

03 / 域名解析

DNS 配置优化

解析链路

DNS 优化先解决路径一致性,再考虑响应速度。一次访问可能经过系统解析器、浏览器内置的加密解析、客户端 DNS 与远端服务器解析。只有知道谁发出查询、查询走哪条出站、结果交给谁使用,才能判断改动是否有效。单独替换一个服务器地址,通常不能控制整条解析链路。

系统代理主要转发遵循代理设置的应用请求,不一定接管系统 DNS。浏览器可能把域名直接交给代理,也可能先自行解析;其他程序还可能直接访问固定解析地址。因此,客户端中填入 DNS 并不代表设备上的全部查询都会使用它。应分别检查浏览器设置、系统网络设置以及客户端的接管范围。

远程解析与直连解析的划分,应服务于路由目标。直连资源通常适合使用当前网络可达的解析器,代理资源则需要确认解析请求能经预期路径到达。若加密解析服务器使用域名地址,还需要先解析该服务器本身,这一步称为引导解析;引导路径错误会形成“等待解析器解析自身”的依赖问题。

内核 DNS 示例

以下是主配置中的局部 dns 对象。中国大陆域名优先交给指定服务器,其他查询使用 DoH 地址。示例用于解释按域名分配解析器的结构,不承诺适合所有网络。DoH 请求在具体内核与配置下如何选出站,仍须结合路由和日志验证,不能根据地址前缀推断其必然走代理。

主配置 · dns
{
  "dns": {
    "queryStrategy": "UseIPv4",
    "servers": [
      {
        "address": "223.5.5.5",
        "domains": ["geosite:cn"]
      },
      "https://1.1.1.1/dns-query"
    ]
  }
}

domains 用于指定优先匹配该服务器的域名范围,但查询失败后的行为还受回退选项与内核实现影响。它不应被理解为严格的网络隔离策略。若需要限制某类查询绝不访问其他解析器,应进一步确认当前内核支持的回退字段、失败行为和真实网络路径,再设计规则,不能只保留这段示例。

queryStrategy 在这里限定内核 DNS 的查询策略,不会关闭操作系统的 IPv6,也不会阻止所有应用自行查询其他记录。选择 IPv4 可用于隔离双栈问题,但不是通用提速开关。若当前网络和服务器都能正确处理 IPv6,应单独验证后再决定是否保留,而不是长期隐藏相关故障。

缓存与分层验证

更换解析配置后,旧结果可能继续留在系统、浏览器、应用和内核缓存里。先关闭目标应用并重启客户端,再按系统提供的方式刷新缓存。比较时使用同一个域名并记录解析结果与实际连接地址;不要仅刷新网页一次就认定新配置生效,页面资源可能来自本地缓存或仍在复用旧连接。

出现“地址能访问、域名打不开”时,先查 DNS;出现“域名能解析、连接失败”时,继续查路由和远端连接。解析成功只说明拿到了结果,不说明结果适合当前网络路径。某些服务按解析器位置返回不同接入地址,直连解析结果再交给远端出站,可能带来不必要的绕行或连接失败。

如果只有浏览器表现异常,暂时关闭其自定义安全 DNS,恢复跟随系统的设置后对比;如果只有某个应用异常,检查它是否使用独立解析或固定地址。测试结束后再决定最终策略。这里的临时关闭是为了缩小问题范围,不是建议所有网络都采用同一种解析方式。

客户端的“远程 DNS”“直连 DNS”等表单字段可能由配置生成器转换成多个内核对象。优先使用同一套表单完成设置,不要同时在自定义 JSON 中再写一套相反配置。需要手工扩展时,查看最终生成文件,确认没有重复对象与覆盖关系,再把有效修改记录到独立的变更说明中。

04 / 流量入口

TUN 模式

系统代理与虚拟网卡

TUN 模式通过虚拟网络接口把匹配路由的 IP 流量送入处理链,适合不遵循系统代理的应用。它解决的是入口覆盖问题,不会自动修正远端服务器、协议参数或 DNS 配置。若普通系统代理尚未连接成功,应先修复基础连接,再启用 TUN;否则多个配置层同时失败,很难判断原因。

v2rayN 的 TUN 功能可能由客户端调度独立网络组件实现,不能把界面中的 TUN 选项理解为向 Xray 主配置增加一个固定字段。实际入口、路由与 DNS 接管方式取决于客户端所用组件。手工配置前应确认配置文件属于哪个组件,不要将不同实现的网卡字段混进同一个 JSON 对象。

Android 上的 v2rayNG 与 v2flyNG 通过系统 VPN 接口接管流量,需要用户批准连接请求。系统状态栏中的 VPN 标识表示接口已经建立,不等于远端连接可用。桌面与 Android 的入口实现、权限和应用过滤能力不同,不能照搬某一平台的开关组合,只能迁移分流目标和验证方法。

启用顺序与权限

启用前先保存当前可用配置,关闭其他会修改默认路由的网络工具,再授予客户端所需权限。桌面系统可能需要管理权限、后台服务或虚拟网卡组件;具体以客户端提示为准。不要为了让一次测试通过而长期关闭安全机制,应先识别缺失权限,再使用客户端支持的授权方式。

首次测试保留最少设置:一条已验证的远端连接、简单路由和明确的 DNS 路径。启动后检查虚拟接口是否出现、是否生成预期路由,以及普通应用能否访问目标。只有系统代理下可用、TUN 下不可用时,排查重点才应转向入口组件、权限与路由接管,而不是重新导入所有订阅。

平台重点检查常见冲突
Windows权限、虚拟接口、路由优先级其他虚拟网卡与安全软件策略
macOS / Linux服务权限、接口与 DNS 状态系统网络管理器或已有隧道
AndroidVPN 授权、应用范围与后台运行其他 VPN 服务占用系统接口

路由回环与局域网

客户端到远端服务器的连接必须避免再次被自身 TUN 接管,否则可能形成回环。自动路由实现通常会安排出口保护或例外,但手工叠加路由后仍可能破坏这一关系。若启动后立即全网失联,先关闭 TUN 观察网络是否恢复,再检查服务器出口与默认路由,不要继续增加更多全局规则。

局域网打印机、共享目录和管理页面需要单独验证。私有地址直连规则只控制已经进入内核的流量,而操作系统是否把这些流量送入虚拟接口,仍由系统路由决定。发现局域网不可达时,应同时检查两层:系统有没有正确的局域网路径,客户端收到后有没有选择直连出站。

UDP、实时通信和部分游戏流量还受服务端能力、网络限制以及 TUN 组件支持影响。网页能打开而某项应用失败,并不足以判断整个模式失效。先确认该应用的传输类型、是否被应用过滤排除,再检查出站是否具备相应能力。不要用单一网页测试替代对实际应用的验证。

MTU 影响虚拟接口传输的数据包大小。只有出现特定站点卡住、大请求失败或连接在建立后停滞等现象时,才值得把它列入排查。先使用客户端默认值,并记录调整前后的表现;不要盲目套用网上的固定数字,因为底层网络、隧道封装与路径条件都可能不同。

最后再决定是否同时开启系统代理。两个入口同时存在不一定会出错,但会增加判断应用实际路径的难度。测试阶段一次只保留一种入口;稳定后再按应用需求组合。关于全局、绕过大陆与入口设置的区别,可结合模式选择文章逐项核对。

05 / 域名映射

FakeDNS

虚拟地址与原始域名

FakeDNS 为域名返回池内的虚拟地址,并在内部保存地址与域名的映射。应用随后连接该虚拟地址时,配套入口恢复原域名,再交给路由和出站。它不是公共解析器,也不是让目标网站拥有新地址。它的价值在于保留域名信息,减少本地真实解析对后续分流判断的影响。

这套机制要求查询与连接处于同一条受控链路。只有 DNS 查询进入 FakeDNS,而后续连接绕开客户端,应用就会尝试直接访问一个并非真实服务器的地址。相反,若连接进入了入口,但查询由浏览器的独立加密 DNS 完成,客户端可能从未建立映射,域名恢复也就无法按预期发生。

因此不要把 FakeDNS 当作普通 DNS 地址填进系统。先确认客户端及入口组件明确支持对应模式,再按照同一套实现配置查询接管、地址池路由和映射恢复。v2rayN 调度的 TUN 组件可能使用自己的虚拟地址机制,不能因为功能名称相似,就同时启用另一套内核 FakeDNS。

Xray 局部配置

下面展示 Xray 中的三个相关层级:顶层地址池、DNS 服务器列表,以及需要合并到目标入口的嗅探对象。地址池使用保留的基准测试地址段,不是公网目的地址。此片段没有创建透明入口,也没有添加系统路由;缺少这些配套条件时,复制它不会让整台设备自动获得 FakeDNS 功能。

主配置 · 地址池与 DNS
{
  "fakedns": [
    {
      "ipPool": "198.18.0.0/15",
      "poolSize": 65535
    }
  ],
  "dns": {
    "servers": ["fakedns"]
  }
}
目标 inbound · 合并 sniffing
{
  "sniffing": {
    "enabled": true,
    "destOverride": ["fakedns"],
    "routeOnly": false
  }
}

ipPool 定义虚拟地址范围,poolSize 控制映射池容量。池中地址只是标识,不应该被当成真实远端地址交给直连出口。配置前还要检查现有局域网、其他隧道和测试网络是否使用同一范围。地址范围冲突会让部分连接被错误送到物理接口或其他虚拟接口。

destOverride 中的 fakedns 用于按映射恢复目标。这里显式使用 routeOnly: false,因为仅用于路由判断、却仍保留虚拟地址作为实际连接目标,无法满足这段示例的目的。普通 HTTP 或 TLS 嗅探与 FakeDNS 映射并不是同一机制,不应只根据字段名称相近就互换。

兼容性与故障定位

启用后先检查一个普通域名的解析结果是否落在配置池内,再观察连接是否被正确还原为域名。若结果仍是真实公网地址,应检查查询是否进入目标 DNS 链路;若得到虚拟地址却连接失败,应优先检查地址池流量是否回到配套入口,以及入口是否使用同一份映射状态。

某些程序会在本地检查地址类型、拒绝保留地址,或者把解析结果传给另一台设备使用。这类场景可能不适合 FakeDNS。局域网设备发现、依赖真实地址的业务和特定网络诊断工具,应按客户端支持的方式设置真实解析例外。例外需要同时处理解析与路由,不能只把虚拟地址范围设为直连。

重启后,系统或应用可能仍缓存着旧虚拟地址,而新进程中的映射表已经变化。这会造成“刚启用能用,重启后局部失败”的现象。应先清理相关缓存并重启目标应用,再判断配置是否有误。不要把旧虚拟地址写进长期 hosts 记录,也不要把它当成服务的固定连接地址保存。

如果普通 DNS 与域名嗅探已经满足分流需求,没有必要为了增加设置项而启用 FakeDNS。它适合解决明确的域名保留问题,不是所有网络的默认优化。应先用单个应用验证收益与兼容性,保留可快速恢复的配置副本,再逐步扩大使用范围。

06 / 来源与生命周期

多订阅管理

来源、用途与测试基线

多个订阅的管理目标是让来源可追踪、更新可恢复,而不是把所有记录混成一张长列表。按来源建立独立分组,再在名称或备注里标明用途。日常使用、临时测试与备用连接可以采用不同更新安排,但不要把用途名称当成质量承诺;每个来源都需要独立验证其当前可用性。

新增来源时,先单独导入并手工更新一次,不立即设置为默认连接。检查协议类型、服务器地址和必要传输字段能否被当前客户端识别,再用一条配置完成基础测试。若来源输出的格式不适合当前客户端,应请求匹配的订阅格式,而不是重复导入多个副本来碰运气。

多来源下的同名记录不一定重复。同一个显示名称可能对应不同地址、端口、传输或认证信息;同一个地址也可能承载多个不同服务。去重应比较实际连接参数,并保留来源关系。仅按名称批量删除,可能误删备用配置;仅按地址合并,也可能把用途不同的连接混在一起。

更新策略

自动更新应建立在手工更新稳定的前提上。先为每个分组确认可用的更新路径,再决定更新频率。来源没有变化时,频繁请求通常没有实际收益,还可能触发访问限制。若客户端支持分组级选项,优先分开管理,避免一个失败来源阻塞全部更新,或让重要配置随着批量清理一起消失。

更新前记录当前默认连接的来源和实际参数特征。远端可能重命名、移除或替换条目,客户端保存的选择关系也可能变化。更新完成后检查当前连接仍指向预期记录,再测试最常用应用。不要只看到“更新成功”提示就结束维护,因为提示通常只说明下载与解析过程完成。

更新所依赖的网络也要纳入设计。若全部订阅都只能通过当前代理更新,一旦该连接失效就可能无法获取替代配置。可以保留一条已验证的独立备用记录,并清楚标明它不会自动更新。备用不是永久有效,需要定期手工测试;过期后仍保留在列表中,并不能提供真正的恢复能力。

记录内容用途注意事项
来源与分组名定位更新和格式问题不记录完整敏感链接
更新路径明确直连或经代理请求先验证再自动化
手工修改项区分来源数据与本地调整说明是否会被更新覆盖
回退配置恢复已验证的基础连接定期检查仍可使用

迁移与敏感信息

迁移到新设备时,优先按客户端支持的方式导出配置,并区分服务器数据、订阅地址和完整设置。完整备份可能包含账户凭据、本地监听地址及自定义路由,不应当作普通文档分享。迁移前记录必要设置,迁移后重新检查权限与系统集成,不要假定复制数据就会自动复制全部系统状态。

跨桌面和 Android 迁移尤其需要留意功能边界。服务器连接参数可能共用,但应用过滤、VPN 授权、TUN 组件与文件路径不能直接共用。应先导入连接数据,再按新平台重新配置入口和分流。若直接迁移整套自定义文件,路径引用与组件字段不匹配,往往会造成启动失败。

清理旧来源时,先确认没有默认连接、规则引用或手工副本仍依赖它。删除订阅分组前保留必要配置,删除后检查列表与当前选择。若订阅地址曾出现在公开截图或错误报告中,应通过来源提供的账户功能更换地址;只在本地删除分组,并不会让已经泄露的地址失效。

最后把“订阅更新”和“服务器切换”分开看待。前者更新配置数据,后者选择当前连接,两者不必同时执行。自动更新后若应用异常,先确认默认记录是否改变,再看连接参数是否变化。按这个顺序排查,可以避免误把远端条目变动当成 DNS 或路由规则故障。

07 / 出口编排

自定义出站

标签与协议对象

出站定义收到流量之后如何建立下一段连接。路由中的 outboundTag 只是引用,必须对应实际出站对象的 tag。标签拼写区分大小写,建议使用短小且用途明确的名称。创建一条指向不存在标签的规则,不会让客户端自动生成连接,可能在启动检查或实际转发时产生错误。

先区分客户端生成的出站和手工扩展的出站。v2rayN 通常根据当前服务器生成远端连接对象,切换服务器后该对象可能重建。若直接编辑临时文件,修改可能在重启时丢失。应使用客户端明确提供的自定义配置入口,并确认其行为是合并、替换还是完全接管主配置。

下面是独立的局部示例:直连、阻断,以及转交到本机另一项 SOCKS 服务的出站。它不包含远端服务器认证数据。示例假设该本地服务确实监听于指定地址,且不是当前入口本身;复制前必须核对监听端口,避免把流量再次送回同一处理链而形成循环。

主配置 · outbounds
{
  "outbounds": [
    {
      "tag": "direct",
      "protocol": "freedom",
      "settings": {}
    },
    {
      "tag": "block",
      "protocol": "blackhole",
      "settings": {}
    },
    {
      "tag": "local-socks",
      "protocol": "socks",
      "settings": {
        "servers": [
          {
            "address": "127.0.0.1",
            "port": 10810
          }
        ]
      }
    }
  ]
}

freedom 表示按内核所处网络直接建立连接,不代表绕开本机所有其他网络工具。若系统默认路由已经指向另一个隧道,直连出站仍可能经过它。判断实际出口时,应同时查看操作系统路由与客户端日志,不能仅凭标签叫 direct 就断言使用了物理网络。

blackhole 用于丢弃匹配流量。阻断出站适合明确不需要建立连接的目标,但不应作为配置错误时的默认补丁。若某项服务失败,先确定是否误命中阻断规则,再调整匹配范围。让请求静默失败可能表现为长时间等待,因此排错时要把阻断规则单独列出来核对。

规则接入与默认出口

下面的规则将一个文档示例域名交给本地 SOCKS 出站,应插入宽泛兜底规则之前。示例域名只用于展示语法,实际使用时改成业务需要的目标。对更大的服务范围,应依据真实请求补全域名,而不是直接把全部端口交给本地服务,导致无关应用也被改变出口。

{
  "type": "field",
  "domain": ["full:example.com"],
  "outboundTag": "local-socks"
}

当没有规则命中时,内核通常使用默认出站,常见配置中与出站数组首项有关。上面的示例首项为直连,因此不能把它整段替换到原配置后,仍假定未匹配流量会走代理。应保留原有远端对象并明确兜底策略,或者重新检查数组顺序,确保最终行为与预期一致。

链式连接的边界

本机服务转交与内核内部链式连接不是同一种配置方式。前者先连接另一个监听端口,由对方继续处理;后者依赖具体内核支持的出站组合字段。不同内核的字段和作用层可能不同,不能把一个实现中的传输设置复制到另一个实现。优先选择客户端明确支持且便于观察的方案。

增加一层转交后,需要分别验证每一段。先让本地 SOCKS 服务独立工作,再验证内核能连接该端口,最后测试规则是否命中。若前一段正常而完整链路失败,检查名称解析位置、UDP 支持以及额外封装的要求。不要同时修改两端设置,否则无法知道哪个变化导致结果不同。

自定义出站稳定后,保存用途说明、标签映射和恢复方式。敏感连接参数留在受保护的客户端配置中,不要复制进普通维护文档。日常只调整必要规则,避免每次切换订阅都重写全部出站;配置来源与出口编排分离,才能让更新和回退保持可控。

08 / 兼容与验收

协议、内核与配置验证

客户端、内核与协议

客户端负责界面、订阅管理和系统集成,内核负责解析配置并处理连接。Project V 是相关技术生态的起点,V2Fly 与 Xray 是不同的内核家族,不能仅凭配置都采用 JSON 就认为字段完全兼容。v2rayN 的实际能力取决于所选组件,v2rayNG 以 Xray 为核心,v2flyNG 则面向 V2Fly 内核。

选择内核先看服务器要求,而不是先比较名称。VMess、VLESS 等是协议层概念,TCP、WebSocket 等是传输层选择,TLS 与 REALITY 处理的又是不同安全连接机制。需要把协议、传输、安全参数和流控组合起来核对。服务端要求什么,客户端就应提供对应支持,不能独立替换其中一项。

REALITY 与 XTLS Vision 不应被理解为任何配置都能打开的通用加速选项。它们需要相应服务端参数与内核实现配合,字段正确也不代表组合正确。已有配置无法连接时,先核对服务端给出的完整连接要求,再确认客户端使用的内核。技术关系可参阅REALITY 与 XTLS Vision 说明。

配置生成与字段兼容

调整内核前保留当前可用配置,记录客户端选项和实际生成文件的对应关系。某些界面允许选择字段,但保存后可能按当前组件转换或忽略;某些自定义对象则会直接交给内核解析。判断支持与否应以生成结果、启动日志和实际行为为依据,不能只看界面里是否存在一个相似名称。

配置检查先看语法,再看结构,最后看网络。JSON 中多余逗号、未闭合引号与重复键都值得优先处理;结构层再核对字段所处对象、标签引用和文件路径。能够启动只表示配置被接受,不意味着所有规则都符合预期。内核差异的进一步说明见Xray 与 V2Fly 内核对照。

桌面界面框架的选择也不能代替内核判断。v2rayN 桌面版与经典 WPF 版主要涉及界面、平台和运行依赖,具体协议能力仍要看所用内核与配置。若只是界面入口不同,应寻找功能等价项,不要为了复现教程截图而更改已经可用的协议。版本选择可查阅桌面版与 WPF 版区别。

逐层验收与回退

建立一份固定验收顺序:先在普通系统代理下验证远端连接,再检查私有地址和域名例外,接着验证 DNS 路径,最后启用 TUN 与 FakeDNS。每加一层都使用相同应用和目标复测,并保存上一层的可用状态。这样一旦失败,只需回退最后一次修改,而不是从头重建全部配置。

日志应围绕同一次失败请求收集。先记录发生时间、目标与使用入口,再查看相邻日志中的解析、匹配和连接错误。分享前遮住服务器认证数据、订阅地址和不必要的访问记录。把大量无关日志全部贴出,不仅增加敏感信息暴露,也会掩盖真正与故障相关的几行内容。

故障分类要尽量具体。“连不上”可以拆成内核无法启动、入口未收到流量、解析失败、出站连接失败和目标应用拒绝响应。每一类都有不同的检查位置。若只有某个应用异常,先验证同一目标在其他应用中的表现;若整个系统异常,再回到接口、系统代理和默认路由这些公共层。

保存规则后没有变化,先检查什么?

先确认修改的是当前启用的配置,再重启内核并关闭应用旧连接。随后查看请求是否进入客户端、实际命中哪个出站,最后检查是否有更靠前的宽泛规则覆盖了新增规则。

系统代理可用,TUN 不可用,是否需要更换订阅?

先保留已验证的连接。优先检查权限、虚拟接口、出口回环和 DNS 接管;只有日志显示远端连接本身失败,才重新核对服务器配置。不要在入口故障时同时替换全部来源。

切换内核后启动失败,如何恢复?

恢复原内核与对应配置,确认基线重新可用。再逐项核对新内核支持的协议、传输与自定义字段,删除或改写不兼容部分。不要只改内核名称,却继续复用未经检查的完整自定义文件。

最终保留两份清楚命名的状态:一份是最少设置的可用基线,一份是当前进阶方案。记录两者差异、启用条件与回退操作即可,不必复制敏感信息。后续出现网络变化、来源更新或组件调整时,先用基线判断基础连接,再恢复扩展功能,始终保持排错路径简短且可重复。