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

48 lines
2.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 问题分析
1. **问题现象**规则更新后规则没有生效。用户添加或删除规则后DNS服务器仍然使用旧的规则进行域名屏蔽。
2. **问题根源**
-`addDomainRule`方法中,当添加一个域名规则时,它会为该域名的所有子域名也添加规则。例如,添加`example.com`规则时,会同时添加`example.com``com`规则。
- 但是,在`RemoveRule`方法中,当删除一个域名规则时,它只删除了指定的域名规则,而没有删除为子域名添加的规则。
- 这导致即使删除了主规则,子域名规则仍然存在,因此规则仍然生效。
3. **具体问题**
- 当添加`||test.example.com`规则时,`addDomainRule`方法会添加`test.example.com``example.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服务器使用最新的规则进行域名屏蔽
- 本地规则文件被正确更新,添加和删除的规则都能正确反映在文件中