Skip to content

一个高性能的Go语言实现的DNS缓存服务器,支持自定义记录和上游DNS查询。

Notifications You must be signed in to change notification settings

ganshenmail/dnscache

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DNS缓存服务器

一个高性能的Go语言实现的DNS缓存服务器,支持自定义记录和上游DNS查询。

功能特性

  • 支持UDP和TCP协议(可配置)
  • 本地DNS记录缓存,减少重复查询
  • 支持自定义DNS记录(包括通配符记录)
  • 多上游DNS服务器支持,自动健康检查
  • 查询统计和缓存命中率监控
  • 可配置缓存大小和TTL

安装

  1. 确保已安装Go 1.16+环境
  2. 克隆项目或下载源码
  3. 安装依赖:
    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

自定义记录配置

支持以下记录类型:

  1. A记录 - IPv4地址

    "example.com": {
        "A": "192.168.1.1"
    }
  2. AAAA记录 - IPv6地址

    "example.com": {
        "AAAA": "2001:db8::1"
    }
  3. CNAME记录 - 别名

    "www.example.com": {
        "CNAME": "example.com"
    }
  4. 通配符记录 - 匹配子域名

    "*.example.com": {
        "A": "192.168.1.2"
    }

统计信息

服务器运行时会记录以下统计信息(在关闭时显示):

  • 运行时间
  • 总查询次数
  • 缓存命中次数
  • 缓存命中率
  • 当前缓存大小/最大缓存大小
  • 自定义记录数量

示例输出:

[S] 统计信息 - 运行时间: 5m30s, 查询: 120, 缓存命中: 85, 命中率: 70.83%, 缓存大小: 45/1000, 自定义记录: 2

注意事项

  1. 监听53端口需要管理员权限
  2. 修改配置文件后需要重启服务
  3. 自定义记录的TTL固定为600秒
  4. 上游DNS服务器应选择可靠的公共DNS

About

一个高性能的Go语言实现的DNS缓存服务器,支持自定义记录和上游DNS查询。

Topics

Resources

Stars

Watchers

Forks

Languages