Files
dns-server/.trae/documents/plan_20251215_073614.md
2025-12-19 12:44:57 +08:00

1.6 KiB
Raw Blame History

问题分析

规则处理存在问题:||domain 规则应该是屏蔽一个绝对域名及其子域名,而不是正则匹配屏蔽,也不应该屏蔽所有包含该顶级域名的网站。

问题根源

manager.go 文件中,addDomainRule 函数第444行存在逻辑错误

  1. 当添加 ||example.com 规则时,函数正确地将 example.com 添加到域名规则列表中
  2. 但随后,函数错误地将域名拆分为各个部分,并为每个部分添加规则
  3. 例如,对于 ||example.com,它会添加 example.comcom 到规则列表中
  4. 这导致所有 .com 域名都被屏蔽,而不仅仅是 example.com 及其子域名

修复方案

修改 addDomainRule 函数,移除错误的子域名处理逻辑。因为 CheckDomainBlockDetails 函数已经实现了正确的子域名检查逻辑:它会检查域名的所有子域名部分,从最长到最短,所以不需要在添加规则时就将所有子域名都添加到规则列表中。

修复步骤

  1. 修改 manager.go 文件中的 addDomainRule 函数
  2. 移除第457-474行和第487-503行的子域名处理逻辑
  3. 确保只添加精确的域名到规则列表中
  4. 保持 CheckDomainBlockDetails 函数的子域名检查逻辑不变

预期效果

修复后,||example.com 规则将只屏蔽:

  • example.com
  • www.example.com
  • subdomain.example.com

而不会屏蔽:

  • anotherexample.com
  • google.com
  • 其他所有 .com 域名

这符合 AdGuard Home 规则的标准行为,即 ||example.com^ 匹配该域名及其所有子域名。