# 🧠 DNS-over-TLS Cache Proxy 一个基于 Go 的高性能 **DNS-over-TLS (DoT)** 缓存代理服务器。 支持多上游并发解析、智能缓存、隐私保护与优雅关闭。 轻量、无依赖、可直接部署。 ## ✨ 特性 - 🔒 **加密传输** — 完全支持 DNS-over-TLS (RFC 7858) - ⚡ **多上游并发查询** — 类似“快乐眼球”机制,提升解析速度 - 🧠 **TTL 智能缓存** — 支持正向与负面缓存(RFC 2308) - 🧹 **自动清理** — 定期清除过期缓存 - 🧩 **隐私保护** — 默认剥离 ECS (EDNS Client Subnet) - 🪶 **轻量高效** — 单文件可执行,零外部依赖 ## 📦 安装 ### 🧰 源码构建 ```bash git clone https://git.aixiao.me/aixiao/dot.git cd dot go build -o dot main.go ``` ### 🐳 Docker 构建 ```bash #构建、启动 bash build.sh build bash build.sh run #清理 bash build.sh stop bash build.sh clean ``` ## 🚀 启动服务 ```bash ./dot \ -cert=server.crt \ -key=server.key \ -addr=":853" \ -upstream="8.8.8.8:53,1.1.1.1:53" \ -cache-ttl=120s \ -timeout=3s \ -max-parallel=2 \ -strip-ecs=true \ -tcp-fallback=true \ -v ``` 输出示例: ``` 🚀 starting DNS-over-TLS on :853 [req] A www.example.com. (id=40192 cd=false do=true from=127.0.0.1:58877) [cache] MISS A www.example.com. [answer] www.example.com. 300 IN A 93.184.216.34 ``` ## 🧩 配置参数 | 参数 | 默认值 | 说明 | |------|---------|------| | `--addr` | `:853` | 监听地址 | | `--cert` | `server.crt` | TLS 证书路径 | | `--key` | `server.key` | TLS 私钥路径 | | `--upstream` | `8.8.8.8:53,1.1.1.1:53` | 上游 DNS 服务器 | | `--cache-ttl` | `60s` | 最大缓存 TTL | | `--timeout` | `3s` | 上游查询超时 | | `--max-parallel` | `3` | 并发上游查询数 | | `--strip-ecs` | `true` | 是否剥离 ECS 信息 | | `--tcp-fallback` | `true` | 是否启用 TCP 回退 | | `--v` | `false` | 详细日志模式 | ## 🧪 测试解析 使用 `kdig` 或 `dig` 进行测试: ```bash kdig @127.0.0.1 +tls-ca +tls-host=dot.local www.example.com ``` ## 📊 缓存机制 - **缓存键**:`domain|type|class|DO|CD` - **正向缓存**:取最小 TTL 与配置上限的较小值 - **负面缓存**:依据 SOA.MINIMUM(RFC 2308) - **动态 TTL 续算**:返回时根据剩余时间更新 TTL - **清理周期**:每 5 分钟清除过期项 ## 🔐 安全特性 - 默认支持 **TLS 1.2 / 1.3** - 剥离 **EDNS Client Subnet** - 不缓存 OPT/TSIG 伪记录 - 独立缓存空间隔离 DO/CD 查询 ## 🧭 路线图 - [ ] 支持 DoH (DNS-over-HTTPS) - [ ] LRU 缓存上限控制 - [ ] 增加配置文件支持 (YAML/JSON) - [ ] 集成 Docker Compose & CI/CD ## 👨‍💻 作者信息 **Email:** aixiao@aixiao.me **License:** MIT **Language:** Go 1.22+ **Dependency:** [github.com/miekg/dns](https://github.com/miekg/dns)