coredns简介

CoreDNS是一款灵活可扩展的 DNS 服务器,并且基于插件架构,具有强大的模块化能力。其快速,简单,可扩展等特性也非常受人欢迎。

CoreDNS 最初是一个单独的项目,由Miek Gieben用 Google 的 Go 语言编写,与 Kubernetes 一样,CoreDNS 项目由CNCF托管,于 2017 年被 CNCF 采用,并成为CNCF毕业项目,从 Kubernetes 的 1.13 版开始,作为其默认 DNS 服务器发布,取代了之前的“kube-dns”。除了可以作为 Kubernetes 集群 DNS,也可以单独作为本地dns服务器运行。

官网: https://coredns.io/

项目地址: https://github.com/coredns/coredns

docker 搭建本地 coredns 服务器

前提条件:

  • 操作系统: Ubuntu server 22.04 LTS
  • 容器环境: Docker-CE 20.10.14

使用forward插件

编写一个CoreDns的配置文件Corefile,这里使用最简单的配置进行测试,以下配置是指将DNS请求转发到8.8.8.8进行解析。

mkdir -p /etc/coredns
cat >/etc/coredns/Corefile<<EOF
.:53 {forward . 8.8.8.8:53log
}
EOF

运行容器命令启动coredns服务,对于ubuntu系统,默认已占用53端口,需要指定coredns端口绑定到本机IP192.168.72.15

docker run -d --name coredns \--restart=always \-v /etc/coredns/:/etc/coredns/ \-p 192.168.72.15:53:53/udp \coredns/coredns:1.9.1 -conf /etc/coredns/Corefile

查看容器运行状态

root@ubuntu:~# docker ps
CONTAINER ID   IMAGE                   COMMAND                  CREATED        STATUS        PORTS                              NAMES
b6b5e7246e83   coredns/coredns:1.9.1   "/coredns -conf /etc…"   18 hours ago   Up 16 hours   53/tcp, 192.168.72.15:53->53/udp   coredns

修改ubuntu网络配置文件,指定nameserver为本机IP地址,使本机作为dns服务器

root@ubuntu:~# cat /etc/netplan/00-installer-config.yaml
# This is the network config written by 'subiquity'
network:ethernets:ens160:addresses:- 192.168.72.15/24gateway4: 192.168.72.8nameservers:addresses:- 192.168.72.15search: [example.com]version: 2# 使配置生效
root@ubuntu:~# netplan apply

dig验证coredns默认域名whoami.example.org

root@ubuntu:~# dig whoami.example.org; <<>> DiG 9.16.1-Ubuntu <<>> whoami.example.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 23231
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;whoami.example.org.            IN      A;; ANSWER SECTION:
whoami.example.org.     0       IN      A       192.168.72.15;; Query time: 0 msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; WHEN: Tue Apr 26 19:28:50 CST 2022
;; MSG SIZE  rcvd: 63root@ubuntu:~# dig @192.168.72.15 -p 53 whoami.example.org

如果需要在同宿主机的容器中查询DNS,启动容器需要指定--net=host参数,如果指定了该项,则无须指定-p选项。

使用hosts插件

下面可以尝试自己添加一些自定义域名。 CoreDNS使用插件的方式实现一系列的功能。 例如上面例子中的forward插件,实现了DNS转发的功能。如果我们只是想添加一个域名,能够解析成我们指定的IP,可以尝试使用host插件。将上面的Corefile修改一下:

cat >/etc/coredns/Corefile<<EOF
.:53 {hosts {192.168.72.15 example.com192.168.72.16 example1.comfallthrough}forward . 114.114.114.114 8.8.8.8logerrors
}
EOF

然后重启CoreDNS的容器,重新加载Corefile,

docker restart coredns

测试地址解析:

root@ubuntu:~# dig +short example1.com
192.168.72.16

也可以使用文件的形式去保存和管理hosts,这样更加方便。

# cat Corefile
.:53 {hosts /etc/coredns/hostsfile {fallthrough}forward . 8.8.8.8:53log
}# cat hostsfile
192.168.72.16 example1.org

使用区域配置文件

创建coredns配置文件,使用区域配置文件

cat >/etc/coredns/Corefile<<EOF
.:53 {forward . 114.114.114.114 8.8.8.8logerrors
}
example.com:53 {file /etc/coredns/db.example.comlogerrors
}
192.168.72.0/24:53 {file /etc/coredns/db.192.168.72logerrors
}
EOF

Corefile配置中,每个带括号的部分表示一个 DNS 区域,它根据正在解析的内容设置 CoreDNS 的行为。

首先,请注意最初的括号部分。它以 .:53 开头,表示该区域是全局的(带有“.”表示所有流量),并且它正在侦听端口 53(默认为 udp)。我们在此处设置的参数将适用于所有未指定特定区域的传入 DNS 查询,例如要解析github.com的查询。我们在下一行看到,将此类请求转发到辅助 DNS 服务器进行解析;在这种情况下,对该区域的所有请求都将简单地转发到位于114.114.114.114和的 Google 的 DNS 服务器8.8.8.8

这里指定了一个example.com区域,它也在侦听 UDP 端口 53。对属于该区域的主机的任何查询都将引用一个文件数据库(类似于 bind 所做的)以在那里进行查找。例如,对server.example.com的查询将绕过.的全局区域。并落入为example.com提供服务的区域,并使用该file指令引用数据库文件以找到正确的记录。

对于一个简单的转发DNS服务器来说,它也为本地客户端提供主机名。现在我们必须创建引用的DNS数据库文件db.example.example,并用我们的主机填充它。

1、创建正向解析配置文件

cat >/etc/coredns/db.example.com<<'EOF'
$ORIGIN example.com.
@   3600 IN SOA dns.example.com. mail.example.com. (2017042745 ; serial7200       ; refresh (2 hours)3600       ; retry (1 hour)1209600    ; expire (2 weeks)3600       ; minimum (1 hour))3600 IN NS a.iana-servers.net.3600 IN NS b.iana-servers.net.dns      IN     A    192.168.72.15
vcenter  IN     A    192.168.72.12
esxi11   IN     A    192.168.72.11
EOF

2、创建反向解析配置文件

cat >/etc/coredns/db.192.168.72<<'EOF'
$TTL    604800
@       IN  SOA     dns.example.com. mail.example.com. (2         ; Serial604800    ; Refresh86400     ; Retry2419200   ; Expire604800 )  ; Negative Cache TTL
;
; name servers - NS recordsIN      NS      dns.example.com.;
; PTR Records
15      IN      PTR     dns.example.com.        ; 192.168.72.15
12      IN      PTR     vcenter.example.com.    ; 192.168.72.12
11      IN      PTR     esxi11.example.com.     ; 192.168.72.11
EOF

重启coredns容器,测试正向dns解析

root@ubuntu:~# dig +noall +answer @192.168.72.15  vcenter.example.com
vcenter.example.com.    3600    IN      A       192.168.72.12

测试反向dns解析

root@ubuntu:~# dig +noall +answer @192.168.72.15 -x 192.168.72.12
12.72.168.192.in-addr.arpa. 604800 IN   PTR     vcenter.example.com.

docker 搭建本地 coredns 服务器相关推荐

  1. Armbian搭建本地Gitea服务器

    Armbian搭建本地Gitea服务器 1 安装Docker Docker 是一个用于开发.发布和运行应用程序的开放平台. Docker 是一个开源的应用容器引擎,Docker 可以让开发者打包他们的 ...

  2. Mac搭建本地svn服务器,并用Cornerstone连接服务器

    Mac搭建本地svn服务器,并用Cornerstone连接服务器 Mac默认已经安装了svn,我们只需要进行配置并开启就可以了 首先我们可以验证一下是否安装了svn,打开终端,输入命令: svnser ...

  3. svn 使用TortoiseSVN server搭建本地SVN服务器

    使用TortoiseSVN server搭建本地SVN服务器 转载于:https://www.cnblogs.com/fireblackman/p/10799625.html

  4. Dnsmasq安装与配置-搭建本地DNS服务器 更干净更快无广告DNS解析

    Dnsmasq安装与配置-搭建本地DNS服务器 更干净更快无广告DNS解析 文章目录 Dnsmasq安装 Dnsmasq配置 Dnsmasq启动 Dnsmasq使用 Dnsmasq小结 默认的情况下, ...

  5. 群晖NAS 7.X搭建本地web服务器并实现公网访问 1/3

    系列文章 群晖NAS 7.X搭建本地web服务器并实现公网访问 1/3 群晖NAS 7.X搭建本地web服务器并实现公网访问 2/3 群晖NAS 7.X搭建本地web服务器并实现公网访问 3/3 随着 ...

  6. docker搭建Coturn TURN服务器

    docker搭建Coturn TURN服务器 文章目录 docker搭建Coturn TURN服务器 下载镜像 启动镜像(失败) 启动镜像(不太对) 启动镜像(搞个配置文件) 自签证书 使用配置文件 ...

  7. Node.js搭建本地HTTP服务器(微信小程序)

    Node.js搭建本地HTTP服务器(微信小程序) Node.js简易搭建本地HTTP服务器 1. 首先关闭微信开发者工具中的验证 单击工具栏中的详情按钮,选中图中所示选项即可. 2. 将Node.j ...

  8. 利用docker搭建在线Markdown服务器

    利用docker搭建在线Markdown服务器 [CodiMD] CentOS7服务器 1.安装docker和docker-compose 2.编写docker-compose.yml version ...

  9. windows搭建本地git服务器【gitblit】+配置git的ssh免密+vscode的git图形使用

    一.搭建本地git服务器[gitblit] 转自:Window系统下搭建GIT本地服务器 1.安装Java环境,配置环境变量. 2.解压文件gitblit-1.8.0.zip至你准备放服务器的目录下 ...

最新文章

  1. 分享如何在Ubuntu 16.04下CUDA8.0
  2. 计算机中iis6.0配置步骤,Win2003 IIS6.0 安装方法 图文详细教程
  3. Python的lambda匿名函数
  4. android 等待按钮框架,Android 开发 MaterialDialog框架的详解
  5. (十二)boost库之多线程高级特性
  6. Text store debug FM CRM_TEXT_MAINTAIN_OW
  7. tomcat如何部署.net程序_.NET 程序员如何学习Vue
  8. SpringBoot2 整合 Zookeeper组件,管理架构中服务协调
  9. matlab调用kmeans_使用 K 均值聚类实现基于颜色的分割
  10. 文献解读:结构方程模型SEM基础,小白看这个就基本够了
  11. TextView设置跑马灯效果
  12. 看视频用这个太爽了!自动实时翻译英语视频
  13. 鳄鱼mt4复盘助手_教你一个正确的MT4复盘小技巧
  14. gridview的sort_GridView实现自动排序带上下箭头
  15. [含毕业设计论文+PPT+源码等]ssm校园求职系统+Java后台管理系统|前后分离VUE
  16. 郑州时代科技计算机专业介绍,2021郑州的中专排名郑州时代科技中等职业学校毕业可以升大专吗...
  17. 帝国时代2php存到哪里,window_在Vista、Win7下联网玩QQ对战平台、浩方、帝国时代2,曾几何时,我们在宿舍区组网 - phpStudy...
  18. 5G应用发展情况,你知多少
  19. getInfoByID
  20. 手机记录生日倒计时软件排行榜里哪个便签比较好用

热门文章

  1. dotnet 读 WPF 源代码笔记 了解 WPF 已知问题 用户设备上不存在 Arial 字体将导致应用闪退...
  2. BackTrack 4 R1 – Public Release
  3. python基础知识点集锦二
  4. C语言初阶知识点思维导图(超大图片、超级详细版)
  5. camunda工作流开发实战------04 请假流程实例
  6. Oracle 11G 11.2.0.4 RAC部署参考指南
  7. uvm_objection/uvm_objection_events/test_done_objection/callbacks_objection/objection_callback
  8. 计算机组成原理静态存储器实验报告,静态随机存储器实验报告计算机组成原理...
  9. 用Rax开发一个联想搜索输入框,内附封装后的npm组件
  10. 一款功能强大的设备调试、接口调试工具