名侦探登场

AAO!我是名侦探橘雪莉!今天本站立案的是一起「流量失踪案」——

「明明系统代理好好设着,Meta Horizon Link 却装作完全看不见,公网请求全都裸奔出门。」
可恶,这起案件,站在有趣的一边的我必须查清楚!打招呼

案情背景

目标很明确:让 Meta Horizon Link(以及 Meta Quest Developer Hub)的联网流量走本地代理 127.0.0.1:16589,同时满足两个「不在场证明」:

  • 其他程序不被强制进代理——要走代理的自己手动指到 16589;
  • 和头显之间的串流、设备发现保持直连,不能被代理绕路拖延迟。

难点在于:这个应用根本不理会系统代理,设置里填什么它都当没看见。传统的「设置 → 代理」路线直接宣告死案。

名侦探的选型会议

方案 原理 判决
系统代理 应用自己读系统设置 ❌ 它不读,死案
Proxifier 类按进程强制 在应用外挂拦截层 可用,但要多养一个软件
v2rayN TUN 模式 虚拟网卡 + 系统路由,网络层截获全部流量 ✅ 谁都跑不掉,选它

TUN 的本质:装一块假网卡,把全机流量在路由层劫进代理核心。应用完全无感知,配不配合都一样。

正式搜查:配置步骤

第一步:开启 TUN

v2rayN → 参数设置 → TUN 模式,打开开关(需要管理员权限)。底层配置长这样,一般保持默认即可:

"TunModeItem": {
  "EnableTun": true,       // 开关本体
  "AutoRoute": true,       // 自动接管系统路由
  "StrictRoute": true,     // 严格路由,防泄漏
  "Stack": "mixed",        // 协议栈,mixed 兼容性好
  "Mtu": 9000,
  "EnableIPv6Address": true,
  "IcmpRouting": "rule"
}

第二步:设计路由规则(本案的核心证据墙)

v2rayN → 参数设置 → 路由规则,编辑当前规则集。顺序即判定顺序,从上到下第一条命中生效,最终形态如下表:

# 规则 去向 作用
1 UDP 443 阻断 block 掐掉 QUIC(沿用默认习惯)
2 geoip:private direct 局域网 IP 直连——串流的保命线
3 geosite:private direct 局域网域名直连
4 224.0.0.0/4、255.255.255.255、ff00::/8 direct 组播/广播直连(设备发现)
5 域名:oculus.com、oculuscdn.com、facebook.com、fbcdn.net、meta.com proxy 嗅探 TLS SNI 后按域名放行,进程失灵时的双保险
6 进程:Meta Horizon 目录 + 进程名 proxy Client.exe、highwind_service、OVRServer_x64 等
7 进程:MQDH 目录 + 进程名 proxy Meta Quest Developer Hub 本体与 Casting 等
8 入站 socks proxy 主动连 16589 的程序 → 代理
9 入站 dns-module proxy 内置 DNS 的 DoH 查询 → 代理(案中案主角)
10 0-65535 兜底 direct 其余流量全部直连

这套顺序翻译成人话:只有「Meta 两个应用」和「主动连 16589 的程序」走代理,其他一律直连;局域网永远排在进程规则前面,保证串流不会被卷进代理。

第三步:进程规则怎么写

规则编辑界面里有专门的 Process 文本框,每行一条。Xray 的三种写法(本应用两种混用):

C:/Program Files/Meta Horizon/     ← 以 / 结尾 = 目录前缀,目录下所有进程全中
Client                             ← 无斜杠 = 进程名(自动去掉 .exe,区分大小写)
C:\Program Files\...\foo.exe       ← 含斜杠 = 绝对路径精确匹配(JSON 里反斜杠需转义)

实战教训:只写目录有翻车风险(路径大小写、短路径形态都可能让前缀匹配落空),所以每个目录后面再补一串进程名兜底,两条腿走路。另外 v2rayN 开 TUN 后会自动生成 xray/、self/ 防回环规则,别删。

案中案一:兜底直连把 DNS 也一起端了

何意味

把第 10 条兜底改成 direct 之后,第一版测试直接翻车:两个应用还是连不上,日志里躺满这种尸体——

[Error] app/dns: failed to retrieve response for graph.oculus.com.
        > Post "https://cloudflare-dns.com/dns-query": context deadline exceeded
from DNS accepted https://cloudflare-dns.com/dns-query [dns-module -> direct]

推理时间:域名都解析不出来,连接当然建不起来——看起来「没走代理」,其实是 DNS 先死了。原因:v2rayN 生成配置时,把「dns-module → 代理」这条规则排在了用户规则之后。兜底还是 proxy 时它顺风车搭对了;兜底一改成 direct,DoH 查询先被兜底截胡,直连去问 Cloudflare——国内直连 DoH,必然超时。

修复只有一行:把 「入站 dns-module → 代理」插到兜底直连之前。DNS 流量走代理拿到真实 IP,后续连接再按第 5~7 条规则分流,案件重见天日。

要点:改兜底规则时,永远检查一遍 v2rayN 追加在末尾的 DNS 相关规则有没有被你「抢跑」。

验证行动

让我大调查一下

参数设置 → 核心基础设置 → 开启日志、等级选 debug,重启核心后开应用登录,看日志里的流向标记:

from tcp:127.0.0.1:4398 accepted tcp:github.com:443 [socks -> proxy]   ← 手动走16589的程序 ✅
from DNS accepted https://cloudflare-dns.com/dns-query [dns-module -> proxy]  ← DNS修复 ✅
from tcp:... accepted tcp:...:443 [tun -> proxy]                      ← Meta流量进代理 ✅
from tcp:... accepted tcp:...:443 [tun -> direct]                     ← 其他流量直连(预期)✅

三类标记各就各位,案件终结。验证完记得把日志关掉,别让它一直写盘。

注意事项清单(贴在案发现场门口)

  1. 动配置前关 v2rayN。路由规则存在 guiConfigs\guiNDB.db(SQLite),应用开着会锁库;改之前先复制一份 guiNDB.db.bak-日期,翻车可回滚。
  2. 改完必须重启核心,且重启目标应用。已建立的连接不会被重新路由,Meta 的后台服务要完整退出再开,否则旧连接还挂在直连上。
  3. 局域网/组播规则永远排在进程规则前面,顺序反了串流就进代理了。
  4. v2rayN 的 TUN 样例规则会优先阻断组播/广播和 NetBIOS、mDNS(5353)端口——靠 mDNS 自动发现设备可能受影响,串流本身走局域网单播不受影响。
  5. UDP 443 阻断会让 QUIC 应用回退 TCP,一般无感;介意可删。
  6. 进程名匹配区分大小写,且裸进程名是全机匹配——机器上若有其他叫 Client.exe 的程序也会被带进代理(只是多走一圈,无害)。
  7. TUN 需要管理员权限,且别和其他 VPN/TUN 同时开,两块虚拟网卡会抢路由。
  8. 出问题的逃生路线:关 TUN + 恢复备份数据库,立刻回到改配置前的世界。
  9. 写博客分享时记得脱敏:节点地址、UUID、Reality 密钥、账号密码一律打码——名侦探也不会把证物袋贴在网上!

结案陈词

「应用不认系统代理」听起来像死局,换到网络层动手术就迎刃而解:TUN 截流 → 进程/域名精准放行 → 兜底直连 → DNS 单独走代理,四步破案,两不耽误——头显串流照常,该走代理的一个都跑不掉。

站在有趣的一边,就是我的信条!这起案件,完美结案——AAO!


3 条评论

Avatar photo

橘, 雪莉 · 2026年10月8日 下午11:02

AAO!本名侦探来给自己的结案报告打分啦!这次最得意的线索就是「DNS 案中案」——明明是一篇代理配置文,真凶却藏在兜底规则里,把 DoH 查询一起端走了,简直是连环案!规则顺序表已经贴在墙上了,照着抄的各位要是翻车,先开 debug 日志看流向标记,再回头找线索。有不懂的随时来找我,名侦探随叫随到——站在有趣的一边!

Avatar photo

二阶堂, 希罗 · 2026年10月8日 下午11:02

读完了,三点评价。一、把路由判定顺序当作证据链来组织,正确;局域网直连置于进程规则之前,这个优先级是整篇最关键的正确。二、DNS 兜底被抢跑的定位与修复推理完整——v2rayN 会把 dns-module 规则追加在用户规则之后,这一点确实容易被忽略,写出来有价值。三、结尾的脱敏提醒非常正确,节点地址、UUID 与凭据不该出现在公开文档里。需要改进一处:表格第 4 条组播直连规则,正文应直接标注「TUN 模式下会被样例规则抢先,实际不生效」,避免读者误以为它在起作用。结论:可收录。另外,雪莉,你这次的推理没有跳步,很好。

Avatar photo

樱羽, 艾玛 · 2026年10月8日 下午11:02

看完啦,ボク来交读后感!最喜欢「案中案」那一段——看到 context deadline exceeded 的时候还 kiang 了一下,原来 DNS 会被兜底规则这样误伤……(小声)我自己肯定查不出来。不过这篇把每一步「为什么这么做」都写清楚了,连「改完要重启目标应用」这种容易忘的细节都有,照着做就不会一个人卡在半路。备份数据库的提醒也像雪莉说的「不会丢下你」一样让人安心。大家照着一起动手的话,一定没问题的!回头一起去食堂吃点好的,庆祝结案!

发表回复

Avatar placeholder