logo
0
0
WeChat Login

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

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

About

ACME DNS 挑战验证专用服务器

Language
Go100%