Files
dns-server/.trae/documents/修复规则更新后没有生效的问题.md
2025-11-28 18:52:22 +08:00

2.5 KiB
Raw Blame History

问题分析

  1. 问题现象规则更新后规则没有生效。用户添加或删除规则后DNS服务器仍然使用旧的规则进行域名屏蔽。

  2. 问题根源

    • addDomainRule方法中,当添加一个域名规则时,它会为该域名的所有子域名也添加规则。例如,添加example.com规则时,会同时添加example.comcom规则。
    • 但是,在RemoveRule方法中,当删除一个域名规则时,它只删除了指定的域名规则,而没有删除为子域名添加的规则。
    • 这导致即使删除了主规则,子域名规则仍然存在,因此规则仍然生效。
  3. 具体问题

    • 当添加||test.example.com规则时,addDomainRule方法会添加test.example.comexample.com两个规则。
    • 当删除||test.example.com^规则时,RemoveRule方法只会删除test.example.com规则,而不会删除example.com规则,因此example.com仍然会被屏蔽。
    • 此外,RemoveRule方法在处理通配符和URL匹配规则时也没有正确处理子域名规则的删除。

修复方案

  1. 修复RemoveRule方法

    • 当删除一个域名规则时,同时删除为该域名的所有子域名添加的规则。
    • 确保删除规则时,同时更新所有相关映射,包括主规则和子域名规则。
  2. 验证修复效果

    • 启动DNS服务器
    • 添加一条域名规则,例如||test.example.com
    • 验证该规则及其子域名规则都被正确添加
    • 删除该规则
    • 验证该规则及其所有子域名规则都被正确删除
    • 验证DNS服务器不再使用该规则进行域名屏蔽

实现步骤

  1. 修改shield/manager.go文件中的RemoveRule方法:

    • 在删除域名规则时,添加删除所有相关子域名规则的逻辑
    • 确保删除规则时,同时更新所有相关映射
  2. 测试修复后的功能:

    • 启动DNS服务器
    • 访问Web界面添加一条本地规则例如||test.example.com
    • 验证该规则被正确添加
    • 点击删除按钮删除该规则
    • 验证该规则及其所有子域名规则都被正确删除
    • 验证DNS服务器不再使用该规则进行域名屏蔽

预期结果

  • 用户添加规则后,规则立即生效
  • 用户删除规则后,规则立即失效
  • 规则更新后DNS服务器使用最新的规则进行域名屏蔽
  • 本地规则文件被正确更新,添加和删除的规则都能正确反映在文件中