logo
0
0
Login
feat: 功能初步实现

ACME Challenge Validation DNS Server

本项目是一个用于 Let’s Encrypt DNS-01 验证的专用 DNS 服务器,支持通过 API 和 Web 管理 TXT/CNAME 记录,适合自动化证书申请场景。

功能特性

  • 支持 TXT/CNAME 记录的增删查,新增同类型记录自动覆盖
  • 记录存储于内存,TTL=1,最长保留3小时,自动清理
  • 支持 API Key 管理,所有操作需认证
  • 提供 Web 管理界面(需登录)
  • DNS 服务器仅支持 UDP,未命中记录不响应(超时)
  • 查询日志写入文件,包含 QUERY、TYPE、VALUE
  • 配置项集中于 config/config.json
  • 技术栈:Go + Gin + miekg/dns

快速启动

  1. 安装依赖
    go mod tidy
  2. 配置 config/config.json
    { "api_key": "your-api-key", "dns_port": ":53", "web_port": ":8080", "log_file": "dns_query.log", "record_ttl": 1, "record_max_age": 10800 }
  3. 启动服务
    go run .

API 管理

  • 新增/覆盖记录
    POST /api/record Header: X-API-KEY: your-api-key Body: {"domain":"_acme-challenge.example.com","type":"TXT","value":"xxxx"}
  • 查询记录
    GET /api/record/:domain/:type Header: X-API-KEY: your-api-key
  • 删除记录
    DELETE /api/record/:domain/:type Header: X-API-KEY: your-api-key
  • 列表所有记录
    GET /api/records Header: X-API-KEY: your-api-key

Web 管理

  • 访问 http://localhost:8080/login,输入 API Key 登录
  • 登录后可增删查所有 DNS 记录

DNS 查询

  • 仅支持 TXT/CNAME 查询,未命中则不响应
  • 推荐使用 dig 工具测试:
    dig @127.0.0.1 _acme-challenge.example.com TXT

日志

  • 所有 DNS 查询写入 dns_query.log,格式:
    2025-11-08T10:02:17+08:00 QUERY: _acme-challenge.example.com. TYPE: TXT VALUE: xxxx

目录结构

├── cmd/ # 主程序入口(可选) ├── config/ # 配置文件 ├── internal/ │ ├── api/ # API 控制器 │ ├── dns/ # DNS 服务器 │ ├── logger/ # 日志模块 │ ├── store/ # 内存存储 │ └── web/ # Web 管理 ├── main.go # 启动入口 ├── go.mod

如有问题或建议欢迎反馈!