aixiao f5bf77927d feat(blacklist): 实现基于Trie树的高性能黑名单匹配系统
重构黑名单匹配算法,采用Trie前缀树数据结构替换原有的后缀匹配,
将百万级域名匹配复杂度从O(n)降至O(L),显著提升性能。

同时优化黑名单文件加载机制,支持hosts格式和通配符匹配,
并实现文件修改自动重载功能,提升系统的灵活性和实用性。

refactor: 重构README文档结构和内容展示

更新项目介绍文档,优化整体布局结构,添加项目徽章标识,
精简功能特性描述,改进快速开始指南,提供更清晰的使用说明。

chore(deps): 更新项目依赖库至最新版本

升级github.com/miekg/dns至v1.1.72版本,
更新golang.org/x/net至v0.52.0版本,
升级golang.org/x/sync至v0.20.0版本,
以及其他相关依赖库的版本更新。
2026-03-20 14:39:29 +08:00

🚀 Go-DoT: 高性能 DNS-over-TLS 缓存代理

Go Version License Security

Go-DoT 是一个用 Go 语言编写的生产级 DNS-over-TLS (DoT) 缓存代理服务器,专注于隐私保护、极致性能与高可用性


特性概览

功能 描述
🔒 加密传输 支持 RFC 7858默认强制 TLS 1.3
高效匹配 基于 Trie前缀树实现百万级黑名单匹配复杂度 O(L)
🧠 请求合并 使用 Singleflight 防止缓存击穿
🚀 并发查询 并行请求上游 DNS返回最快响应
📦 智能缓存 支持正向缓存 + NXDOMAIN 负缓存LRU
🧹 优雅退出 支持 SIGTERM 信号
🧩 隐私保护 默认移除 ECSEDNS Client Subnet

🏗️ 快速开始

1. 编译构建

需要 Go 1.22 或更高版本:

git clone https://git.aixiao.me/aixiao/dot.git
cd dot
go mod tidy
go build -ldflags="-s -w -X 'main.BuildDate=$(date)'" -o dot

2. 生成 TLS 证书(测试用)

openssl req -x509 -newkey rsa:4096 -keyout server.key -out server.crt -days 365 -nodes -subj "/CN=dot.local"

3. 启动服务

./dot \
    -cert aixiao.me.cer \
    -key aixiao.me.key \
    -addr :853 \
    -upstream 119.29.29.29:53,223.5.5.5:53,114.114.114.114:53 \
    -blacklist-file blacklist.txt \
    -v 

⚙️ 参数说明

参数 默认值 描述
-addr :853 DoT 监听地址
-cert server.crt TLS 证书路径
-key server.key TLS 私钥路径
-upstream 8.8.8.8:53,1.1.1.1:53 上游 DNS
-blacklist-file 黑名单文件路径
-blacklist-rcode REFUSED 命中黑名单返回码REFUSED / NXDOMAIN / SERVFAIL
-v false 启用详细日志模式

🧱 黑名单功能

支持 hosts + 通配符格式:

# 注释
ad.doubleclick.net
*.tracking.com
127.0.0.1 malicious-site.io

命中后直接返回指定 RCODE并附带 EDE 说明。


🔍 缓存机制

  • 缓存键: Type|DO|CD|ECS|Domain 组合键,确保不同请求策略的结果物理隔离。

  • TTL 策略:

    • 正向缓存: 取记录中最小 TTL 与配置上限的较小值。
    • 🚫 负面缓存: 遵循 RFC 2308自动计算 SOA 的最小 TTL 进行缓存。

🧩 工作流程

flowchart TD
  A[客户端请求] --> B{黑名单匹配}
  B -- 命中 --> C[返回拦截]
  B -- 未命中 --> D{缓存命中}
  D -- 命中 --> E[返回缓存]
  D -- 未命中 --> F[Singleflight]
  F --> G[并发查询上游]
  G --> H[写入缓存]
  H --> I[返回结果]

🛡️ 生产建议

  • 提高文件描述符限制ulimit -n 65535
  • 使用合法 CA 证书Android/iOS 必须)
  • 关闭 -v 日志提升性能
  • 配置 ≥3 个上游 DNS

👨‍💻 作者

Description
No description provided
Readme 48 MiB
Languages
Go 75.5%
Shell 18.3%
Dockerfile 6.2%