自建 DNSLog 平台,用于安全测试中检测 DNS 请求回连。支持 DNS 查询记录、HTTP API 查询,开箱即用。
- DNS 请求监听与记录(A 记录)
- HTTP API 查询接口(Gin 框架)
- SQLite 本地存储,无需额外数据库依赖
- 支持 Docker 一键部署
- 优雅关闭,自动资源回收
# 可选:设置国内 Go 代理
export GOPROXY=https://proxy.golang.com.cn,direct
go build
./dnslogger因使用了 go-sqlite3(CGO),编译遇问题请参考 go-sqlite3 文档。
# 先编译好二进制文件,然后:
docker-compose up -d假设你的域名为 dnslogger.local,服务器 IP 为 1.1.1.1,接收子域为 *.log.dnslogger.local:
| 步骤 | 记录类型 | 主机记录 | 记录值 |
|---|---|---|---|
| 1 | NS | log |
ns.dnslogger.local. |
| 2 | A | ns |
1.1.1.1 |
配置完成后,在服务器上启动 DNSLogger 即可。
首次运行会自动从 config.default.ini 生成 config.ini:
[config]
db_file = dnslog.db # SQLite 数据库文件路径
return_ip = 127.0.0.1 # DNS 响应返回的 IP 地址
listen_dns = 0.0.0.0:53 # DNS 监听地址
listen_http = 0.0.0.0:2020 # HTTP API 监听地址
domain = log.dnslogger.local # 接收 DNS 请求的子域GET /api/latest
返回最近 10 条 DNS 请求记录。
响应示例:
{
"data": [
{
"Id": 1,
"Domain": "test.log.dnslogger.local.",
"Type": "A",
"Resp": "1.1.1.1",
"Src": "192.168.1.100:12345",
"Created": "2026-05-10T12:00:00Z"
}
]
}POST /api/validate
Content-Type: application/json
{"domain": "test.log.dnslogger.local"}
查询最近 5 分钟内是否有指定域名的 DNS 请求,常用于漏洞验证场景。
响应: 存在记录返回 200 + 记录详情,无记录返回 204。
# 发送 DNS 请求
dig test.log.dnslogger.local @1.1.1.1
# 查询最新记录
curl http://localhost:2020/api/latest
# 验证域名请求(5分钟内)
curl -X POST http://localhost:2020/api/validate \
-H "Content-Type: application/json" \
-d '{"domain":"test.log.dnslogger.local"}'Ubuntu 默认的 systemd-resolved 服务占用了 53 端口,需要先关闭:
sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved
echo "nameserver 223.5.5.5" | sudo tee /etc/resolv.conf53 是特权端口,建议使用 sudo 运行,或通过 Docker 部署规避权限问题。
