Network Path Graph + Configuration Drift

August 17, 2026 · View on GitHub

本文件记录 dsh-network-settings 双网络模型链路图与配置漂移检测的实现边界。

网络配置层级

网络配置
├─ Windows 代理:Windows 用户代理(WinINet)/
│   当前 Windows 用户环境变量 / PAC
├─ DSH:运行环境 / DSH 代理配置 / 配置来源 / 进程环境
├─ WSL:当前 Distribution / 发行版环境变量 /
│   .wslconfig / /etc/wsl.conf / 其他发行版
└─ 高级网络:DNS / WinHTTP / 接口路由 / Hosts / 系统恢复

未检测时网络配置仍显示,但值标为“未知”;未知是否存在 WSL 时不显示 WSL 分组。修改入口按来源和风险选择:低风险按钮、Windows 原生设置、 配置位置打开/复制、高风险系统恢复显式确认。

状态机

Standby(页面打开)      = 仅读 last-report.json 摘要;零系统命令、零网络探测
Loading(一键检测)      = 完整静态采集 + 当前目标 probe,可取消
Ready(检测完成)        = 摘要 + DSH NetworkPathGraph + 详情 + 修复
TargetSwitch(切换目标) = 复用内存中的静态事实,仅重跑当前目标 probe
  • NetworkPathGraph 只在 run 成功后生成;status 只返回脱敏 NetworkPathSummary
  • 打开页面不会执行 PowerShell、wsl.exe 或任何网络 probe。

两个一级模型

WINDOWS_NATIVE
  DSH → Windows → [Proxy] → Adapter → Gateway → Internet → Target

WSL_DISTRIBUTION
  DSH → Distribution → WSL Network(NAT/Mirrored/…) → Windows Host
       → [Proxy] → Adapter → Gateway → Internet → Target
  • 本插件只展示当前 DSH 进程的实际网络路径,不再推断 Windows 浏览器路径。
  • Distribution(Ubuntu-24.04)与 WSL Network(WSL 2 / NAT)是两个独立节点。
  • NAT 只作为边语义,不画成服务器;Mirrored/Bridged/VirtioProxy 使用各自关系。
  • DNS 只出现在侧支;代理配置 / Endpoint / Listener 是三个独立对象。

Runtime 检测优先级

win32                              → WINDOWS_NATIVE
linux + microsoft kernel + WSL_DISTRO_NAME → WSL_DISTRIBUTION(注册名以环境变量为准)
linux + microsoft kernel + 无 WSL_DISTRO_NAME + 容器 cgroup → UNSUPPORTED_RUNTIME
linux + 非 microsoft kernel + 无 WSL_DISTRO_NAME → UNSUPPORTED_RUNTIME

注册名绝不从 /etc/os-release ID 反推;--import 的自定义名会保留。

目标

内置目标:DeepSeek、OpenAI、GitHub、npm Registry;DSH 配置了模型服务 Base URL 时自动加入“当前模型服务”。自定义目标方法见 README 的“目标与 :443 后缀”一节。

Configuration Drift 规则

原则:配置不同 ≠ 配置错误

Code触发严重度最小影响修复
DRIFT_DSH_PROXY_STALEDSH 代理端点失效/无监听errorclear DSH process proxy
DRIFT_WSL_PROXY_STALEWSL DSH 可达 Windows Host,但代理端点不可达errorclear DSH process proxy → 或 WSL autoProxy
DRIFT_WINHTTP_STALEWinHTTP 配置存在但无监听,DSH 链路健康warninguser scope 优先;machine 最后
DRIFT_DSH_ENV_SCOPE_DIFFERENTDSH env 与 Windows 作用域不同但健康info不修复
DRIFT_WSL_ENV_DIVERGENTDistribution env 与 DSH env 不同但健康info不修复

修复全部走既有 Snapshot → Preview/Diff → 确认 → Apply → 重新检测 → Rollback 流程, 不会为了“统一配置”修改仍然正常的网络层。

已知限制

  • 不做抓包、WFP、浏览器注入、扩展、MITM、长期监听。
  • PAC/SOCKS/HTTPS 代理第一版不执行解析,路径标 UNKNOWN
  • Gateway/ISP 段不伪造;未单独探测的节点显示 ?
  • WSL interop 关闭或相关配置不可读时降级为 UNKNOWN,不猜测。