docker 搭建本地 coredns 服务器
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 服务器相关推荐
- Armbian搭建本地Gitea服务器
Armbian搭建本地Gitea服务器 1 安装Docker Docker 是一个用于开发.发布和运行应用程序的开放平台. Docker 是一个开源的应用容器引擎,Docker 可以让开发者打包他们的 ...
- Mac搭建本地svn服务器,并用Cornerstone连接服务器
Mac搭建本地svn服务器,并用Cornerstone连接服务器 Mac默认已经安装了svn,我们只需要进行配置并开启就可以了 首先我们可以验证一下是否安装了svn,打开终端,输入命令: svnser ...
- svn 使用TortoiseSVN server搭建本地SVN服务器
使用TortoiseSVN server搭建本地SVN服务器 转载于:https://www.cnblogs.com/fireblackman/p/10799625.html
- Dnsmasq安装与配置-搭建本地DNS服务器 更干净更快无广告DNS解析
Dnsmasq安装与配置-搭建本地DNS服务器 更干净更快无广告DNS解析 文章目录 Dnsmasq安装 Dnsmasq配置 Dnsmasq启动 Dnsmasq使用 Dnsmasq小结 默认的情况下, ...
- 群晖NAS 7.X搭建本地web服务器并实现公网访问 1/3
系列文章 群晖NAS 7.X搭建本地web服务器并实现公网访问 1/3 群晖NAS 7.X搭建本地web服务器并实现公网访问 2/3 群晖NAS 7.X搭建本地web服务器并实现公网访问 3/3 随着 ...
- docker搭建Coturn TURN服务器
docker搭建Coturn TURN服务器 文章目录 docker搭建Coturn TURN服务器 下载镜像 启动镜像(失败) 启动镜像(不太对) 启动镜像(搞个配置文件) 自签证书 使用配置文件 ...
- Node.js搭建本地HTTP服务器(微信小程序)
Node.js搭建本地HTTP服务器(微信小程序) Node.js简易搭建本地HTTP服务器 1. 首先关闭微信开发者工具中的验证 单击工具栏中的详情按钮,选中图中所示选项即可. 2. 将Node.j ...
- 利用docker搭建在线Markdown服务器
利用docker搭建在线Markdown服务器 [CodiMD] CentOS7服务器 1.安装docker和docker-compose 2.编写docker-compose.yml version ...
- windows搭建本地git服务器【gitblit】+配置git的ssh免密+vscode的git图形使用
一.搭建本地git服务器[gitblit] 转自:Window系统下搭建GIT本地服务器 1.安装Java环境,配置环境变量. 2.解压文件gitblit-1.8.0.zip至你准备放服务器的目录下 ...
最新文章
- 分享如何在Ubuntu 16.04下CUDA8.0
- 计算机中iis6.0配置步骤,Win2003 IIS6.0 安装方法 图文详细教程
- Python的lambda匿名函数
- android 等待按钮框架,Android 开发 MaterialDialog框架的详解
- (十二)boost库之多线程高级特性
- Text store debug FM CRM_TEXT_MAINTAIN_OW
- tomcat如何部署.net程序_.NET 程序员如何学习Vue
- SpringBoot2 整合 Zookeeper组件,管理架构中服务协调
- matlab调用kmeans_使用 K 均值聚类实现基于颜色的分割
- 文献解读:结构方程模型SEM基础,小白看这个就基本够了
- TextView设置跑马灯效果
- 看视频用这个太爽了!自动实时翻译英语视频
- 鳄鱼mt4复盘助手_教你一个正确的MT4复盘小技巧
- gridview的sort_GridView实现自动排序带上下箭头
- [含毕业设计论文+PPT+源码等]ssm校园求职系统+Java后台管理系统|前后分离VUE
- 郑州时代科技计算机专业介绍,2021郑州的中专排名郑州时代科技中等职业学校毕业可以升大专吗...
- 帝国时代2php存到哪里,window_在Vista、Win7下联网玩QQ对战平台、浩方、帝国时代2,曾几何时,我们在宿舍区组网 - phpStudy...
- 5G应用发展情况,你知多少
- getInfoByID
- 手机记录生日倒计时软件排行榜里哪个便签比较好用
热门文章
- dotnet 读 WPF 源代码笔记 了解 WPF 已知问题 用户设备上不存在 Arial 字体将导致应用闪退...
- BackTrack 4 R1 – Public Release
- python基础知识点集锦二
- C语言初阶知识点思维导图(超大图片、超级详细版)
- camunda工作流开发实战------04 请假流程实例
- Oracle 11G 11.2.0.4 RAC部署参考指南
- uvm_objection/uvm_objection_events/test_done_objection/callbacks_objection/objection_callback
- 计算机组成原理静态存储器实验报告,静态随机存储器实验报告计算机组成原理...
- 用Rax开发一个联想搜索输入框,内附封装后的npm组件
- 一款功能强大的设备调试、接口调试工具