CoreDNS 是一个开源的域名系统(DNS)服务器,用于将域名解析为 IP 地址以实现网络通信。它是一个用 Go 语言编写的可扩展 DNS 服务器,旨在取代传统的 DNS 服务器并提供更灵活、可配置的解析方案。
CoreDNS 提供了模块化的插件系统,允许用户根据需求选择和组合插件,以定制 DNS 服务器的功能和行为。通过添加不同的插件,用户可以实现缓存、转发、重写、策略路由、服务发现等功能,从而满足各种复杂的域名解析需求。
插件由设置(Setup)、**注册(Registration)和处理程序(Handler)**部分组成。
- Setup 程序解析配置和插件的指令。
- Handler 是处理查询并实现所有逻辑的代码。
- Registration 是在 CoreDNS 中注册插件 - 这在编译 CoreDNS 时完成。服务器可以使用所有注册的插件,每个服务器中配置哪些插件的决定在运行时进行,并在 CoreDNS 的配置文件 Corefile 中完成。
安装运行
在 macOS 上安装 CoreDNS:
brew install coredns
可以执行 coredns -plugins
来查看已经安装的插件:
coredns -plugins
Server types:
dns
Caddyfile loaders:
flag
default
Other plugins:
dns.acl
dns.any
dns.auto
dns.autopath
dns.azure
dns.bind
dns.bufsize
dns.cache
dns.cancel
dns.chaos
dns.clouddns
dns.debug
dns.dns64
dns.dnssec
dns.dnstap
dns.erratic
dns.errors
dns.etcd
dns.file
dns.forward
dns.geoip
dns.grpc
dns.header
dns.health
dns.hosts
dns.k8s_external
dns.kubernetes
dns.loadbalance
dns.local
dns.log
dns.loop
dns.metadata
dns.minimal
dns.nsid
dns.pprof
dns.prometheus
dns.ready
dns.reload
dns.rewrite
dns.root
dns.route53
dns.secondary
dns.sign
dns.template
dns.tls
dns.trace
dns.transfer
dns.tsig
dns.view
dns.whoami
on
CoreDNS 的运行非常简单,执行 coredns
命令即可启动服务器。为了避免端口冲突,可以指定其他的端口启动:
coredns -dns.port=1053
.:1053
CoreDNS-1.10.0
darwin/arm64, go1.19.1,
如果需要对 DNS 服务器进行配置,需要通过 -conf
指定一个 Corefile 配置文件,还可以在配置文件中启用插件。不指定配置文件的话,CoreDNS 会使用 默认的配置,仅启用 whoami
和 log
两个插件:
.:PORT {
whoami
log
}
比如我从一台虚拟机上执行 DNS 的解析请求,192.168.1.174
是运行 CoreDNS 服务器的 macOS 地址:
dig @192.168.1.174 -p 1053 example.com
; DiG 9.16.1-Ubuntu @192.168.1.174 -p 1053 example.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER