coredns/coredns
GitHub: coredns/coredns
一款用 Go 编写的、基于插件链架构的灵活 DNS 服务器,广泛应用于云原生环境中的服务发现与 DNS 管理。
Stars: 14007 | Forks: 2433
[](https://coredns.io)
[](https://godoc.org/github.com/coredns/coredns)


[](https://circleci.com/gh/coredns/coredns)
[](https://hub.docker.com/r/coredns/coredns)
[](https://goreportcard.com/report/coredns/coredns)
[](https://bestpractices.coreinfrastructure.org/projects/1250)
[](https://scorecard.dev/viewer/?uri=github.com/coredns/coredns)
CoreDNS 是一个用 Go 编写的 DNS 服务器/转发器,它通过链式调用 [插件](https://coredns.io/plugins) 来工作。
每个插件都执行一个 (DNS) 功能。
CoreDNS 是 [云原生计算基金会](https://cncf.io) 的毕业项目。
CoreDNS 是一个快速且灵活的 DNS 服务器。这里的关键词是 *灵活*:使用 CoreDNS,您可以利用插件对您的 DNS 数据执行您想要的操作。如果某些功能不是开箱即用的,您可以通过 [编写插件](https://coredns.io/explugins) 来添加它。
CoreDNS 可以监听通过以下协议传入的 DNS 请求:
* UDP/TCP (传统的 DNS)。
* TLS - DoT ([RFC 7858](https://tools.ietf.org/html/rfc7858))。
* DNS over HTTP/2 - DoH ([RFC 8484](https://tools.ietf.org/html/rfc8484))。
* DNS over HTTP/3 - DoH3
* DNS over QUIC - DoQ ([RFC 9250](https://tools.ietf.org/html/rfc9250))。
* [gRPC](https://grpc.io) (非标准)。
目前 CoreDNS 能够:
* 从文件提供区域数据;同时支持 DNSSEC (仅限 NSEC) 和 DNS (*file* 和 *auto*)。
* 从主服务器检索区域数据,即作为辅助服务器 (仅限 AXFR) (*secondary*)。
* 动态签名区域数据 (*dnssec*)。
* 对响应进行负载均衡 (*loadbalance*)。
* 允许区域传输,即作为主服务器 (*file* + *transfer*)。
* 自动从磁盘加载区域文件 (*auto*)。
* 缓存 DNS 响应 (*cache*)。
* 使用 etcd 作为后端 (替代 [SkyDNS](https://github.com/skynetservices/skydns)) (*etcd*)。
* 使用 k8s (kubernetes) 作为后端 (*kubernetes*)。
* 充当代理,将查询转发到其他 (递归) 域名服务器 (*forward*)。
* 提供指标 (使用 Prometheus) (*prometheus*)。
* 提供查询 (*log*) 和错误 (*errors*) 日志。
* 与云提供商集成 (*route53*)。
* 支持 CH 类:`version.bind` 及相关内容 (*chaos*)。
* 支持 RFC 5001 DNS 名称服务器标识符 (NSID) 选项 (*nsid*)。
* 性能分析支持 (*pprof*)。
* 重写查询 (qtype, qclass 和 qname) (*rewrite* 和 *template*)。
* 阻止 ANY 查询 (*any*)。
* 提供 DNS64 IPv6 转换 (*dns64*)。
以及其他更多功能。每个插件都有文档说明。有关所有内置插件,请参阅 [coredns.io/plugins](https://coredns.io/plugins),
有关所有外部插件,请参阅 [coredns.io/explugins](https://coredns.io/explugins)。
## 从源码编译
要编译 CoreDNS,我们假设您已经有一个正常工作的 Go 环境。如果您尚未配置,请参阅各种教程。
首先,请确保您的 golang 版本为 1.25.0 或更高,因为需要 `go mod` 支持和其他 API。
有关 `go mod` 的详细信息,请参见 [此处](https://github.com/golang/go/wiki/Modules)。
然后,检出项目并运行 `make` 来编译二进制文件:
```
$ git clone https://github.com/coredns/coredns
$ cd coredns
$ make
```
这将生成一个 `coredns` 二进制文件。
## 使用 Docker 编译
CoreDNS 需要 Go 来编译。然而,如果您已经安装了 Docker 并且不想配置 Go 环境,您可以轻松构建 CoreDNS:
```
docker run --rm -i -t \
-v $PWD:/go/src/github.com/coredns/coredns -w /go/src/github.com/coredns/coredns \
golang:1.25 sh -c 'GOFLAGS="-buildvcs=false" make gen && GOFLAGS="-buildvcs=false" make'
```
仅上述命令就会生成 `coredns` 二进制文件。
## 快速开始
创建一个最简的 Corefile:
```
cat > Corefile <
标签:CNCF, CoreDNS, DNS加密, DNS服务器, DNS解析, DNS转发器, DoH, DoH3, DoQ, DoT, EVTX分析, Go语言, gRPC, HTTP/2, HTTP/3, Python工具, QUIC, RFC 7858, RFC 8484, RFC 9250, SYN扫描, TCP, UDP, web渗透, 内核驱动, 域名解析, 子域名突变, 安全性, 容器网络, 开源项目, 插件化, 日志审计, 服务发现, 程序破解, 系统triage, 网络协议, 网络基础设施, 自定义请求头, 请求拦截