一个高性能的Go语言实现的DNS缓存服务器,支持自定义记录和上游DNS查询。
- 支持UDP和TCP协议(可配置)
- 本地DNS记录缓存,减少重复查询
- 支持自定义DNS记录(包括通配符记录)
- 多上游DNS服务器支持,自动健康检查
- 查询统计和缓存命中率监控
- 可配置缓存大小和TTL
- 确保已安装Go 1.16+环境
- 克隆项目或下载源码
- 安装依赖:
go mod download
编辑dnscache.json
文件进行配置:
{
"listen": "127.0.0.1", // 监听地址
"port": 53, // 监听端口
"upstream": [ // 上游DNS服务器列表
"8.8.8.8:53",
"1.1.1.1:53"
],
"log_queries": false, // 是否记录查询日志
"tcp_enabled": true, // 是否启用TCP协议
"max_cache_size": 1000, // 最大缓存记录数
"default_ttl": 3600, // 默认缓存时间(秒)
"cleanup_interval": 300, // 清理过期缓存的间隔(秒)
"custom_records": { // 自定义DNS记录
"baidu.com": { // 精确匹配记录
"A": "192.168.1.100" // A记录
},
"*.test.com": { // 通配符记录
"A": "192.168.1.200"
}
}
}
编译并运行:
go build -o dnscache main.go
sudo ./dnscache # 需要管理员权限监听53端口
或直接运行:
go run main.go
支持以下记录类型:
-
A记录 - IPv4地址
"example.com": { "A": "192.168.1.1" }
-
AAAA记录 - IPv6地址
"example.com": { "AAAA": "2001:db8::1" }
-
CNAME记录 - 别名
"www.example.com": { "CNAME": "example.com" }
-
通配符记录 - 匹配子域名
"*.example.com": { "A": "192.168.1.2" }
服务器运行时会记录以下统计信息(在关闭时显示):
- 运行时间
- 总查询次数
- 缓存命中次数
- 缓存命中率
- 当前缓存大小/最大缓存大小
- 自定义记录数量
示例输出:
[S] 统计信息 - 运行时间: 5m30s, 查询: 120, 缓存命中: 85, 命中率: 70.83%, 缓存大小: 45/1000, 自定义记录: 2
- 监听53端口需要管理员权限
- 修改配置文件后需要重启服务
- 自定义记录的TTL固定为600秒
- 上游DNS服务器应选择可靠的公共DNS