浅析 CoreDNS 的工作机制

2023年 7月 19日 26.4k 0

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 会使用 默认的配置,仅启用 whoamilog 两个插件:

.: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

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论