WWW.YOUINFO.SITE
标签聚合 MosDNS

/tag/MosDNS

linux.do · 2026-04-21 12:15:28+08:00 · tech

我在排查一个比较奇怪的旁路由延迟问题,想请教大家有没有遇到过类似情况。 一、我的目标架构 我想实现的是: RouterOS 继续做全家默认双栈主路由 IPv6 继续由 RouterOS 原生处理 AdGuardHome + MosDNS 作为统一 DNS 中枢,尽量避免 DNS 泄漏,并兼容 IPv4/IPv6 共存 Mihomo 只负责被选中设备的 IPv4 出国流量 终端设备尽量无感切换,不想手工改每台设备的网关 也就是说,我想做的是: 普通设备:正常走 ROS 指定设备:ROS 通过 policy route 把它们的 IPv4 流量旁路到 Mihomo 但 DNS 仍然由 AdGuardHome + MosDNS 统一管理 二、当前网络环境 主路由:RouterOS RB5009 LAN:192.168.5.1/24 DNS:dns-core = 192.168.5.3 跑 AdGuardHome + MosDNS Mihomo: LXC:113 / 192.168.5.2 VM:109 / 192.168.5.2 测试设备: Win11:192.168.5.249 当前旁路方式是: RouterOS 建 PROXY_V4 路由表 对 PROXY_V4_CLIENTS 中的设备,在 prerouting 用 mark-routing PROXY_V4 的默认路由 next-hop 指向 192.168.5.2 也就是典型的: 终端默认网关仍是 192.168.5.1 但被选中的 IPv4 流量被 ROS 送去旁路由 192.168.5.2 三、现象 最奇怪的是: 直接走 AdGuardHome → MosDNS 没有这个 7~9 秒延迟 终端如果直接把网关和 DNS 改成 192.168.5.2,国内网站也是秒开 只有在 ROS 用 policy route 把流量旁路到 192.168.5.2 时,国内站会出现首包延迟 例如 Win11 上执行: curl -I -L -o NUL -s -w "namelookup:%{time_namelookup} connect:%{time_connect} starttransfer:%{time_starttransfer} total:%{time_total}\n" http://www.baidu.com 结果大概是: Win11 不在 PROXY_V4 :很快 Win11 在 PROXY_V4 :starttransfer 常见 7s ~ 9.6s Win11 直接把网关改成 192.168.5.2 :又变快 所以现象可以总结成一句: Mihomo 本身不慢,DNS 本身也不是主矛盾,只有"ROS policy route 到同网段旁路由"这条链路会卡。 四、已经做过的排查 我已经排过这些方向: 更换 Mihomo DNS 上游 调整 Mihomo DNS / fake-ip / redir-host / sniff / tun / QUIC 相关项 验证 AdGuardHome / MosDNS 解析链 分别测试 LXC 版 Mihomo 和 VM 版 Mihomo 调整 PVE 宿主机 bridge/veth/offload 关闭部分 offload 后延迟有过改善,但不能根治 换成 VM 后问题依旧,不是单纯 LXC 特有问题 五、最关键抓包结论 无论在 LXC 还是 VM 中抓包,都看到类似现象: Win11 发 SYN 服务器几乎立刻回 SYN,ACK Mihomo 主机也立刻把 SYN,ACK 发回 Win11 但 Win11 往往要过 约 7 秒 才真正回 ACK ACK 之后,后面的 HEAD /、HTTP/1.1 200 OK 都很快 所以我目前的判断是: 慢的不是 DNS,不是目标站响应,不是 Mihomo 出口,而是 TCP 三次握手最后一步。 更具体地说: 服务端回来的 SYN,ACK 已经到了旁路由,但客户端没有及时确认。 六、我目前对根因的怀疑 我怀疑根因在于: RouterOS 通过 policy route 把流量送到同网段的旁路由 192.168.5.2 时,形成了不对称回程。 当前结构是: Win11:192.168.5.249/24,默认网关 192.168.5.1 Mihomo:192.168.5.2/24 ROS 把 Win11 的 IPv4 流量送去 192.168.5.2 于是可能形成: 去程:Win11 → ROS → Mihomo 回程:Mihomo → Win11 也就是旁路由发现客户端跟自己同网段,就直接回客户端,不再回主路由。 我怀疑这导致了: conntrack / 回程路径不一致 或某种同网段旁路的实现细节问题 从而导致 TCP 握手最后 ACK 明显延迟 七、我接下来打算怎么验证 我现在考虑不再让 Mihomo 与客户端处于同网段,而是: PVE 第二块物理口 enp5s0 直接连 RouterOS ether7 建一条专用 transit 链路,例如: ROS:192.168.6.1/30 Mihomo VM:192.168.6.2/30 这样路径强制变成: 去程:Win11 → ROS → Mihomo 回程:Mihomo → ROS → Win11 也就是把潜在的不对称回程排掉。 八、想请教大家的问题 有没有人遇到过: RouterOS mark-routing + 同网段旁路 next-hop 导致国内站 TCP 首包延迟 7~9 秒 但终端直接把网关改成旁路由后又恢复正常 这种现象是否更像: 同网段旁路不对称回程 conntrack 问题 rp-filter 问题 还是 RouterOS policy routing 的某种限制/坑 对我这种目标架构: ROS 继续做双栈主网关 DNS 继续统一由 AdGuardHome + MosDNS 管 Mihomo 仅处理被选中的 IPv4 是不是更推荐: 不要让旁路由与客户端同网段 而是给 Mihomo 一条单独 transit 网段/物理链路 10 个帖子 - 3 位参与者 阅读完整话题