简化DNS管理:使用CoreDNS打造高效基础设施
文章目录
前言
做网络开发的时候如果服务端没开发好,通常会在本地搭一个简单的数据服务,这时候又不想改代码里的域名,就可以通过自定义 DNS
服务器来把对应的域名改为本地主机。
有时候有些广告非常恶心,不想看,可以通过自定义 DNS
把对应的域名的 IP 改为本地,由于本地没有对应的服务所以就加载不出来,也就看不到广告了。这也是广告拦截的原理。
有些域名和 IP 之间相对固定,这时候自建 DNS 服务还能起到加速的作用,避免域名劫持。
这些都可以通过改 /etc/hosts
文件来实现,但是如果你有多台设备都想做到一样的效果,每台机器都要配置一下就非常麻烦,所以,我们就希望搭建一个 DNS
服务来让局域网内的所的所有设备都可以享受到同样的待遇。
我经过一番搜索后发现了 CoreDNS
,它配置简单是一个灵活、可扩展的 DNS 服务器,旨在简化 DNS 管理并提供高性能的解析服务。它不仅具备传统 DNS 服务器的功能,还支持插件机制,可以轻松地集成到各种现代化的网络环境中。于是就试着用它搭建了 DNS
服务。
简单介绍一下 CoreDNS
CoreDNS 是一个开源的、可插拔的 DNS 服务器,设计用于简化 DNS 管理并提供高性能的解析服务。它采用模块化的架构,通过插件机制提供灵活的功能扩展和集成能力,使其适用于各种不同的网络环境和应用场景。
与传统的 DNS 服务器相比,CoreDNS 具有许多优势和独特的特点。首先,它支持多种后端数据源,包括文件、数据库、Kubernetes 等,使管理员能够根据实际需求选择适合的数据存储方式。此外,CoreDNS 还支持灵活的策略和转发规则,使管理员能够自定义 DNS 解析的行为。
CoreDNS 的插件机制是其最重要的特点之一。通过插件,用户可以轻松地扩展 CoreDNS 的功能,满足特定的需求。例如,可以使用插件实现服务发现、反向解析、DNS over HTTPS 等高级功能。这种模块化的架构使得 CoreDNS 具有出色的灵活性和可扩展性,能够适应不断变化的网络需求。
此外,CoreDNS 还具有良好的性能和可靠性。它采用高效的并发模型,能够处理大量的 DNS 请求,并具备负载均衡和故障转移功能,确保 DNS 服务的稳定性和可靠性。同时,CoreDNS 还支持 DNS 协议的扩展,如 DNSSEC(DNS 安全扩展)和 DoT(DNS over TLS),提供更高的安全性和数据保护。
安装
安装还是挺简单, Mac
下可以使用 homebrew
直接安装
|
|
你也可以在Release v1.10.1 · coredns/coredns下载编译好的文件
配置
CoreDNS
使用 Corefile
来进行配置,我们需要自定义域名的解析,所以需要用到 hosts
插件,它是内置的不需要额外安装
|
|
这里我们启用了 hosts
插件,但是什么参数都没写,所以默认会从 /etc/hosts
中查找域名对应的 ip
配置文件写好之后使用 coredns
来启动,如果 Corefile
不在当前目录可以使用 coredns -conf corefile_path
来指定
hosts 插件语法
hosts
插件的语法如下
|
|
- FILE 表示要加载的域名文件,ZONES 可以指定那些域名要使用文件中的 ip
- INLINE 表示直接把域名和 IP 写在这个地方,不写到文件中
- ttl 指定 DNS 过期的时间,默认是 1 个小时
- no_reverse 禁用反向解析
- reload 设置重新加载 hostfile 的间隔,0表示禁用
- fallthrough 如果没有匹配交给下一个插件
列子
以下例子省略了端口号绑定,因为都是重复的
|
|
加载当前目录下的 hosts 文件
|
|
hosts
的内容如下
|
|
当访问 baidu.com
的时候就会访问到本机了,我们可以使用 nslookup
来查看一下
|
|
结果如下,可以看到 baidu.com
被解析到了 127.0.0.1
|
|
加载当前目录下的 hosts 文件,只对指定的域名有效
|
|
只有访问 baidu.com
才会从 hosts
中查找 ip,而其它的就不会
inline
|
|
inline
的方式可以不用在文件中写 ip 和对应的域名,直接在 hosts
插件中配置就行了,适合简单的几个域名,多了就不好管理了。
解析不了使用系统 DNS 解析
|
|
有些域名不在 hosts
文件中,又想解析,需要通过 fallthrough
来把解析的请求传递给下一个插件,这里没有配置下一个插件,所以不能处理。
如果想要转发给系统的 DNS 服务还需要使用 forward
插件帮忙转发
|
|
一些有用的插件
log
打印所有的请求
|
|
log 插件还支持打印特定的格式,例如: log . "{proto} Request: {name} {type} {>id}"
,更多用法可以查看log
errors
打印错误到控制台
|
|
health
健康检查默认是 8080
端口,要查看检查的结果通过http://127.0.0.1:8080/health来查看
|
|
总结
使用 CoreDNS
搭建 DNS
服务还是非常简单,只需要指定域名和 IP 的对应关系就行。
CoreDNS
还有许多丰富的插件可以选择,如果这些插件不能满足自己的需要还可以自己实现,这就变得非常灵活了。