更新动作还涉及覆盖策略。订阅生成的条目原则上由订阅维护,不适合直接在其中长期修改地址、端口、用户标识或传输层参数,因为后续更新可能覆盖这些变更。确实需要实验时,复制一份条目到本地测试分组,并在名称前加“本地测试”以便区分。测试成功后,如果变更属于订阅侧配置,应回到订阅来源修正;如果只是本机路由或 DNS 需求,则应放在客户端的全局设置或路由规则中,而不是逐个修改服务器。
域名和地址并非总能同时获得。某些连接在进入内核时携带域名,规则可以直接按域名匹配;另一些连接只提供已经解析出的地址,此时域名规则可能无法生效。开启域名嗅探后,内核可从部分协议流量中恢复目标域名,但嗅探不是所有场景都可靠,也不应替代正确的 DNS 设计。稳定的路由配置应同时考虑域名规则和地址规则,并明确哪些规则依赖嗅探。
路由阶段的解析还会受到 DNS 模块影响。如果 DNS 查询本身走错出站,路由就可能得到不符合预期的地址,继而匹配到另一条规则。修改 domainStrategy 后出现“同一域名偶尔走不同出口”,应同时检查 DNS 服务器选择、缓存和域名规则命中情况。路由与 DNS 是前后相接的两个系统,不适合分开盲调。
验证路由时,先清空容易混淆的后台连接,再打开客户端日志,随后只访问一个测试目标。重点观察目标域名或地址、匹配规则和最终出站标签。如果日志只显示地址,可检查 DNS 和嗅探设置;如果出站标签正确但访问失败,则问题更可能位于目标服务器、选中节点、传输参数或本地网络。若标签错误,将对应规则临时移动到最前方测试,确认规则内容本身能否匹配,再恢复合理顺序。
路由规则修改后应重启连接,使新配置完整加载。浏览器可能复用既有连接,也可能保留 DNS 缓存,因此仅刷新页面并不足以验证变化。更稳妥的流程是断开客户端、关闭测试应用的后台进程、重新连接,再发起一次新访问。需要系统化排查“显示已连接但无法访问”的情况,可参考代理端口、路由模式与 DNS 逐项排查清单。
匹配条件
适合场景
主要限制
验证重点
domain
按站点或域名集合分流
连接需要保留或恢复域名
日志是否显示目标域名
ip
局域网与明确地址范围
地址变化会影响长期规则
实际解析地址是否落入范围
port
明确端口服务
无法区分共享端口的站点
目标端口与网络类型
network
分别处理 TCP、UDP
粒度较粗
出站是否支持对应网络
03
DNS 配置优化
明确谁发起查询、查询走哪条出站,以及返回结果如何参与路由。
先画清解析链路
DNS 故障之所以难排查,通常是因为系统 DNS、客户端 DNS、浏览器加密 DNS和远程解析同时存在。应用提交域名后,查询可能先被操作系统处理,也可能被 TUN 接管;浏览器若启用独立的加密 DNS,又可能绕过客户端设定。内核得到查询后,还要按域名规则选择 DNS 服务器,并决定查询请求走直连还是代理。最终返回的地址可能进入缓存,并交给路由模块继续匹配。任何一层改变,都可能表现为“域名打不开但地址能通”或“同一域名结果不稳定”。
优化的第一步不是堆叠更多 DNS 地址,而是确定唯一主路径。普通系统代理模式下,可让客户端负责需要代理的域名解析,同时保留系统解析处理本地资源;TUN 模式下,则应让进入虚拟网卡的查询尽量由内核统一接管。测试期间可以暂时关闭浏览器独立 DNS,避免它形成平行路径。等客户端链路确认正常后,再决定是否恢复浏览器设置,并验证其流量是否按预期进入路由。
本地 DNS 与远程 DNS 的职责
本地 DNS 适合解析局域网名称、企业内部域名以及明确应由当前网络回答的目标。远程 DNS 适合由代理出站承载的域名查询,使解析位置与访问出口保持一致。两者不等于“一快一慢”的简单选择,而是管辖范围不同。将内部域名交给远程服务器,通常得不到正确地址;将需要与代理出口一致的域名始终交给本地服务器,也可能得到不适合当前出站的结果。
配置时可按域名集合指定服务器,并保留一个清晰的默认解析器。若客户端支持 DoH,可以使用类似 https://1.1.1.1/dns-query 的 HTTPS 端点;若使用普通 UDP DNS,应明确请求是否经过代理出站。DoH 只是传输形式,不自动保证路由正确。端点域名本身也需要首次解析,因此在严格环境中可以配合明确的服务器地址或引导解析策略,避免形成“解析 DNS 服务器域名还要先访问同一个 DNS 服务器”的循环依赖。
地址族问题常表现为首次打开较慢、稍后又恢复,或同一目标在不同应用中表现不同。原因可能是应用采用不同的地址选择算法,也可能是其中一个地址族先失败后回退。检查时应分别观察 A 与 AAAA 结果,并在客户端日志中确认最终尝试的目标地址。只修改 DNS 返回类型而不看出站能力,可能把原本可用的另一类地址一并排除。
缓存、Fallback 与污染式误判
DNS 缓存能减少重复查询,但也会延长错误结果的影响。修改服务器或分流规则后,应断开并重连客户端,必要时重启测试应用,使旧缓存退出。若系统仍保留解析结果,可以等待记录过期或使用系统提供的缓存刷新方式。不要连续更换多个 DNS 后立即比较,因为此时浏览器、系统和客户端可能各自持有不同阶段的结果,观察到的并不是单一配置效果。
远程 DNS 无响应时,先直接检查端点能否建立连接,再看其请求走的是代理还是直连出站。若端点使用域名,确认引导解析能够得到地址;若使用 HTTPS,检查设备系统时间是否正确,因为时间偏差会影响 TLS 建连。随后检查路由规则是否把 DNS 端点错误送入阻断或不支持的自定义出站。最后再检查客户端日志中的响应格式和超时信息。按这一顺序可以区分“端点不可达”“路由错误”和“解析结果不适用”。
Android 上启用 VPN 模式后,还要留意系统私人 DNS 设置。系统私人 DNS、浏览器独立 DNS 和 v2rayNG 远程 DNS 若同时运行,查询路径可能与预期不同。排错时先保留 v2rayNG 的单一路径,确认域名解析和访问都稳定,再逐项恢复系统功能。桌面端 v2rayN 则需要区分系统代理与 TUN:系统代理不一定接管所有程序的 DNS,TUN 才更接近全局网络层接管。两种模式不能用完全相同的观察方式判断。
域名失败、地址可访问
优先检查查询是否发出、使用了哪个 DNS、返回地址是否被正确路由,以及应用是否持有旧缓存。
解析成功、连接仍失败
把焦点移到路由命中、地址族、目标端口和代理出站,不要继续无序更换 DNS。
04
TUN 模式配置与边界
从网络层接管流量,覆盖不读取系统代理设置的应用。
TUN 与系统代理的工作位置不同
系统代理依赖应用主动读取操作系统的代理设置,适合浏览器和遵循系统网络配置的软件。TUN 模式则创建虚拟网络接口,在更低的网络层接收流量,因此能够覆盖不支持 HTTP 或 SOCKS 代理设置的程序。它的覆盖范围更广,也意味着需要处理更多细节:路由表、DNS 接管、UDP、地址族、局域网访问和其他虚拟网络软件都可能参与。把 TUN 理解为“更强的开关”并不准确,它是一套不同的流量入口。
TUN 实现可能提供不同网络栈选项。系统栈更贴近操作系统行为,兼容性通常较好;用户态栈把更多网络处理放在客户端内部,便于跨平台保持一致。具体名称会随客户端界面不同,但选择原则相同:先使用客户端推荐的默认栈,只有在日志明确指向兼容问题、UDP 异常或特定应用失败时再切换。切换后重新建立连接,并对同一目标重复测试。
MTU 表示网络接口一次承载的数据大小。值过大时,某些路径上的数据包可能需要分片或被丢弃,表现为小页面能打开、大内容卡住、上传失败或连接建立后无数据;值过小则增加额外开销。排查时可以从系统或客户端默认值开始,遇到疑似分片问题再小幅降低,并记录每次变化。不要直接套用极端数值,因为不同网络、传输方式和封装层的有效上限不同。
UDP 需要出站和服务器配置共同支持。TUN 接收到 UDP 不代表远端一定能够转发。如果网页正常而实时通信、语音或部分域名解析失败,应查看日志中 UDP 是否进入正确出站,以及当前服务器配置是否允许。为了定位,可临时让 DNS 改用基于 HTTPS 的查询,区分普通 UDP DNS 故障与所有 UDP 流量故障;随后仍应回到真实使用场景验证,而不是把临时替代方案当作问题已经消失。
绕过局域网与防止路由回环
TUN 接管后,局域网打印机、路由器管理页和文件共享可能被错误送入代理。应在路由规则前部保留私有地址直连,并按需加入本地域名。常见私有地址集合可由内核的 geoip:private 处理,但企业网络可能使用额外地址段,仍需根据实际网络补充。验证时分别访问网关地址、局域网设备地址和一个内部域名,确认地址直连与内部 DNS 都正常。
路由回环发生在客户端访问代理服务器或 DNS 端点的流量又被 TUN 重新接管,并反复送回自身。客户端通常会自动排除自身进程或服务器地址,但自定义出站、链式代理和特殊网络环境仍可能打破这一保护。典型表现是连接后立即失去网络、日志重复出现同一目标,或服务器连接不断重建。应确保代理服务器地址、必要的引导 DNS 和客户端自身通信有明确可达路径,并避免默认规则把所有流量不加区分地送回同一入口。
部分应用会先自行完成 DNS 查询,再把目标地址交给系统。连接进入 TUN 时,内核看到的可能只剩地址,原始域名已经丢失,基于域名的路由规则因而无法匹配。FakeDNS 的思路是:客户端对受控查询返回一个虚拟地址,同时记录“域名与虚拟地址”的映射;应用随后连接该虚拟地址时,内核从映射中恢复原始域名,再按域名规则选择真实 DNS 和出站。它主要服务于域名信息保留,不是公共 DNS 的替代品。
这套机制依赖查询和后续连接都经过同一个客户端。如果应用绕过客户端执行独立解析,或连接没有进入 TUN,映射就无法建立或使用。浏览器加密 DNS、应用内置解析器和某些直连网络库都可能形成旁路。因此,启用 FakeDNS 前应先确保 DNS 接管链路清楚,并确认 TUN 基础功能正常。否则出现问题时,很难区分是映射、DNS 旁路还是虚拟网卡本身导致。
局域网内部域名、设备发现、打印服务和依赖真实地址返回的应用需要谨慎处理。内部域名通常应交给本地 DNS 并直连,不应进入 FakeDNS;依赖 DNS 返回地址执行局域网扫描或访问控制的软件,也可能无法理解虚拟地址。可以通过域名规则让内部命名跳过 FakeDNS,直接使用局域网解析器。若应用必须得到真实地址才能工作,应为它设置分应用绕过或使用真实 DNS 结果。
回退点应建立在“已验证可连接”的状态上。修改过滤规则前保留旧表达式,批量更新前记住当前可用条目,导入新配置前保留原分组。若更新后连接失败,先恢复选中项和过滤条件,再判断新订阅内容。不要一边回退订阅、一边更换 DNS 和 TUN 设置;同时回退多个层次虽然可能偶然恢复,却无法确认真实原因。
主备切换的验证流程
备用订阅只有在被定期验证时才真正具备备用价值。验证不需要长期保持连接,可在网络稳定时手动更新,选择一条配置进行连接测试,并确认基本 DNS 和路由能够工作。测试结束后切回主订阅,避免当前选中项无意留在测试来源。若主备使用不同协议或传输方式,应分别记录各自的必要系统条件,避免故障发生时才发现备用配置依赖尚未启用的功能。
自定义出站加入后,DNS 请求可能仍沿用原有路径。若目标访问走 upstream-socks,而远程 DNS 走直连,解析位置和访问出口可能不一致。是否需要一致取决于场景,但必须是明确设计,而不是偶然结果。可以为 DNS 端点添加精确路由,使其通过指定出站,也可以让内部 DNS 始终直连。修改后观察 DNS 端点连接和目标连接是否分别命中预期标签。
要防止 DNS 循环:如果上游出站的服务器地址是域名,而解析该域名的 DNS 又被路由到同一上游,就可能在上游尚未建立时形成依赖。解决方式包括为上游地址提供可靠的引导解析、使用明确可达的地址,或为其 DNS 查询设置独立直连路径。选择哪种方式取决于网络条件,核心是让建立上游所需的基础连接不依赖上游自身。
升级或切换客户端前,应记录哪些内容来自订阅,哪些内容来自客户端界面,哪些属于手工覆写。订阅服务器参数通常可以重新获取,复杂自定义出站和路由则需要单独备份。备份后可在文本中检查标签引用:每个 outboundTag 都应对应实际出站,每个链式引用都应有目标,每个 DNS 路由都应能在上游建立前完成必要解析。
最终配置应能回答四个问题:每类流量由哪条规则匹配、规则选择哪个出站、该出站如何建立底层连接、建立它所需的 DNS 又走哪里。如果其中任何一步只能靠猜测,配置就还不适合长期运行。遇到复杂故障时,可先恢复 proxy、direct、block 三类基础结构,再逐个加入自定义出口。需要重新选择适合平台的客户端时,可查看选型指南和安装包页面。