@namewta/speculo 2.0.6 → 2.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -0
- package/THIRD-PARTY-NOTICES.md +4 -0
- package/dist/src/agent-skills.d.ts +5 -0
- package/dist/src/agent-skills.js +10 -7
- package/dist/src/agent-skills.js.map +1 -1
- package/dist/src/cli.js +25 -36
- package/dist/src/cli.js.map +1 -1
- package/dist/src/coordination.d.ts +3 -3
- package/dist/src/coordination.js +21 -4
- package/dist/src/coordination.js.map +1 -1
- package/dist/src/doctor.js +8 -1
- package/dist/src/doctor.js.map +1 -1
- package/dist/src/external-files.d.ts +4 -2
- package/dist/src/external-files.js +4 -4
- package/dist/src/external-files.js.map +1 -1
- package/dist/src/hub-catalog.d.ts +11 -0
- package/dist/src/hub-catalog.js +91 -0
- package/dist/src/hub-catalog.js.map +1 -0
- package/dist/src/hub-resources.json +1 -0
- package/dist/src/hub-skills.d.ts +53 -0
- package/dist/src/hub-skills.js +157 -0
- package/dist/src/hub-skills.js.map +1 -0
- package/dist/src/index.d.ts +6 -0
- package/dist/src/index.js +48 -47
- package/dist/src/index.js.map +1 -1
- package/dist/src/install-ui.d.ts +16 -7
- package/dist/src/install-ui.js +143 -92
- package/dist/src/install-ui.js.map +1 -1
- package/dist/src/manifest.d.ts +2 -0
- package/dist/src/manifest.js +2 -0
- package/dist/src/manifest.js.map +1 -1
- package/dist/src/refresh.d.ts +1 -0
- package/dist/src/refresh.js +13 -10
- package/dist/src/refresh.js.map +1 -1
- package/dist/src/retained-workflows.d.ts +10 -0
- package/dist/src/retained-workflows.js +25 -0
- package/dist/src/retained-workflows.js.map +1 -0
- package/dist/src/runtime-entry.d.ts +1 -0
- package/dist/src/runtime-entry.js +1 -0
- package/dist/src/runtime-entry.js.map +1 -1
- package/dist/src/skill-trees.d.ts +27 -0
- package/dist/src/skill-trees.js +118 -0
- package/dist/src/skill-trees.js.map +1 -0
- package/dist/src/terminal-ui.d.ts +30 -0
- package/dist/src/terminal-ui.js +148 -0
- package/dist/src/terminal-ui.js.map +1 -0
- package/dist/src/transaction.d.ts +3 -14
- package/dist/src/transaction.js +20 -36
- package/dist/src/transaction.js.map +1 -1
- package/dist/src/workflow-install.d.ts +15 -0
- package/dist/src/workflow-install.js +104 -0
- package/dist/src/workflow-install.js.map +1 -0
- package/dist/src/workflows.js +1 -1
- package/dist/src/workflows.js.map +1 -1
- package/package.json +6 -2
- package/skills-hub/automation/grok-bot-team-steward/CHEATSHEET.md +17 -0
- package/skills-hub/automation/grok-bot-team-steward/INSTALL.md +23 -0
- package/skills-hub/automation/grok-bot-team-steward/LICENSE +21 -0
- package/skills-hub/automation/grok-bot-team-steward/README.md +9 -0
- package/skills-hub/automation/grok-bot-team-steward/SKILL.md +52 -0
- package/skills-hub/automation/grok-bot-team-steward/agents/openai.yaml +4 -0
- package/skills-hub/automation/grok-bot-team-steward/references/00-hard-rules.md +50 -0
- package/skills-hub/automation/grok-bot-team-steward/references/01-snapshot-schema.md +84 -0
- package/skills-hub/automation/grok-bot-team-steward/references/02-export-protocol.md +57 -0
- package/skills-hub/automation/grok-bot-team-steward/references/03-restore-protocol.md +64 -0
- package/skills-hub/automation/grok-bot-team-steward/references/04-inventory.md +37 -0
- package/skills-hub/automation/grok-bot-team-steward/references/05-conversations.md +71 -0
- package/skills-hub/automation/grok-bot-team-steward/references/06-sanitizer.md +39 -0
- package/skills-hub/automation/grok-bot-team-steward/references/07-prompts.md +87 -0
- package/skills-hub/automation/grok-bot-team-steward/references/08-verification.md +30 -0
- package/skills-hub/automation/grok-bot-team-steward/references/09-sources.md +31 -0
- package/skills-hub/automation/grok-bot-team-steward/scripts/scrub.sh +17 -0
- package/skills-hub/automation/grok-bot-team-steward/scripts/snapshot-name.sh +18 -0
- package/skills-hub/automation/grok-bot-team-steward/scripts/validate-snapshot.sh +62 -0
- package/skills-hub/automation/grok-bot-team-steward/steward/ACTIVATE.md +58 -0
- package/skills-hub/automation/grok-bot-team-steward/steward/SETUP-INSTRUCTIONS.md +33 -0
- package/skills-hub/automation/grok-bot-team-steward/steward/STEWARD-PROFILE.md +28 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/CHANGELOG.md +3 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/CHARTER.md +27 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/DROP-LIST.md +10 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/GAPS.md +6 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/INIT.md +14 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/MANIFEST.md +30 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/MANIFEST.yaml +20 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/ORG.md +15 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/README.md +8 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/RESTORE.md +13 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/ROSTER.md +11 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/bots/_SLUG/GAPS.md +7 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/bots/_SLUG/MEMORY.md +9 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/bots/_SLUG/PROFILE.md +27 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/bots/_SLUG/agent-spec.md +9 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/bots/_SLUG/conversations/INDEX.md +5 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/bots/_SLUG/conversations/main.md +9 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/bots/_SLUG/routines.md +5 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/bots/_SLUG/skills.md +5 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/connectors.md +7 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/meta/COMPLETED.md +6 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/meta/CREATED.md +6 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/meta/RESTORE-NOTES.md +13 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/meta/SANITIZER.md +7 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/meta/SOURCE.md +8 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/rooms/_ROOM.md +8 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/routines/_ROUTINE.md +12 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/shared/shared-memory.md +5 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/shared/workspace-map.md +5 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/skills/_SKILL/SKILL.md +18 -0
- package/skills-hub/automation/herdr/SKILL.md +246 -0
- package/skills-hub/automation/orca/SKILL.md +328 -0
- package/skills-hub/coding/gitea-repo/LICENSE +21 -0
- package/skills-hub/coding/gitea-repo/SKILL.md +50 -0
- package/skills-hub/coding/gitea-repo/agents/openai.yaml +4 -0
- package/skills-hub/coding/gitea-repo/references/auth-and-scopes.md +58 -0
- package/skills-hub/coding/gitea-repo/references/endpoint-map.md +80 -0
- package/skills-hub/coding/gitea-repo/references/pagination-and-errors.md +34 -0
- package/skills-hub/coding/gitea-repo/scripts/gitea_api.py +814 -0
- package/skills-hub/coding/github-repo-steward/LICENSE +21 -0
- package/skills-hub/coding/github-repo-steward/SKILL.md +48 -0
- package/skills-hub/coding/github-repo-steward/agents/openai.yaml +4 -0
- package/skills-hub/coding/github-repo-steward/references/00-auth-and-tokens.md +73 -0
- package/skills-hub/coding/github-repo-steward/references/01-inventory.md +55 -0
- package/skills-hub/coding/github-repo-steward/references/02-lifecycle.md +57 -0
- package/skills-hub/coding/github-repo-steward/references/03-stars.md +42 -0
- package/skills-hub/coding/github-repo-steward/references/04-hygiene.md +40 -0
- package/skills-hub/coding/github-repo-steward/references/05-sources.md +42 -0
- package/skills-hub/coding/github-repo-steward/scripts/inventory.sh +64 -0
- package/skills-hub/coding/vscode-fullstack/LICENSE +21 -0
- package/skills-hub/coding/vscode-fullstack/SKILL.md +47 -0
- package/skills-hub/coding/vscode-fullstack/agents/openai.yaml +4 -0
- package/skills-hub/coding/vscode-fullstack/references/extensions-and-settings.md +181 -0
- package/skills-hub/coding/vscode-fullstack/references/profiles-and-validation.md +62 -0
- package/skills-hub/coding/vscode-fullstack/references/runtime-reuse.md +52 -0
- package/skills-hub/design/photo-retouch/LICENSE +21 -0
- package/skills-hub/design/photo-retouch/SKILL.md +50 -0
- package/skills-hub/design/photo-retouch/agents/openai.yaml +4 -0
- package/skills-hub/design/photo-retouch/references/basic-retouch.md +58 -0
- package/skills-hub/design/photo-retouch/references/formal-portrait.md +57 -0
- package/skills-hub/design/photo-retouch/references/object-and-canvas.md +82 -0
- package/skills-hub/design/photo-retouch/references/product-photo.md +41 -0
- package/skills-hub/design/photo-retouch/references/repair-and-look.md +61 -0
- package/skills-hub/design/photo-retouch/references/social-effects.md +55 -0
- package/skills-hub/design/photo-retouch/references/travel-creative.md +79 -0
- package/skills-hub/system/clash-client-profile/LICENSE +21 -0
- package/skills-hub/system/clash-client-profile/SKILL.md +79 -0
- package/skills-hub/system/clash-client-profile/agents/openai.yaml +4 -0
- package/skills-hub/system/clash-client-profile/references/acceptance.md +81 -0
- package/skills-hub/system/clash-client-profile/references/browser-privacy.md +35 -0
- package/skills-hub/system/clash-client-profile/references/clash-verge.md +40 -0
- package/skills-hub/system/clash-client-profile/references/dns-workflow.md +147 -0
- package/skills-hub/system/clash-client-profile/references/flclash.md +24 -0
- package/skills-hub/system/clash-client-profile/references/network-performance.md +25 -0
- package/skills-hub/system/clash-client-profile/references/platform-dns.md +109 -0
- package/skills-hub/system/clash-client-profile/references/sources.md +46 -0
- package/skills-hub/system/clash-client-profile/references/troubleshooting.md +82 -0
- package/skills-hub/system/clash-client-profile/scripts/dns_guard.py +650 -0
- package/skills-hub/system/clash-client-profile/scripts/proxy_doctor.py +213 -0
- package/skills-hub/system/clash-client-profile/scripts/render_rules.py +34 -0
- package/skills-hub/system/clash-client-profile/templates/ai-rules.yaml +18 -0
- package/skills-hub/system/clash-client-profile/templates/dns-request.example.json +9 -0
- package/skills-hub/system/clash-client-profile/templates/dns.yaml +8 -0
- package/skills-hub/system/linux-dev-disk-cleanup/LICENSE +21 -0
- package/skills-hub/system/linux-dev-disk-cleanup/SKILL.md +42 -0
- package/skills-hub/system/linux-dev-disk-cleanup/agents/openai.yaml +4 -0
- package/skills-hub/system/linux-dev-disk-cleanup/references/linux-cleanup-workflow.md +145 -0
- package/skills-hub/system/optimize-codex-config/LICENSE +21 -0
- package/skills-hub/system/optimize-codex-config/SKILL.md +101 -0
- package/skills-hub/system/optimize-codex-config/agents/openai.yaml +4 -0
- package/skills-hub/system/optimize-codex-config/assets/capabilities.example.json +22 -0
- package/skills-hub/system/optimize-codex-config/references/cli.md +35 -0
- package/skills-hub/system/optimize-codex-config/references/configuration-contract.md +33 -0
- package/skills-hub/system/optimize-codex-config/references/optimization-method.md +38 -0
- package/skills-hub/system/optimize-codex-config/references/privacy.md +41 -0
- package/skills-hub/system/optimize-codex-config/references/sources.md +24 -0
- package/skills-hub/system/optimize-codex-config/references/statusline.md +31 -0
- package/skills-hub/system/optimize-codex-config/references/transactions.md +32 -0
- package/skills-hub/system/optimize-codex-config/references/troubleshooting.md +95 -0
- package/skills-hub/system/optimize-codex-config/scripts/adapters/claude.mjs +24 -0
- package/skills-hub/system/optimize-codex-config/scripts/adapters/codex.mjs +10 -0
- package/skills-hub/system/optimize-codex-config/scripts/ai-cli-config.mjs +67 -0
- package/skills-hub/system/optimize-codex-config/scripts/audit-codex-config.mjs +762 -0
- package/skills-hub/system/optimize-codex-config/scripts/lib/document.mjs +166 -0
- package/skills-hub/system/optimize-codex-config/scripts/lib/inspect.mjs +211 -0
- package/skills-hub/system/optimize-codex-config/scripts/lib/io.mjs +104 -0
- package/skills-hub/system/optimize-codex-config/scripts/lib/plan.mjs +79 -0
- package/skills-hub/system/optimize-codex-config/scripts/lib/transaction.mjs +205 -0
- package/skills-hub/system/optimize-codex-config/scripts/lib/writers.mjs +46 -0
- package/skills-hub/system/optimize-codex-config/scripts/statusline/claude-statusline.mjs +94 -0
- package/skills-hub/system/optimize-codex-config/scripts/vendor/THIRD-PARTY-NOTICES.txt +250 -0
- package/skills-hub/system/optimize-codex-config/scripts/vendor/build-package-lock.json +488 -0
- package/skills-hub/system/optimize-codex-config/scripts/vendor/manifest.json +14 -0
- package/skills-hub/system/optimize-codex-config/scripts/vendor/parsers.mjs +16 -0
- package/skills-hub/system/proxy-region-locale/LICENSE +21 -0
- package/skills-hub/system/proxy-region-locale/SKILL.md +42 -0
- package/skills-hub/system/proxy-region-locale/agents/openai.yaml +4 -0
- package/skills-hub/system/proxy-region-locale/references/linux.md +35 -0
- package/skills-hub/system/proxy-region-locale/references/macos.md +31 -0
- package/skills-hub/system/proxy-region-locale/references/windows.md +45 -0
- package/skills-hub/system/system-health-audit/LICENSE +21 -0
- package/skills-hub/system/system-health-audit/SKILL.md +41 -0
- package/skills-hub/system/system-health-audit/agents/openai.yaml +4 -0
- package/skills-hub/system/system-health-audit/references/platforms.md +37 -0
- package/skills-hub/system/system-health-audit/scripts/system_audit.py +41 -0
- package/skills-hub/system/windows-dev-disk-cleanup/LICENSE +21 -0
- package/skills-hub/system/windows-dev-disk-cleanup/SKILL.md +40 -0
- package/skills-hub/system/windows-dev-disk-cleanup/agents/openai.yaml +4 -0
- package/skills-hub/system/windows-dev-disk-cleanup/references/windows-cleanup-workflow.md +121 -0
- package/skills-hub/writing/.gitkeep +0 -0
- package/skills-hub/writing/job-application/LICENSE +21 -0
- package/skills-hub/writing/job-application/SKILL.md +160 -0
- package/skills-hub/writing/job-application/agents/openai.yaml +4 -0
- package/skills-hub/writing/job-application/assets/resume.css +10 -0
- package/skills-hub/writing/job-application/config.example.json +9 -0
- package/skills-hub/writing/job-application/references/company-research.md +7 -0
- package/skills-hub/writing/job-application/references/corpus-schema.md +33 -0
- package/skills-hub/writing/job-application/references/honesty-gate.md +29 -0
- package/skills-hub/writing/job-application/references/improvement-plan.md +15 -0
- package/skills-hub/writing/job-application/references/ingest-protocol.md +18 -0
- package/skills-hub/writing/job-application/references/interview-speech.md +16 -0
- package/skills-hub/writing/job-application/references/jd-parse.md +18 -0
- package/skills-hub/writing/job-application/references/persist-paths.md +34 -0
- package/skills-hub/writing/job-application/references/question-bank.md +19 -0
- package/skills-hub/writing/job-application/references/rendering.md +9 -0
- package/skills-hub/writing/job-application/references/resume-playbook.md +30 -0
- package/skills-hub/writing/job-application/scripts/README.md +12 -0
- package/skills-hub/writing/job-application/scripts/ingest_kb.py +188 -0
- package/skills-hub/writing/job-application/scripts/render_resume.py +144 -0
- package/skills-hub/writing/job-application/scripts/validate_claims.py +52 -0
- package/skills-hub/writing/job-application/scripts/write_config.py +72 -0
- package/skills-hub/writing/job-application/templates/application-index.md +10 -0
- package/skills-hub/writing/job-application/templates/brief.md +16 -0
- package/skills-hub/writing/job-application/templates/changelog.md +6 -0
- package/skills-hub/writing/job-application/templates/company-research.md +15 -0
- package/skills-hub/writing/job-application/templates/corpus.md +11 -0
- package/skills-hub/writing/job-application/templates/evidence-map.md +5 -0
- package/skills-hub/writing/job-application/templates/framings.md +6 -0
- package/skills-hub/writing/job-application/templates/improvement-plan.md +16 -0
- package/skills-hub/writing/job-application/templates/ingest-log.md +4 -0
- package/skills-hub/writing/job-application/templates/known-gaps.md +4 -0
- package/skills-hub/writing/job-application/templates/match-report.md +21 -0
- package/skills-hub/writing/job-application/templates/methodology-cache.md +10 -0
- package/skills-hub/writing/job-application/templates/persist-index.md +11 -0
- package/skills-hub/writing/job-application/templates/profile.md +21 -0
- package/skills-hub/writing/job-application/templates/questions.md +22 -0
- package/skills-hub/writing/job-application/templates/resume-original.md +10 -0
- package/skills-hub/writing/job-application/templates/resume-tailored.md +21 -0
- package/skills-hub/writing/job-application/templates/sources-index.md +6 -0
- package/skills-hub/writing/job-application/templates/speech.md +19 -0
- package/skills-hub/writing/job-application/templates/stories.md +9 -0
- package/skills-hub/writing/job-application/templates/story-bank.md +11 -0
- package/skills-hub/writing/job-application/templates/strengths.md +4 -0
- package/skills-hub/writing/job-application/templates/style-memory.md +7 -0
- package/skills-hub/writing/ste-zh/LICENSE +21 -0
- package/skills-hub/writing/ste-zh/NOTICE.md +9 -0
- package/skills-hub/writing/ste-zh/SKILL.md +130 -0
- package/skills-hub/writing/ste-zh/agents/openai.yaml +6 -0
- package/skills-hub/writing/ste-zh/examples/zh-report.md +23 -0
- package/skills-hub/writing/ste-zh/references/english-modes.md +13 -0
- package/skills-hub/writing/ste-zh/references/terminology.md +13 -0
- package/skills-hub/writing/ste-zh/references/zh-rules.md +29 -0
- package/template/.speculo/refresh-contract.json +2 -0
- package/template/canonical/canonical-specdev-goal-plan.md +33 -25
- package/template/canonical/canonical-specdev-grill-with-docs.md +214 -206
- package/template/canonical/canonical-specdev-spec.md +214 -206
- package/template/canonical/canonical-specdev-tickets.md +214 -206
- package/template/canonical/canonical-specdev-wayfinder.md +214 -206
- package/template/lib/speculo-runtime.mjs +183 -8
- package/template/references/coordination/coordination-contract.md +11 -3
- package/template/references/coordination/modes/cli.md +2 -2
- package/template/references/coordination/modes/herdr.md +9 -9
- package/template/references/coordination/modes/orca.md +11 -11
- package/template/references/coordination/project-facts.schema.json +1 -0
- package/template/workflows/specdev/specdev-i-init-setup/SKILL.md +7 -6
- package/template/workflows/specdev/specdev-i-init-setup/references/first-setup.md +30 -1
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
# DNS 设计与可执行工作流
|
|
2
|
+
|
|
3
|
+
## 1. 明确“只用代理 DNS”的含义
|
|
4
|
+
|
|
5
|
+
要控制两个独立维度:**谁解析**(批准的 resolver)与**怎么到达它**(指定代理组/隧道)。第三方公共 DoH 不因为配置进客户端就成了“代理商提供的 DNS”;代理商未发布 DNS 地址时不能猜。优先使用其正式提供且在代理内可达的 DNS;没有时让用户选择可信上游,并说明它仍能看到查询。
|
|
6
|
+
|
|
7
|
+
本技能自动生成器刻意只支持公开 numeric DoH/DoT 上游、不带账号/query/额外 DNS 参数,以避免隐式 bootstrap 和敏感信息输出。私有 provider DNS、带认证 URL、域名形式 DoH 或复杂企业 split DNS 可人工设计,但不擅自换成公共服务。**不要把域名 DoH 的 URL 生硬改成 IP**:证书/SNI 未必支持;保持证书校验,以实际服务信息为准。
|
|
8
|
+
|
|
9
|
+
规则模式中业务可 DIRECT,但其公共 DNS 也可全部从代理发出。若用户要求业务也全不直连,必须另定义受保护应用/域名和断线隔离,不用 DNS 配置冒充业务 kill switch。`.local` mDNS、企业域、路由器名和 DHCP 是独立网络需求,不把它们当成必须送公共 resolver 的网站;严格目标与这些需求不兼容时先停止,不静默加例外。
|
|
10
|
+
|
|
11
|
+
## 2. 解析路径与启动依赖
|
|
12
|
+
|
|
13
|
+
分别记录:应用 DNS → OS stub/实际网络服务 → TUN DNS 劫持 → Mihomo resolver → resolver 的 TLS 连接 → 代理组 → 最终节点。业务请求另记录目标规则与最终链。
|
|
14
|
+
|
|
15
|
+
Mihomo DNS 字段含义以读取的上游文档/本机内核为准:
|
|
16
|
+
|
|
17
|
+
| 字段 | 作用 | 容易遗漏的问题 |
|
|
18
|
+
|---|---|---|
|
|
19
|
+
| `nameserver` | 普通域名的默认上游 | 隐私优先的上游见第 6 节;连接仍可能 DIRECT |
|
|
20
|
+
| `nameserver-policy` | 特定域名优先上游 | 比默认上游优先;旧 `geosite:cn`/system 仍会生效 |
|
|
21
|
+
| `direct-nameserver` | DIRECT 业务出口的域名解析 | v1.19.32 解析时固定不走 `respect-rules`。没有 `#组名` 就从默认网卡直连。留空才回落到主解析器;片段在加载文件里丢失后仍留下裸域名,比留空更差。`system` 会把查询交给操作系统 |
|
|
22
|
+
| `default-nameserver` | 解析 resolver 域名的引导 DNS | 必须是纯 IP,可加密。它不继承 `respect-rules`,也不要抄进业务查询 |
|
|
23
|
+
| `proxy-server-nameserver` | 解析代理节点的域名 | 同样不继承 `respect-rules`。若仍经尚未启动的同一代理,会产生循环依赖 |
|
|
24
|
+
| `proxy-server-nameserver-policy` | 节点域名的专门策略 | 可覆盖节点 bootstrap,必须一起审阅 |
|
|
25
|
+
| `respect-rules` | 让 `nameserver`、`fallback`、`nameserver-policy` 在没有片段时使用代理名 `RULES` | 不等于强制代理,也不作用于 direct/default/proxy-server 三类列表。文档要求非空 `proxy-server-nameserver` |
|
|
26
|
+
| `URL#组名` | 指定这条 DNS 连接走该代理或组 | 组名必须与真实组一致;对不上时按网卡名解释。`#` 前有空白时,Mihomo v1.19.32 使用的 YAML 解析器会把后面当成注释 |
|
|
27
|
+
| `fallback` | 与主解析器并行的另一组上游 | `fallback-lazy-query` 默认关闭时,每次查询都会发给回退列表,不是失败后才查。本方案保持空列表,不把国内解析器放进来 |
|
|
28
|
+
| `fake-ip` | 向应用提供映射地址 | 不保证 OS/浏览器解析都到达内核 |
|
|
29
|
+
|
|
30
|
+
因此自动候选将普通、DIRECT 业务解析和 resolver 引导 DNS 都显式绑定批准组,而不是只依赖 `respect-rules`。IPv4/IPv6 numeric 上游必须自己提供;不会发起本地 DNS 来寻找服务器。
|
|
31
|
+
|
|
32
|
+
### A. strict-no-bootstrap:严格但有前置条件
|
|
33
|
+
|
|
34
|
+
请求 `"bootstrap": {"mode": "deny"}`。候选使用 `proxy-server-nameserver: ["rcode://refused"]` 拒绝意外的节点域名解析;所有静态节点地址须已确定,动态 providers、域名节点或未知成员会阻止自动计划。不能为通过检查而静默把节点域名替换成旧 IP,证书/SNI、地址变动和订阅更新仍需管理。
|
|
35
|
+
|
|
36
|
+
`default-nameserver` 与一般上游使用显式 `#组名` 的 numeric 加密地址;不会依赖本地 resolver 去解析 DoH 主机名。无已可用节点时不能保证启动。候选语法依据 Mihomo v1.19.32 的解析实现,不保证其他版本;**必须用用户实际版本检查与冷启动测试**。`rcode://refused` 的存在不代表已经完成 OS 防泄漏或 crash 隔离。
|
|
37
|
+
|
|
38
|
+
### B. encrypted-bootstrap-exception:可审计的启动例外
|
|
39
|
+
|
|
40
|
+
当订阅依赖节点域名,且用户批准启动解析在隧道外进行,可填:
|
|
41
|
+
|
|
42
|
+
```json
|
|
43
|
+
{
|
|
44
|
+
"mode": "encrypted-direct",
|
|
45
|
+
"resolvers": ["tls://9.9.9.9"],
|
|
46
|
+
"acknowledge_direct_bootstrap": true
|
|
47
|
+
}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
这里的地址仅演示格式,不是替用户选择。该列表只填经过认可的加密 numeric resolver,不填运营商、`system`、DHCP 或明文地址。仍只用于节点域名;普通、DIRECT 业务和 resolver 引导 DNS 继续显式走代理。**此模式存在直连 DNS 连接,不能报告“全部 DNS 经代理”**;运营商仍看到与 resolver 的连接元数据,resolver 会看到本地出口和节点查询。没有例外授权就阻止应用,不自动降级。
|
|
51
|
+
|
|
52
|
+
若连批准的 bootstrap 也不可达,先保留原配置并报告受阻。不要关证书校验、随意改端口或自动改用明文。明文只存在于第 6 节的 `plaintext-direct`,而且两项确认缺一不可。
|
|
53
|
+
|
|
54
|
+
## 3. 生成、合并与检查
|
|
55
|
+
|
|
56
|
+
工具:Python 3.10+。[dns_guard.py](../scripts/dns_guard.py) 无网络的 `plan/audit` 可读 JSON;YAML 需 PyYAML(可用时以 SafeLoader、拒绝重复键/别名、限制大小解析)。没有依赖时从可信本地解析器导出有效 JSON,不自行用正则解析 YAML。不要把生产配置交给在线转换网站。
|
|
57
|
+
|
|
58
|
+
从客户端导出**完整的实际生成配置**到用户私有目录;不要把只有模式/端口的 `/configs` 响应当成完整配置。保存所有必要的组/节点/TUN/DNS 信息,但原文件可能含密码,只在本机使用,不加入 Git。动态 provider 成员缺失时人工确认、取得可信展开视图后再继续,不从不完整摘要推测。
|
|
59
|
+
|
|
60
|
+
复制 [请求示例](../templates/dns-request.example.json) 到自己的私有工作目录,填写实际 group、批准 resolver、IPv6 策略和保护域名。`targets` 是域名后缀的业务规则范围;DNS 方案覆盖全部公网解析,并不是只保护 targets 的 DNS。
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
python3 "$SKILL_DIR/scripts/dns_guard.py" plan \
|
|
64
|
+
--config effective-before.yaml --request dns-request.json
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Windows PowerShell 用已验证的 `python` 或 `py -3`,如:
|
|
68
|
+
|
|
69
|
+
```powershell
|
|
70
|
+
& python "$SKILL_DIR\scripts\dns_guard.py" plan --config effective-before.json --request dns-request.json
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
输出含 `input_profile_sha256`、`candidate_fragment`、`rules_extension`、`merge_contract`、`findings` 和待验项目。已知危险返回 `BLOCKED`,不输出可应用候选;正常输出为 `REVIEW_REQUIRED`,不是完整配置。0 只表示计划生成完成。
|
|
74
|
+
|
|
75
|
+
候选不设置 `dns.listen`、system proxy、stack、MTU 或 DNS 缓存调优;保留原 DNS filter 和无关设置。启用 fake-ip 前检查与 LAN/VPN 的地址冲突以及 DNS 缓存中的旧真实/fake 地址,不把整个 `198.18.0.0/15` 标记成公网目标。
|
|
76
|
+
|
|
77
|
+
**空 map 的合并陷阱:** `nameserver-policy: {}` 在一些递归 Merge 中不会删除旧键。计划要求替换两类策略 map,列表整体替换;导出最终生成配置重新 `audit`,不能只看自己写的片段。原先有 split DNS 时默认 `BLOCKED`;先审查其用途,确实批准替换才将请求的 `replace_existing_dns_policies` 改为 true。企业内部域名仍需本地解析时,不用这个严格自动候选覆盖它;保留旧配置,制定标明例外的人工方案。
|
|
78
|
+
|
|
79
|
+
合并规则要检查已有第一命中规则,特别是进程规则、IP 规则、GEOIP、RULE-SET 与 MATCH。不合并新 GROUP、不改节点选择,不擅自删除旧业务规则。生成后通过真实内核校验,再在支持的 GUI 层导入。客户端当前生效文件只读;不要覆盖生成文件来绕过客户端。
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
python3 "$SKILL_DIR/scripts/dns_guard.py" audit \
|
|
83
|
+
--config effective-after.yaml --request dns-request.json
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
`audit` 返回 1 表示检测到配置风险,3 表示静态检查未发现这些风险但现场仍未验证。不把后者改成“检测通过,无泄漏”。脚本不是 Mihomo 完整模拟器,不展开远程规则、验证 schema 的所有版本或证明组的地理位置。
|
|
87
|
+
|
|
88
|
+
## 4. 发出真实 DoH wire 查询(显式同意后)
|
|
89
|
+
|
|
90
|
+
下面 `7890` 为示例端口,resolver 为用户选择的测试端点;先核对可用性、TLS/IP 证书和信息披露。外部 resolver 会看到测试域名和代理出口 IP;不携带 Claude API key、Cookie 或节点密码。
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
python3 "$SKILL_DIR/scripts/dns_guard.py" probe --network \
|
|
94
|
+
--proxy http://127.0.0.1:7890 \
|
|
95
|
+
--resolver https://1.1.1.1/dns-query \
|
|
96
|
+
--domain example.com --qtype both
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
用 RFC 8484 DNS wire POST,不使用各家私有 JSON API。分别查询 A/AAAA,检查 TLS、HTTP 200、DNS MIME、事务 ID、question、压缩指针和响应长度,区分 ANSWER、NODATA、NXDOMAIN、DNS_ERROR。不使用 `-k`,不跟重定向,不读 `.curlrc`,不采用环境 NO_PROXY,不失败后直连。支持 numeric-loopback HTTP/HTTPS/socks5h;不支持远程代理/需认证的代理时明确停下,不要求公开 secret。
|
|
100
|
+
|
|
101
|
+
DoT 配置可做静态审查,但该探针仅测试 DoH,不把它称作 DoT 实测。上游没有提供 numeric HTTPS 时交付人工方案,不改服务地址欺骗 TLS。IPv6 literal resolver 可用于测试其地址族连通性;AAAA 查询本身可能仍在 IPv4 传输,不能据此认定本机 IPv6 正常。
|
|
102
|
+
|
|
103
|
+
0/3 与输出观察分开解释:该 `probe` 总体维持 UNVERIFIED;局部成功显示 OBSERVED,正常 DNS 的 NXDOMAIN/NODATA 不是 IP 泄漏;请求失败没有直连补救。**显式使用 Clash 的 HTTP/mixed 端口只证明进入本地代理,仍可能被其业务规则判为 DIRECT;必须核对这一请求的最终链。它也没有调用内核内部 DNS 模块,因此不能替代对候选 nameserver/#组名 的生效验证。**
|
|
104
|
+
|
|
105
|
+
**它不测试 OS TUN 的 DNS 拦截**,因为请求显式指定代理。系统路径需要验收参考中的原生解析 + 物理接口/内核证据。
|
|
106
|
+
|
|
107
|
+
## 5. 为什么不能只看网页上的 DNS 国家
|
|
108
|
+
|
|
109
|
+
检测站通常通过随机域名观察递归 resolver 的出口,可能与业务节点不同。Anycast、转发链、服务商出口和地理数据库可能影响显示。出现运营商地址,只说明至少有一条查询没有使用批准的 resolver;不能据此把国内解析器、`system` 或 DHCP 加进覆写。正确证据是:批准 resolver、观察到 DNS 的路由路径、物理接口没有该测试的未授权外发,以及真实应用规则链;IP 所在国家只是线索。
|
|
110
|
+
|
|
111
|
+
查询没进入内核时,四个 DNS 输入框不会改变结果。`dns-hijack` 只看见已经进入 TUN 的包。发往同网段路由器的 53 端口、另一块网卡上的 DNS、TCP 53 未列入劫持、浏览器自己的 DoH 和 IPv6 DNS,都要按 [系统 DNS](platform-dns.md) 单独看。Windows 会同时查询 TUN 网卡和物理网卡上的 DNS。
|
|
112
|
+
|
|
113
|
+
不要声称普通 DoH“很难被封”“隐私性最高”或绝对隐藏目的。DoH/DoT 保护到 resolver 的内容,但 resolver 自己可见,连接元数据仍可见;明文 DNS 经加密隧道到 VPN resolver 与本地明文外发也不能混为一谈。清缓存仅去掉旧答案,不改变这些路径。
|
|
114
|
+
|
|
115
|
+
## 6. 隐私优先:隐藏真实地址并访问 AI
|
|
116
|
+
|
|
117
|
+
这是用户明确选择的目标。探测和候选都按这一节做;不要把某一台电脑上 53/443/853 的结果写成所有机器的默认值。代理开启后,这一节要填的公共 DNS 只有 Google(`8.8.8.8`、`8.8.4.4`)和 Cloudflare(`1.1.1.1`、`1.0.0.1`),以及这两家自己的域名 DoH。`nameserver`、`default-nameserver`、`direct-nameserver` 的自动候选用它们的 DoT 或 numeric DoH。数字地址在保护组里没有回包时,才按下面的人工步骤改用同一服务商的域名 DoH。`proxy-server-nameserver` 只用同一组里、物理网卡探测实际能通的地址;`fallback` 保持空。阿里云和其他国内公共 DNS 不进入这些字段。打开代理不会改写订阅正文,该订阅的 DNS 覆写关掉后,正文里的国内 DNS 会重新生效。Amazon Route 53 与 Starlink 没有可填进这些字段的公共递归解析器。
|
|
118
|
+
|
|
119
|
+
`routing: rule` 时,`nameserver` 和 `direct-nameserver` 每条都带 `#保护组`。组名里的空格和符号做百分号编码,YAML 里整段加引号。编码是为了让组名里的空格不把标量拆开;不要在 `#` 前再插入空格或换行。只打开 `respect-rules` 时,没写组名的 `nameserver` 仍按路由规则选择出口,但 `direct-nameserver` 不会。直连规则要先得到真实地址;这条查询若从物理网卡去连 853 或 443,而该网卡到批准解析器的加密端口不通,国内站点会报 `dns resolve failed`。`direct-nameserver` 为空时回落到 `nameserver`,所以 `nameserver` 的组名不能省。加载后的文件若丢掉片段,把 `direct-nameserver` 留空,不要保留裸域名。`proxy-server-nameserver` 不加组名,它才是物理网卡上的节点引导。业务上游已是数字地址时,生成器仍把 `default-nameserver` 钉在批准的加密地址上,不把明文 bootstrap 抄进这个字段。`routing: global` 的业务上游不加组名,由 `respect-rules` 跟随 GLOBAL。
|
|
120
|
+
|
|
121
|
+
Clash Verge 的 DNS 对话框可以和 `dns_config.yaml` 不一致。回退框里残留的国内 DoH 或未回包主机名,在保存时会写回源文件。先让四个框与磁盘一致,再保存。生成文件可能去掉引号;对 Mihomo v1.19.32,`dns-query#编码` 这种 `#` 前没有空白的标量仍会保留片段。验收读生成文件和内核日志里的实际上游与连接链,不把覆写源或对话框当成已经生效。没有回包的主机名不追加进业务列表。国内 CDN 可能因此不是本地最优,节点关闭时直连网站的解析也会失败;不用运营商 DNS 换回可用性。
|
|
122
|
+
|
|
123
|
+
组名钉上之后,用一次真实 DNS 交换选定传输。TCP 握手完成,或客户端已经上传数据但下载字节为 0,都还没有答案。同一保护组里,到批准解析器数字地址的 DoT 和 numeric DoH 都没有回包,而普通 HTTPS 网站能完成时,这条节点路径没有把这些解析器地址的响应送回来。下一步改用该服务商自己的域名 DoH,并保留同一个组名:`https://域名/dns-query#%编码后的保护组`。让保护组把域名交给节点解析,不要先在本地换成刚才没有回包的 IP。自动生成器仍只接受数字地址,遇到这种域名会拒绝;域名 DoH 是人工步骤,引导只用已经批准的 bootstrap,不填国内解析器。域名 DoH 也没有回包就停止,保留原来的直连规则,不退回 `system` 或国内 DNS。
|
|
124
|
+
|
|
125
|
+
### 先探测物理出口,再选 bootstrap
|
|
126
|
+
|
|
127
|
+
探测必须绑定非 TUN 网卡的源地址。经虚拟网卡成功只说明代理出口通,不能证明节点域名能在隧道建立前解析。
|
|
128
|
+
|
|
129
|
+
| 物理网卡结果 | 请求里的 bootstrap | 业务 `nameserver` |
|
|
130
|
+
|---|---|---|
|
|
131
|
+
| 批准的 `tls://` 或 numeric DoH 可连通 | `encrypted-direct`,并确认 `acknowledge_direct_bootstrap` | 同一批准集。`routing: rule` 时带 `#保护组`;`routing: global` 时不带组名,靠 `respect-rules` 跟随 GLOBAL |
|
|
132
|
+
| 加密端口超时,且 `tcp://` 到同一公共 IP 的 53 端口对中性域名返回未污染地址 | 用户同时确认两项后才用 `plaintext-direct` | 仍是经代理的加密批准集,不改成明文 |
|
|
133
|
+
| 加密与明文都不通,或明文答案被污染 | 保持原配置,状态为受阻 | 不改 |
|
|
134
|
+
|
|
135
|
+
`plaintext-direct` 只放入 `proxy-server-nameserver`。路径上能看到节点域名;resolver 能看到本机出口和节点查询。计划标签是 `plaintext-bootstrap-exception`,不能写成“全部 DNS 经代理”。`system`、DHCP、`223.5.5.5`、`223.6.6.6`、`119.29.29.29`、`180.76.76.76`、`114.114.114.114`、`doh.pub`、`alidns.com` 由 `dns_guard` 拒绝。
|
|
136
|
+
|
|
137
|
+
### 候选里同时固定的行为
|
|
138
|
+
|
|
139
|
+
- `enhanced-mode: fake-ip`,`prefer-h3: false`,`fallback: []`,`fallback-filter.geoip: false`。回退列表为空时打开 GeoIP 过滤,会把不属于 `geoip-code` 的答案当成污染且无处回退;国家码缺省时界面常显示 CN,不代表策略是中国。不要把出口所在地(例如 TW 或 US)填进这个代码来代替过滤开关。
|
|
140
|
+
- 隐私目标使用 `ipv6: block`,顶层 `ipv6` 与 `dns.ipv6` 都为 false。这只让内核拒绝 IPv6 并停发 AAAA,不关闭操作系统自己的 IPv6。
|
|
141
|
+
- `direct-nameserver` 与本节的 `#保护组` 规则相同,不填 `system`。
|
|
142
|
+
- fake-ip 过滤默认保留原列表。只有用户要求应用不能看到真实地址时,才把过滤缩到本地域名和该平台的连通性检测名,并单独说明被移出的公网域名。
|
|
143
|
+
- `routing: global` 时,`templates/ai-rules.yaml` 的前置规则不生效。AI 是否流畅取决于 GLOBAL 当前叶子、fake-ip 是否避免本地等待,以及 [网络性能](network-performance.md) 里的 UDP/QUIC 对照。规则模式才把这些域名放到保护组前面。
|
|
144
|
+
|
|
145
|
+
### 复制到另一台电脑
|
|
146
|
+
|
|
147
|
+
只复制 DNS 覆写源文件,不复制运行时生成配置或整个配置目录。每份订阅都要打开自己的覆写开关;订阅正文里的国内 DNS 在开关关闭时恢复生效。到新电脑后重做物理网卡探测,再生成计划。同网段路由器上的 DNS、应用自带的 DoH,以及节点明文 bootstrap,都不会因为这份文件而变成 Google 或 Cloudflare。
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# FlClash:禁止猜写持久化格式
|
|
2
|
+
|
|
3
|
+
候选目录包括 macOS 的 `~/Library/Application Support/FlClash` 与 `com.follow.clash`、Windows 对应 `%APPDATA%` 目录、Linux 的 XDG 配置目录。大小写、便携模式、版本和安装渠道会改变位置;使用 GUI/活动进程确认真实实例。
|
|
4
|
+
|
|
5
|
+
旧实现见到 shared_preferences.json 或 database.sqlite,以及 currentProfileId、patchClashConfig、vpnProps、addedRules、standardOverwrite、overrideDns 等字段。这些只是历史线索,不是跨版本写入协议。无法验证具体字段含义、当前订阅与合并顺序时停止自动修改;不能只因列名像规则就向 SQLite 写入。
|
|
6
|
+
|
|
7
|
+
优先使用客户端支持的规则覆写导入与设置界面。离线改文件前要求用户正常退出并确认相关进程已停止;保留字节、权限、原先不存在状态。仅复制 SQLite 主文件可能遗漏 WAL:数据库备份须使用对应的事务一致性备份方式,或确认正常关闭及 checkpoint;不得删除 -wal/-shm 来强行“修复”。
|
|
8
|
+
|
|
9
|
+
不覆盖订阅、节点、密钥或现有脚本;字符串内嵌 JSON 也必须经版本验证后按原结构保存。原版 prepend/append/delete 不是可直接写入任意 addedRules 字段的数据格式。未知 delete 语义就保留并报告冲突,不能发明禁用字段。
|
|
10
|
+
|
|
11
|
+
规则模式、TUN、DNS override 分别设置并读回,保持已有 stack 与系统代理状态;不盲目关闭 IPv6、监听 53 或替换全部 DNS。无助手/权限时只诊断,不自动安装特权组件。
|
|
12
|
+
|
|
13
|
+
重开后核对运行内核而非仅存储文件;检查单次目标连接对应规则及最终节点。多个覆写脚本的先后次序必须通过生成配置和实际连接验证。修改不生效或被覆写就恢复本轮改动,不循环竞写。
|
|
14
|
+
|
|
15
|
+
所有诊断、DNS/IPv6 与 crash 验收按主入口的诊断参考执行;该参考不承诺某一版本的内部 schema。
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
## 本轮 DNS 计划的接入
|
|
19
|
+
|
|
20
|
+
按 [DNS 工作流](dns-workflow.md) 生成候选,只在本版本实际支持的规则/覆写/DNS 管理层应用。`candidate_fragment` 不是订阅全文;`rules_extension` 与内核 `dns`/`tun` 是不同产物,不放错层。现有 DNS 策略 map 要经批准替换;递归 Merge 的空对象可能保留旧策略,不能只看导入成功。
|
|
21
|
+
|
|
22
|
+
先在私有目录保存原状态,确认 schema 和各覆写层的执行顺序,使用隔离完整候选检查。读回最终生成配置后再跑 audit,尤其检查 nameserver-policy、proxy-server-nameserver-policy、fallback、direct-nameserver 和 URL 的代理组后缀没有被 GUI 删除/还原,也没有因为未加引号而变成注释。未知格式仅交付 GUI 操作计划,不写 SQLite 或 臆造字段。
|
|
23
|
+
|
|
24
|
+
不因为启用 TUN 就关闭旧系统代理;不得替用户改节点密码、subscription URL、DNS 监听端口或系统区域。原生系统 DNS/IPv6 与浏览器更改读对应参考并分阶段实施,失败按 [事务与验收](acceptance.md) 停止/回滚。DNS 测试通过不能替代真实 Claude Code 连接链和服务响应。
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# 网络优化:在已验证的路径上测量
|
|
2
|
+
|
|
3
|
+
目标是保持预期代理/DNS 路径与业务可用性,不是最大化一项测速或套一组“最佳参数”。先确认无 DNS 启动循环、路由排除、规则 DIRECT、IPv6 绕出、TLS 错误或节点不可达,再讨论性能。
|
|
4
|
+
|
|
5
|
+
## 最小对照
|
|
6
|
+
|
|
7
|
+
同一主机、客户端版本、节点、网络与目标,各取若干次冷/热解析和请求。记录失败率、DNS 查询耗时、TCP 连接、TLS、首字节、总时长及样本数;中位数与较慢样本分开。缓存命中很快不代表上游路径正确。第三方站点、CDN 与服务端限流会干扰对照,不编造提升百分比。
|
|
8
|
+
|
|
9
|
+
`curl --write-out` 可在本机帮助支持下取请求分阶段时间;走 HTTP 代理时,curl 的本地 namelookup 阶段不一定包含代理远端解析耗时,不能直接标成“目标 DNS 延迟”。本技能 DoH wire probe 检查响应路径,没有自动输出可靠的网络基准分数。
|
|
10
|
+
|
|
11
|
+
## 一次只调整一个因素
|
|
12
|
+
|
|
13
|
+
| 现象 | 对照与检查 | 避免的默认动作 |
|
|
14
|
+
|---|---|---|
|
|
15
|
+
| DNS 超时、SERVFAIL | 先分节点 bootstrap 与业务 resolver;检查被客户端保留的 policy/fallback | 换成本地明文 DNS“救急”却继续称隐私通过 |
|
|
16
|
+
| 规则/TUN 下某服务不可达 | 首命中规则、真实叶子、fake-IP 映射、域名可见性、旧连接 | 为这一个服务永久改成 global。用户另行选择的隐私全局模式见 [DNS 工作流](dns-workflow.md) |
|
|
17
|
+
| 小请求可用、大上传卡住 | 同节点的分段传输、MTU/PMTUD、UDP/TCP、TLS/HTTP 对照 | 把 MTU 一律设为 9000/1500/某个网上数值 |
|
|
18
|
+
| QUIC/HTTP3 失败 | 先核对 UDP 支持;经授权仅对目标请求做 TCP/HTTP 版本对照 | 永久禁掉整机所有 UDP/QUIC |
|
|
19
|
+
| 开启代理后 DNS 变慢 | 上游经同代理的延迟/缓存/可用性,避免引导循环 | 为速度自动 race 一个未批准 resolver |
|
|
20
|
+
| TUN 栈不兼容 | 保留当前栈基线;按内核版本一次试一个兼容栈并回滚 | 按操作系统统一强填 gvisor/system/mixed |
|
|
21
|
+
| 接口切换后失效 | 出站接口选择、其他 VPN、原生 IPv6、残留路由与连接 | 强制重启网络或清空整个防火墙 |
|
|
22
|
+
|
|
23
|
+
本方案只对 DNS 默认不优先 H3,减少与 respect-rules 的组合变量;这不等于关闭应用 HTTP3。resolver 协议、缓存算法、TTL、并发、ECH/HTTPS 记录、ECS 与硬件 offload 不因“优化”默认更改。尤其不注入真实用户子网 ECS,不关闭证书校验。
|
|
24
|
+
|
|
25
|
+
优化验收同时满足:保护路径仍符合方案、主要工作流不退化、错误率不恶化、回滚可用。不能只拿一个 IP/DNS 检测页的地理显示作为网络优化指标。
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# 系统 DNS、缓存与 IPv6:按实际网络服务修改
|
|
2
|
+
|
|
3
|
+
本节是现场操作参考,不代表在用户设备执行过。先读本机版本/帮助、运行身份与网络管理方式。只读任务不执行 flush 或 set。所有系统写入需要覆盖确切网络服务/接口的授权、原状态和可用回滚;不碰其他企业 VPN 或远程管理路径。
|
|
4
|
+
|
|
5
|
+
## 所有系统都先验证的条件
|
|
6
|
+
|
|
7
|
+
1. 客户端内部 resolver 真的启用且上游可用,DNS 请求到达它后能返回合理响应。
|
|
8
|
+
2. TUN 不仅创建接口,还把目标业务与 UDP/TCP DNS 路由到预期路径。Mac/Windows 发往局域网 resolver 的请求不能假定自动劫持。
|
|
9
|
+
3. 要填到网卡的 IP 是已证明可达的 DNS 服务,且协议/端口受系统支持。多数传统 DNS UI 只接受 IP 和默认 53,不接受 `https://.../dns-query` 或 `127.0.0.1:1053`。
|
|
10
|
+
4. 本地回环 DNS 只在确认真实监听 UDP/TCP 53、无端口冲突、无递归和服务故障策略后采用。不为方便把客户端开放到 `0.0.0.0:53`,不自动提权占端口。
|
|
11
|
+
5. DNS cache 是答案缓存,不是代理路由。只在生效配置确认后按本轮目标刷新一次;不得反复清缓存掩盖路径问题。
|
|
12
|
+
|
|
13
|
+
## macOS
|
|
14
|
+
|
|
15
|
+
先用实际活动网络服务,不假定名为 Wi-Fi,也不默认每台 Mac 都由同一 VPN/配置描述文件管理:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
sw_vers
|
|
19
|
+
networksetup -listallnetworkservices
|
|
20
|
+
scutil --proxy
|
|
21
|
+
scutil --dns
|
|
22
|
+
route -n get default
|
|
23
|
+
netstat -rn -f inet6
|
|
24
|
+
# SERVICE 为已确认的网络服务名称
|
|
25
|
+
networksetup -getdnsservers "$SERVICE"
|
|
26
|
+
networksetup -getinfo "$SERVICE"
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
`scutil --dns` 可显示多个 scoped/supplemental resolver;只看 Wi-Fi DNS 列表不足以解释企业 VPN、按域 resolver 或应用路径。输出可能有内部域/地址,只分享摘要。`dig` 常用于对指定服务器检查,不必然等价于 macOS 应用的系统解析路径;系统路径测试需结合实际应用或系统 resolver 调用与观察。
|
|
30
|
+
|
|
31
|
+
**不要直接采用“删掉所有手动 DNS,代理就自动接管”。** 清空手动值可能恢复 DHCP 提供的路由器/运营商 DNS。只有已经证明 DHCP 路径的 DNS 同样会被接管,且没有其他 scoped resolver 绕出时,这一步才有意义。
|
|
32
|
+
|
|
33
|
+
确需系统 DNS 改动时,保存服务的原手动列表或“自动获取”状态,以及 IPv6 的原配置方式;DNS 设置样式如下,变量不能来自猜测:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
# 仅当 VERIFIED_DNS_IP 已在 53/UDP 与 53/TCP 验证可达、且用户已授权
|
|
37
|
+
sudo networksetup -setdnsservers "$SERVICE" "$VERIFIED_DNS_IP"
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
若采用 TUN 对一个已明确的非 LAN DNS 目的地址进行拦截,也须验证该地址在当前路由下被截获,而不是实际直连公共 DNS。没有独立断线阻断时,TUN 停止后该系统地址可能直连,必须标记 crash 未通过;不要为了劫持方便偷偷填一个公众 resolver。
|
|
41
|
+
|
|
42
|
+
配置和实际系统路径确认后,可在授权范围按本机支持的方式清 DNS 缓存:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
sudo dscacheutil -flushcache
|
|
46
|
+
# 本机系统版本确认支持且需刷新 mDNSResponder 缓存时才执行
|
|
47
|
+
sudo killall -HUP mDNSResponder
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
缓存操作本身没有“修复泄漏”的含义。不要重启网络服务、关闭 SIP 或清空 pf。DNS 回滚恢复原值;原先自动时可用该服务的 `networksetup -setdnsservers "$SERVICE" empty`,但这是恢复旧行为,不是隐私方案。还原后再次核对 `scutil --dns` 与实际应用。
|
|
51
|
+
|
|
52
|
+
IPv6 二选一:验证 TUN 对原生 IPv6 业务/DNS 传输的接管,或在用户明确选择后对相应网络服务禁用/阻断。不要仅根据 `dns.ipv6: false` 宣布系统 IPv6 已关闭;不要盲目把所有服务改成 off。保存 automatic/manual/link-local 等原状态,不能用统一 automatic 假装精准回滚。IPv6-only 网络或 IPv6 节点可能因此不可用,必须先检查。
|
|
53
|
+
|
|
54
|
+
## Windows / PowerShell
|
|
55
|
+
|
|
56
|
+
分别检查本机、WSL、容器与其他用户会话。WinHTTP、用户 Internet Settings、应用环境变量是不同层。
|
|
57
|
+
|
|
58
|
+
```powershell
|
|
59
|
+
$PSVersionTable
|
|
60
|
+
Get-NetIPConfiguration
|
|
61
|
+
Get-DnsClientServerAddress -AddressFamily IPv4
|
|
62
|
+
Get-DnsClientServerAddress -AddressFamily IPv6
|
|
63
|
+
Get-NetRoute -AddressFamily IPv6
|
|
64
|
+
netsh winhttp show proxy
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
记录确切 InterfaceIndex、GUID、自动/静态来源以及 IPv4/IPv6 原列表。`Get-DnsClientServerAddress` 的返回地址本身不总能证明原来是静态写入还是 DHCP;没有证明来源就不要自动改,因为届时无法精确还原。先读取现有网络配置/管理策略,受企业策略管理时停在报告。
|
|
68
|
+
|
|
69
|
+
已验证可达 DNS 服务后才对批准接口修改:
|
|
70
|
+
|
|
71
|
+
```powershell
|
|
72
|
+
# Index/IP 为已审阅的确切目标,不是扫描后第一个接口
|
|
73
|
+
Set-DnsClientServerAddress -InterfaceIndex $Index -ServerAddresses $VerifiedDnsIPs
|
|
74
|
+
# 原设置生效且本轮确需清缓存时,二选一即可
|
|
75
|
+
Clear-DnsClientCache
|
|
76
|
+
# 或 ipconfig /flushdns
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
不要误用 `netsh winhttp reset proxy` 或关闭防火墙来修复 DNS。系统 DoH 功能和企业策略依版本而异;不要把普通 DNS IP 字段当成系统已启用 DoH 的证明。网络探测用 `curl.exe`,避免 PowerShell 的 curl 别名。
|
|
80
|
+
|
|
81
|
+
回滚:原先明确 DHCP/自动才使用 `Set-DnsClientServerAddress -InterfaceIndex $Index -ResetServerAddresses`;静态则恢复准确原列表。多宿主解析、其他适配器、IPv6 DNS 和企业 VPN 都要验收,不能只改 IPv4 后就结束。
|
|
82
|
+
|
|
83
|
+
`strict-route` 在上游文档有 Windows 防多宿主 DNS 的作用,但也有兼容性警告。应以本机内核和实际防火墙/虚拟机工作流验证,不通用启用,不称为崩溃后仍生效的 kill switch。不建议为了 DNS 默认全系统禁用 IPv6;保护或阻断的范围由用户选择和现场能力决定。
|
|
84
|
+
|
|
85
|
+
## Linux
|
|
86
|
+
|
|
87
|
+
先确认发行版、init、网络管理器、用户会话及是否处于容器:
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
cat /etc/os-release
|
|
91
|
+
ip route
|
|
92
|
+
ip -6 route
|
|
93
|
+
readlink -f /etc/resolv.conf
|
|
94
|
+
# 下面只运行已安装且实际管理该机网络的工具
|
|
95
|
+
resolvectl status
|
|
96
|
+
nmcli -f NAME,UUID,TYPE,DEVICE connection show --active
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
systemd-resolved 的 stub(常见 127.0.0.53)、NetworkManager、resolvconf、dnsmasq、VPN 插件和容器 resolver 不是同一个配置文件。不要盲目覆写 `/etc/resolv.conf`,不要用 `chattr +i` 抢占管理权,更不要把 stub 的地址配置为 Mihomo 的上游而产生递归。
|
|
100
|
+
|
|
101
|
+
对 NetworkManager 使用确切 connection UUID 修改并备份该连接原 DNS/自动 DNS 设置;IPv4/IPv6 分别记录。不要为修改 DNS 停掉当前 SSH 依赖的连接。对 resolved 的 `resolvectl dns` 属于 link 范围运行时设置,可能被管理器覆盖;持久配置要在真正的管理层处理。无法确定管理层则只输出计划,不同时写多个层。
|
|
102
|
+
|
|
103
|
+
生效后可对 systemd-resolved 用 `resolvectl flush-caches`;它不存在不等于 DNS 失败,也不要装另一套 resolver。对其他服务使用其本机版本支持的缓存操作。不要关防火墙来让 TUN 生效;Linux 的 auto-redirect、路由表标记和其他 VPN 需一起审阅。
|
|
104
|
+
|
|
105
|
+
## 验收证据
|
|
106
|
+
|
|
107
|
+
对同一个批准的随机测试域名,记录系统解析调用、内核接收/上游连接、物理接口上的目的地/协议,以及业务请求。取证应限定时间/接口/测试目标,使用用户批准的抓包工具,避免采集其他业务正文;不默认上传 pcap。没有抓包权限或完整可见性就保留未验证,不以配置文件推断实际流量。
|
|
108
|
+
|
|
109
|
+
DNS 的 A/AAAA 是记录类型,DNS 的 IPv4/IPv6 是传输层:A 查询可走 IPv6,AAAA 查询可走 IPv4,二者要分别覆盖。还要检查应用硬编码 IP、DoH/DoT/DoQ、缓存和浏览器。localhost 登录回调、局域网打印/企业域不能因强制策略悄悄失效。
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# 来源台账与事实校正
|
|
2
|
+
|
|
3
|
+
仓库文档基线:`4edc8118bf2ccc4a892bded392123e965098a634`。该轮没有做通用网页或 X 搜索。2026-10-07 另读了 Mihomo v1.19.32 标签 `88dcbf7f1614a67c3b36b848ee3592dfa92ada36`、YAML 解析器和公开讨论,用来核对 DNS 覆写;下面的 blob 只代表当时读到的文件。部署以用户实际客户端和内核为准。二次转载里“国内域名走阿里、国外域名走 fallback”的写法不采用:回退列表默认会同时收到查询,国内解析器因此能看到域名。
|
|
4
|
+
|
|
5
|
+
## 已读取的直接依据
|
|
6
|
+
|
|
7
|
+
| 来源 | 路径与本轮 blob | 用于哪些结论 |
|
|
8
|
+
|---|---|---|
|
|
9
|
+
| [MetaCubeX DNS 文档](https://github.com/MetaCubeX/Meta-Docs/blob/main/docs/config/dns/index.md) | `a5d963ddd440387299b67c7f4ee39210e1ac4e99` | DNS 字段作用/优先级、respect-rules 的节点解析依赖、DNS 指定代理/接口、H3 警告 |
|
|
10
|
+
| [MetaCubeX TUN 文档](https://github.com/MetaCubeX/Meta-Docs/blob/main/docs/config/inbound/tun.md) | `115206e85663b0acaa0c0fe3072aefd669979d95` | UDP/TCP DNS 劫持、Mac/Windows LAN DNS 限制、strict-route 的平台差异与兼容风险 |
|
|
11
|
+
| [DNS 类型](https://github.com/MetaCubeX/Meta-Docs/blob/main/docs/config/dns/type.md) | `1af102b318922129708518570709284f5d1be5a4` | UDP/TCP/DoH/DoT/system/dhcp/rcode 类型,rcode://refused 为内核支持的类型 |
|
|
12
|
+
| [Mihomo v1.19.32 DNS 解析](https://github.com/MetaCubeX/mihomo/blob/v1.19.32/config/config.go) | `707114a337a2d3f865b687363ef264ac950d785b`;`parseNameServer` 约 1202–1308 行,`parseDNS` 约 1414–1471 行 | 片段里的代理名;只有 `nameserver`、`fallback`、`nameserver-policy` 使用 `respect-rules`;direct/default/proxy-server 三类固定不使用;default-nameserver 必须是纯 IP |
|
|
13
|
+
| [Mihomo v1.19.32 resolver](https://github.com/MetaCubeX/mihomo/blob/v1.19.32/dns/resolver.go) | `b8742f244cb8bde878eaaf18260ee58568eac222`;约 279–342 行 | 回退与主解析器并发;主答案未命中过滤器时仍可能已经发出回退查询 |
|
|
14
|
+
| [Mihomo v1.19.32 DNS dialer](https://github.com/MetaCubeX/mihomo/blob/v1.19.32/tunnel/dns_dialer.go) | `c409a298977cbdcd59fbb651c9570a4a54f825b4` | 代理名 `RULES` 走路由;其他名字先找代理,找不到就当网卡名;空代理名则直接拨号 |
|
|
15
|
+
| [Mihomo v1.19.32 executor](https://github.com/MetaCubeX/mihomo/blob/v1.19.32/hub/executor/executor.go) | `796face2f1b9eb498035ce8d2cf72e62ea5a0b0c`;约 289–298 行 | `direct-nameserver` 为空时,直连主机解析回落到主解析器 |
|
|
16
|
+
| [go.yaml.in/yaml/v3 scanner](https://github.com/yaml/go-yaml/blob/v3.0.5/scannerc.go) | `30b1f08920a0d9a9d56e4e2d078731dabfd17218`;约 2719–2734 行。Mihomo v1.19.32 的 `go.mod` 使用 v3.0.5 | plain scalar 只有当前字符是 `#` 时结束;中间没有空白的 `url#fragment` 会保留 |
|
|
17
|
+
| [curl SOCKS5 hostname](https://github.com/curl/curl/blob/master/docs/cmdline-opts/socks5-hostname.md) | `f8ee9fe13797572cf274eab07375bb38297df067` | socks5h/--socks5-hostname 让代理解析,不把所有 SOCKS 用法都当成本地解析 |
|
|
18
|
+
| 本仓库 AGENTS、Clash 主入口/脚本/模板/参考与测试 | 基线同上;主入口 blob `48495b1f16c4d00e2465c1cc41064e18a834702f` | 保留稳定名字、独立安装、只读/修改边界、实际缺口与回归行为 |
|
|
19
|
+
|
|
20
|
+
2026-10-07 的字段结论来自标签 v1.19.32,不是建议改用别的内核,也不是所有客户端版本都已验证。`config.go` 的 blob 与早先记录的 Alpha 文件相同。格式仍要用实际内核检查;本轮没有在沙箱里启动 Mihomo,也没有改用户的活动配置。
|
|
21
|
+
|
|
22
|
+
## 用户提供资料:采用目标,修正绝对化说法
|
|
23
|
+
|
|
24
|
+
| 原说法/建议 | 本技能采用的精确边界 |
|
|
25
|
+
|---|---|
|
|
26
|
+
| 开代理后只用代理提供 DNS | 保留“不用未经批准的本地解析”目标;代理商未提供 DNS 时不虚构地址。resolver 身份与连接是否走代理分别验收 |
|
|
27
|
+
| 关浏览器安全 DNS 就能避免泄漏 | 集中解析方案要先证明系统已接管,再关获准 Profile 的 DoH;走代理的获准 DoH 不必关闭 |
|
|
28
|
+
| Mac 删除手填 DNS 即自动接管 | 可能恢复 DHCP resolver;要读 scoped resolver 与实际路由 |
|
|
29
|
+
| flushdns/flushcache 修复泄漏 | 只清旧答案,不改变 resolver 或隧道路由 |
|
|
30
|
+
| DNS 劫持或 fake-ip 可以接管所有查询 | fake-ip 是映射;53 劫持不覆盖所有 LAN DNS/DoH/DoT/DoQ;要看系统和应用路径 |
|
|
31
|
+
| HTTP/SOCKS 只转 TCP,必先本地解析 | HTTP CONNECT 可携带域名,SOCKS5 也有远端解析与 UDP 能力;取决于客户端/代理支持与用法 |
|
|
32
|
+
| AAAA 泄漏等于 IPv6 DNS 传输 | DNS 记录类型与传输地址族独立,分别测试 |
|
|
33
|
+
| DoH 隐私最高、很难封 | 加密保护到 resolver 的内容,不隐藏所有连接元数据、不保证可达或经过代理 |
|
|
34
|
+
| DNS 显示节点所在国家就是成功 | 检测的是递归解析出口;anycast、转发链和地理库会影响显示,国家不能证明路径 |
|
|
35
|
+
| 检测站出现运营商 DNS,就改回国内解析器 | 这只说明有查询没走批准 resolver。国内解析器、`system` 和回退列表会看到域名,不能用来掩盖同网段路由器或浏览器 DoH 的旁路 |
|
|
36
|
+
| WebRTC 总会暴露真实 IP | 取决于 ICE candidate、浏览器策略、UDP/TUN、STUN/TURN 等;分别验收,不把私有地址直接判作公网泄漏 |
|
|
37
|
+
|
|
38
|
+
这些校正用于防止误配置,不是评判用户引用页面的整体质量。没有读取其完整实现、当前菜单或隐私说明,不宣称验证了该站检测精度。
|
|
39
|
+
|
|
40
|
+
## 标准背景与仍需现场/外部核对
|
|
41
|
+
|
|
42
|
+
[DNS 消息格式 RFC 1035](https://www.rfc-editor.org/rfc/rfc1035) 与 [DoH wire-format RFC 8484](https://www.rfc-editor.org/rfc/rfc8484) 是协议背景;本轮未通过通用网页重新抓取。脚本只实现受限 A/AAAA 探针,不是完整 resolver,不做 DNSSEC 认证。
|
|
43
|
+
|
|
44
|
+
Clash Verge Rev/FlClash 的具体安装版本、GUI 的 map/数组合并语义、浏览器当前设置/扩展、系统 DNS 管理策略、DNS 服务商端点可用性/证书/隐私政策、Claude Code 当前网络与地区资格,都需现场或可用的正式资料继续核对。本轮未拿静态域名基线冒充官方完整 allowlist,也未按节点名称证明出口国家。
|
|
45
|
+
|
|
46
|
+
早先默认分支 Mihomo README 返回同名游戏数据内容,作为无关来源排除;随后读取内核实现和 Meta-Docs DNS/TUN 正文。2026-10-07 用 v1.19.32 核对了回退并发、`respect-rules` 的适用范围和 YAML 片段。一次 Mozilla policy 文档片段不涉及 DNS,未用来支持浏览器设置结论;DNS 目录旁的不存在路径与默认分支搜索空结果也不是证据。
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# 规则模式、Claude Code、DNS/IPv6 与 crash 排查
|
|
2
|
+
|
|
3
|
+
## 先明确证据
|
|
4
|
+
|
|
5
|
+
“客户端已开启”“节点叫美国”“公网 echo 返回美国 IP”“时区在纽约”均不能单独证明 Claude Code 的请求经过预期路径。浏览器登录、CLI API、插件、MCP、更新器可能由不同进程、网络命名空间或主机发出。Cloud/SSH/WSL/Container 内的 localhost 不是 Mac 宿主。
|
|
6
|
+
|
|
7
|
+
为一次失败记录时间、运行主机、客户端/内核/CLI 版本、脱敏错误、目标域名、匹配规则、策略链和最终叶子。不要收集 API key、OAuth URL、订阅、Cookies、完整进程参数或其他用户连接。401/403、超时和区域错误并非同一种失败。
|
|
8
|
+
|
|
9
|
+
## 分层检查与处置
|
|
10
|
+
|
|
11
|
+
| 层 | 观察方法 | 失败/未知时的最小动作 |
|
|
12
|
+
|---|---|---|
|
|
13
|
+
| 应用入口 | 同一主机/同一会话启动 CLI,核对代理变量和 NO_PROXY;浏览器单独检查 | 保留原变量,只给目标子进程临时设置;不写全局 shell profile |
|
|
14
|
+
| 代理监听 | 核对当前客户端实际 HTTP/mixed/SOCKS 端口及监听进程 | 不猜 7890;失败停止,不清代理环境后直连重试 |
|
|
15
|
+
| 规则与策略组 | Rule 模式下观察目标连接、第一条命中规则、逐层策略组和叶子 | 修正已证实的优先级冲突或 DIRECT 选择;节点切换须在授权内 |
|
|
16
|
+
| TUN | 路由、虚拟接口、进程所在命名空间、实际连接 | 开关 true 不算接管;保留原系统代理,先验证再迁移 |
|
|
17
|
+
| DNS | 区分应用解析、系统 resolver、内核 resolver、代理节点 bootstrap、浏览器 DoH | fake-ip 和加密 DoH 都不是防泄漏证明;不直接替换系统 DNS |
|
|
18
|
+
| IPv6 | 区分本机原生 IPv6 路径与代理出口 IPv6;分别观察路由和目标请求 | dns.ipv6=false 不会禁用系统 IPv6;选择已验证的隧道路由或经授权的系统级阻断 |
|
|
19
|
+
| 崩溃/切网 | 在明确许可的测试窗口模拟客户端退出、重连、睡眠唤醒 | 检查保护的流量是阻断还是直连;TUN 本身不是 kill switch |
|
|
20
|
+
| 服务侧 | 已证明目标流量走正确叶子,但仍地区拒绝 | 核对服务地区/账号资格、出口 IP 地理数据库和信誉,联系服务方;不改系统区域伪装修复 |
|
|
21
|
+
|
|
22
|
+
规则按运行时实际顺序判断;DOMAIN-KEYWORD 会匹配含相同字符串的无关域名。不要用 `*claude*` 或全局 node/python 代理来替代观察。内核通常看到真正的可执行进程,不保证看到 npm 包脚本路径。TLS SNI、QUIC、ECH、代理链或版本差异可能限制域名/进程可见性;未知要报告,不假造规则命中。
|
|
23
|
+
|
|
24
|
+
## macOS
|
|
25
|
+
|
|
26
|
+
先只读 `sw_vers`、`uname -m`、`scutil --proxy`、`scutil --dns`、`route -n get default`、`netstat -rn -f inet6`。`networksetup -listallnetworkservices` 可列网络服务;不要假定服务叫 Wi-Fi。注意输出包含内部域名与网络地址,分享前脱敏。GUI 的系统代理不代表所有 CLI 库都读取它。
|
|
27
|
+
|
|
28
|
+
Python 3 可用后,在技能目录运行默认离线检查。需要外部探测时,用界面核实的实际端口:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
python3 "$SKILL_DIR/scripts/proxy_doctor.py" --network --proxy http://127.0.0.1:7890
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
排除终端代理变量干扰时,只在目标子进程范围内设置。下面的端口只是示例;先检查实际 Claude Code 版本的代理支持,不把 HTTP 代理配置强加给只支持其他方式的版本:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
HTTP_PROXY=http://127.0.0.1:7890 HTTPS_PROXY=http://127.0.0.1:7890 http_proxy=http://127.0.0.1:7890 https_proxy=http://127.0.0.1:7890 ALL_PROXY= all_proxy= NO_PROXY=localhost,127.0.0.1,::1 no_proxy=localhost,127.0.0.1,::1 claude
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
这只约束遵守这些变量的客户端;不能保证工具子进程、MCP 或浏览器使用同一路径。不要自动 `launchctl setenv`、修改 `.zshrc`、关 SIP、重写 pf 或卸载其他 VPN。仅设置显式代理也不是整机 kill switch。
|
|
41
|
+
|
|
42
|
+
## Windows / PowerShell
|
|
43
|
+
|
|
44
|
+
用 `$PSVersionTable`、`Get-NetIPConfiguration`、`Get-NetRoute -AddressFamily IPv6`、`Get-DnsClientServerAddress`、`netsh winhttp show proxy` 只读检查;用户互联网代理、WinHTTP、环境变量和 WSL 网络层各自独立。Windows PowerShell 的 `curl` 可能是别名,网络例子使用 `curl.exe`;本脚本也显式查找 curl.exe。
|
|
45
|
+
|
|
46
|
+
```powershell
|
|
47
|
+
& python "$SKILL_DIR\scripts\proxy_doctor.py"
|
|
48
|
+
& python "$SKILL_DIR\scripts\proxy_doctor.py" --network --proxy http://127.0.0.1:7890
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
若只有 Python Launcher,先验证 `py -3 --version` 并替换命令。临时修改进程环境前保存“变量是否存在”及原值,用 try/finally 恢复;不要使用 setx 持久化代理。可在独立 PowerShell 会话配置目标程序,关闭会话恢复原环境。不要为诊断重置 WinHTTP、停防火墙或改注册表全局代理。
|
|
52
|
+
|
|
53
|
+
WSL 的 NAT、镜像网络及 Windows 代理可达性依版本而异;不假定 WSL 的 127.0.0.1 就是 Windows 服务。只有发现实际地址后才决定目标。跨主机代理地址不在脚本自动探测范围内,应使用相应主机的实例或经审查的手动检查。
|
|
54
|
+
|
|
55
|
+
## Linux / 容器 / 远程
|
|
56
|
+
|
|
57
|
+
读 `/etc/os-release`、`ip route`、`ip -6 route`。有 systemd-resolved 时用 `resolvectl status`;否则查看实际 resolver 管理方式,不能只看 `/etc/resolv.conf` 就判断全部 DNS。检查 systemd 用户服务、图形桌面与 shell 是否继承相同代理环境;不要把 shell 导出当成所有服务生效。
|
|
58
|
+
|
|
59
|
+
容器与远程 Agent 运行在其自身网络上下文。不要修改宿主路由来掩盖容器没有代理。诊断脚本只接受 numeric loopback,避免把 controller secret 发送到远程地址;其他拓扑保持未验证,不自动开放 0.0.0.0。
|
|
60
|
+
|
|
61
|
+
## DNS、IPv6 与独立验收
|
|
62
|
+
|
|
63
|
+
新增的 [DNS 工作流](dns-workflow.md)、[系统 DNS](platform-dns.md)、[浏览器隐私](browser-privacy.md) 和 [事务验收](acceptance.md) 提供本轮具体流程。优先区分节点 bootstrap 与业务解析;真实 DNS wire probe 不等于系统劫持已验证。
|
|
64
|
+
|
|
65
|
+
显式 HTTP CONNECT / socks5h echo 探测只测试该请求路径。脚本不在 IPv4 loopback HTTP 代理前加 `curl -6`,因为那会限制连接代理的地址族;它使用 IPv6-only echo 主机测试代理远端 IPv6 能力。探测失败表示不可用/未知,不代表泄漏;探测成功也不代表本机原生 IPv6 已被接管。
|
|
66
|
+
|
|
67
|
+
`respect-rules`、resolver 选择、代理节点域名解析与 bootstrap 必须配合当前内核验证。国外 DoH 可以仍经直连;53 端口劫持不涵盖所有 DoH/DoT/浏览器解析。规则模式下直连目标查真实地址失败时,按 [DNS 工作流](dns-workflow.md) 第 6 节检查业务上游有没有 `#保护组`,以及钉住之后的真实交换有没有回包。`198.18.0.0/15` fake-ip 不是公网出口,不能做地理定位。不要通过随意添加全局 DNS 规则制造代理启动循环。
|
|
68
|
+
|
|
69
|
+
更严格的防直连需要系统级、经过测试的网络隔离策略;设计时保留代理服务器访问、DNS bootstrap、DHCP、局域网管理、远程救援和回滚。规则模式本来允许一部分 DIRECT,因此先定义受保护的应用/目标范围。没有明确授权不切防火墙规则,不做可能中断远程管理的 crash 测试。
|
|
70
|
+
|
|
71
|
+
## 回归矩阵与报告
|
|
72
|
+
|
|
73
|
+
| 场景 | 最低可接受证据 |
|
|
74
|
+
|---|---|
|
|
75
|
+
| CLI 与浏览器登录 | 各自真实请求时间与匹配规则/最终叶子;登录回调中的 localhost 不被代理破坏 |
|
|
76
|
+
| 订阅刷新、组切换 | 目标规则仍在、最终叶子非 DIRECT,旧连接与新连接明确区分 |
|
|
77
|
+
| 节点故障/客户端退出 | 受保护流量按设计阻断,不悄悄改为直连;未实测写未验证 |
|
|
78
|
+
| IPv4 / IPv6 / DNS | 三项分别记录;不以一个 echo 请求代替 |
|
|
79
|
+
| 睡眠唤醒、Wi-Fi/有线切换 | 切换后重做目标连接检查;没有设备访问则留待现场 |
|
|
80
|
+
| 回滚 | 原配置与原代理路径恢复、未覆盖用户并发修改 |
|
|
81
|
+
|
|
82
|
+
最终表列出配置写入、运行时加载、目标规则链、echo、真实应用、DNS、IPv6、crash 隔离。没有完成的验证不能写 PASS;退出码 0 也不是安全认证。只提交脱敏摘要,不将 controller 原始快照提交 Git。
|