Featured image of post CoreDNS的基本使用

CoreDNS的基本使用

1 CoreDNS的基本使用

1.1 查看CoreDNS的插件

一旦有了coredns二进制文件,你可以使用-plugins标志列出所有已编译的插件。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
[root@localhost ~]# coredns --plugins|nl
     1  acl
     2  any
     3  auto
     4  autopath
     5  azure
     6  bind
     7  bufsize
     8  cache
     9  cancel
    10  chaos
    11  clouddns
    12  debug
    13  dns64
    14  dnssec
    15  dnstap
    16  erratic
    17  errors
    18  etcd
    19  file
    20  forward
    21  geoip
    22  grpc
    23  header
    24  health
    25  hosts
    26  k8s_external
    27  kubernetes
    28  loadbalance
    29  local
    30  log
    31  loop
    32  metadata
    33  minimal
    34  multisocket
    35  nomad
    36  nsid
    37  pprof
    38  prometheus
    39  quic
    40  ready
    41  reload
    42  rewrite
    43  root
    44  route53
    45  secondary
    46  sign
    47  template
    48  timeouts
    49  tls
    50  trace
    51  transfer
    52  tsig
    53  view
    54  whoami
    55  on

[root@localhost ~]#

可以看到,默认用55个插件!插件非常多。

1.2 启动CoreDNS

如果没有Corefile(请参见配置),CoreDNS 将加载whoami插件,该插件将使用客户端的 IP 地址和端口号做出响应。因此,要进行测试,我们将启动 CoreDNS 以在端口 1053 上运行,然后使用dig向其发送查询 。

1.2.1 不指定启动端口

如果不指定端口,则默认监听端口53。

在一个终端直接执行coredns。则会启动CoreDNS服务:

1
2
3
4
5
[root@localhost ~]# coredns
maxprocs: Leaving GOMAXPROCS=2: CPU quota undefined
.:53
CoreDNS-1.13.1
linux/amd64, go1.25.2, 1db4568

重新打开一个终端,查看coredns进程和端口信息:

1
2
3
4
5
6
[root@localhost ~]# ps -ef|grep -v grep|grep coredns
root      1575  1492  0 13:42 pts/0    00:00:00 coredns
[root@localhost ~]# netstat -tunlp|grep coredns
tcp6       0      0 :::53                   :::*                    LISTEN      1575/coredns
udp6       0      0 :::53                   :::*                                1575/coredns
[root@localhost ~]#

此处我们使用dig来对域名进行查询。此处不详细展开dig的使用。

dig (Domain Information Groper) 是 Linux 系统中一个功能强大的 DNS 查询工具,用于查询 DNS 域名服务器。与传统的 nslookup 相比,dig 提供了更详细的查询结果和更灵活的查询选项。

dig 命令的主要特点:

  • 显示完整的 DNS 查询过程
  • 支持所有 DNS 记录类型查询
  • 可以指定查询特定的 DNS 服务器
  • 输出格式清晰易读

dig 和 nslookup 有什么区别?

dig 提供了比 nslookup 更详细的输出和更多的查询选项,是更专业的 DNS 查询工具。nslookup 已经逐渐被 dig 取代。

当我使用dig来检查域名时:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
[root@localhost ~]# dig @localhost whoami.example.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.16 <<>> @localhost whoami.example.com
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 46712
;; flags: qr aa rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 3
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;whoami.example.com.            IN      A

;; ADDITIONAL SECTION:
whoami.example.com.     0       IN      AAAA    ::1
_udp.whoami.example.com. 0      IN      SRV     0 0 44891 .

;; Query time: 0 msec
;; SERVER: ::1#53(::1)
;; WHEN: Sun Nov 16 13:46:37 CST 2025
;; MSG SIZE  rcvd: 135

[root@localhost ~]# dig @localhost whoami.example.org

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.16 <<>> @localhost whoami.example.org
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 45295
;; flags: qr aa rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 3
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;whoami.example.org.            IN      A

;; ADDITIONAL SECTION:
whoami.example.org.     0       IN      AAAA    ::1
_udp.whoami.example.org. 0      IN      SRV     0 0 58662 .

;; Query time: 0 msec
;; SERVER: ::1#53(::1)
;; WHEN: Sun Nov 16 13:46:58 CST 2025
;; MSG SIZE  rcvd: 135

[root@localhost ~]#

此时在coredns运行的终端有新的日志显示出来:

1
2
3
4
5
6
7
8
[root@localhost ~]# coredns
maxprocs: Leaving GOMAXPROCS=2: CPU quota undefined
.:53
CoreDNS-1.13.1
linux/amd64, go1.25.2, 1db4568

[INFO] [::1]:44891 - 46712 "A IN whoami.example.com. udp 47 false 4096" NOERROR qr,aa,rd 124 0.00025989s
[INFO] [::1]:58662 - 45295 "A IN whoami.example.org. udp 47 false 4096" NOERROR qr,aa,rd 124 0.000107252s
1.2.2 以system服务启动CoreDNS

创建用户coredns并创建配置文件:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
## 添加独立用户
[root@localhost ~]# useradd coredns -s /sbin/nologin
[root@localhost ~]# grep coredns /etc/passwd
coredns:x:1001:1001::/home/coredns:/sbin/nologin

## 创建配置目录文件及权限
[root@localhost ~]# mkdir /etc/coredns && touch /etc/coredns/Corefile && chown -R coredns:coredns /etc/coredns
[root@localhost ~]# ll /etc/coredns/
total 0
-rw-r--r-- 1 coredns coredns 0 2025-11-22 20:54 Corefile
[root@localhost ~]#

创建systemd服务管理清单:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
[root@localhost ~]# cat /usr/lib/systemd/system/coredns.service
[Unit]
Description=CoreDNS DNS server
Documentation=https://coredns.io
After=network.target

[Service]
LimitNOFILE=1048576
LimitNPROC=512
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_BIND_SERVICE
PermissionsStartOnly=true
NoNewPrivileges=true
WorkingDirectory=/etc/coredns
User=coredns
ExecStart=/usr/bin/coredns -conf=/etc/coredns/Corefile
ExecReload=/bin/kill -SIGUSR1 $MAINPID
Restart=on-failure

[Install]
WantedBy=multi-user.target
[root@localhost ~]#

重新加载配置,并启动CoreDNS服务:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl start coredns
[root@localhost ~]# systemctl enable coredns
Created symlink from /etc/systemd/system/multi-user.target.wants/coredns.service to /usr/lib/systemd/system/coredns.service.
[root@localhost ~]# systemctl status coredns
● coredns.service - CoreDNS DNS server
   Loaded: loaded (/usr/lib/systemd/system/coredns.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2025-11-22 20:56:54 CST; 14s ago
     Docs: https://coredns.io
 Main PID: 1565 (coredns)
   CGroup: /system.slice/coredns.service
           └─1565 /usr/bin/coredns -conf=/etc/coredns/Corefile

Nov 22 20:56:54 localhost.localdomain systemd[1]: Started CoreDNS DNS server.
Nov 22 20:56:55 localhost.localdomain coredns[1565]: maxprocs: Leaving GOMAXPROCS=2: CPU quota undefined
Nov 22 20:56:55 localhost.localdomain coredns[1565]: .:53
Nov 22 20:56:55 localhost.localdomain coredns[1565]: CoreDNS-1.13.1
Nov 22 20:56:55 localhost.localdomain coredns[1565]: linux/amd64, go1.25.2, 1db4568
[root@localhost ~]#

查看CoreDNS进程和端口:

1
2
3
4
5
6
7
[root@localhost ~]# ps -ef|grep coredns
coredns   1565     1  0 20:56 ?        00:00:00 /usr/bin/coredns -conf=/etc/coredns/Corefile
root      1592  1488  0 20:58 pts/0    00:00:00 grep --color=always coredns
[root@localhost ~]# netstat -tunlp|grep coredns
tcp6       0      0 :::53                   :::*                    LISTEN      1565/coredns
udp6       0      0 :::53                   :::*                                1565/coredns
[root@localhost ~]#
1.2.3 空配置文件解析域名

通过systemctl start coredns启动CoreDNS中虽然配置了ExecStart=/usr/bin/coredns -conf=/etc/coredns/Corefile,但我们实际上配置文件/etc/coredns/Corefile是一个空文件。

此时尝试使用dig命令来解析百度的域名。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[root@localhost ~]# dig @localhost baidu.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.16 <<>> @localhost baidu.com
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 64446
;; flags: qr aa rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 3
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;baidu.com.                     IN      A

;; ADDITIONAL SECTION:
baidu.com.              0       IN      AAAA    ::1
_udp.baidu.com.         0       IN      SRV     0 0 37937 .

;; Query time: 0 msec
;; SERVER: ::1#53(::1)
;; WHEN: Sun Dec 07 21:50:53 CST 2025
;; MSG SIZE  rcvd: 108

[root@localhost ~]#

此时,可以看到,解析时有一个警告:WARNING: recursion requested but not available,即请求递归解析但不可用baidu.com. 0 IN AAAA ::1 解析结果返回 IPv6 回环地址,说明 CoreDNS 未转发查询到上游 DNS,而是本地直接返回了无效记录(空配置兜底逻辑失效)。

说明我们的配置是不正常的!!

空 Corefile 并非 “无配置”,而是 CoreDNS 触发了内置的兜底默认配置,其等效的显式 Corefile 如下(核心逻辑是转发到系统 DNS + 基础缓存):

1
2
3
4
5
.:53 {
    forward . /etc/resolv.conf  # 核心:转发所有域名到系统默认DNS(/etc/resolv.conf)
    cache                       # 启用默认缓存(TTL 30秒)
    # 无 errors/log/recursion 等插件,仅保留核心转发+缓存
}

修改后,查看配置内容:

1
2
3
4
5
6
7
[root@localhost ~]# cat /etc/coredns/Corefile
.:53 {
    forward . /etc/resolv.conf  # 核心:转发所有域名到系统默认DNS(/etc/resolv.conf)
    cache                       # 启用默认缓存(TTL 30秒)
    # 无 errors/log/recursion 等插件,仅保留核心转发+缓存
}
[root@localhost ~]#

我们将这个配置写入到Corefile文件后,重启CoreDNS后再进行查询。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
[root@localhost ~]# systemctl restart coredns
[root@localhost ~]# dig @localhost baidu.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.16 <<>> @localhost baidu.com
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55327
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 5, ADDITIONAL: 12

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;baidu.com.                     IN      A

;; ANSWER SECTION:
baidu.com.              260     IN      A       110.242.74.102
baidu.com.              260     IN      A       124.237.177.164
baidu.com.              260     IN      A       111.63.65.247
baidu.com.              260     IN      A       111.63.65.103

;; AUTHORITY SECTION:
baidu.com.              260     IN      NS      dns.baidu.com.
baidu.com.              260     IN      NS      ns3.baidu.com.
baidu.com.              260     IN      NS      ns4.baidu.com.
baidu.com.              260     IN      NS      ns7.baidu.com.
baidu.com.              260     IN      NS      ns2.baidu.com.

;; ADDITIONAL SECTION:
ns4.baidu.com.          260     IN      A       14.215.178.80
ns4.baidu.com.          260     IN      A       111.45.3.226
ns3.baidu.com.          260     IN      A       36.155.132.78
ns3.baidu.com.          260     IN      A       153.3.238.93
ns2.baidu.com.          260     IN      A       220.181.33.31
ns7.baidu.com.          260     IN      A       180.76.76.92
dns.baidu.com.          260     IN      A       110.242.68.134
ns2.baidu.com.          260     IN      AAAA    240e:940:603:4:0:ff:b01b:589a
ns7.baidu.com.          260     IN      AAAA    240e:bf:b801:1002:0:ff:b024:26de
ns7.baidu.com.          260     IN      AAAA    240e:940:603:4:0:ff:b01b:589a
dns.baidu.com.          260     IN      AAAA    240e:bf:b801:1002:0:ff:b024:26de

;; Query time: 26 msec
;; SERVER: ::1#53(::1)
;; WHEN: Sun Dec 07 22:13:35 CST 2025
;; MSG SIZE  rcvd: 685

[root@localhost ~]#

可以看到,马上就有结果输出了!!!

可以看到,此时查询到4条 DNS 记录信息 :

1
2
3
4
5
;; ANSWER SECTION:
baidu.com.              260     IN      A       110.242.74.102
baidu.com.              260     IN      A       124.237.177.164
baidu.com.              260     IN      A       111.63.65.247
baidu.com.              260     IN      A       111.63.65.103

我们用nslookup查询也可以查询到4条DNS记录信息:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
[root@localhost ~]# nslookup baidu.com
Server:         192.168.2.1
Address:        192.168.2.1#53

Non-authoritative answer:
Name:   baidu.com
Address: 110.242.74.102
Name:   baidu.com
Address: 124.237.177.164
Name:   baidu.com
Address: 111.63.65.247
Name:   baidu.com
Address: 111.63.65.103

[root@localhost ~]#

可见,启动时Corefile配置文件需要配置好!!

1.2.4 启动时监听多个端口

我们修改一下Corefile配置,将之前的配置内容复制一份,粘贴到配置文件下方,并将53改成54,然后查看配置文件内容:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
[root@localhost ~]# cat /etc/coredns/Corefile
.:53 {
    forward . /etc/resolv.conf  # 核心:转发所有域名到系统默认DNS(/etc/resolv.conf)
    cache                       # 启用默认缓存(TTL 30秒)
    # 无 errors/log/recursion 等插件,仅保留核心转发+缓存
}
.:54 {
    forward . /etc/resolv.conf  # 核心:转发所有域名到系统默认DNS(/etc/resolv.conf)
    cache                       # 启用默认缓存(TTL 30秒)
    # 无 errors/log/recursion 等插件,仅保留核心转发+缓存
}
[root@localhost ~]#

重启CoreDNS服务:

1
2
[root@localhost ~]# systemctl restart coredns
[root@localhost ~]#

查看coredns进程和端口信息:

1
2
3
4
5
6
7
8
[root@localhost ~]# ps -ef|grep -v grep|grep coredns
coredns   2366     1  0 22:36 ?        00:00:00 /usr/bin/coredns -conf=/etc/coredns/Corefile
[root@localhost ~]# netstat -tunlp|grep coredns
tcp6       0      0 :::53                   :::*                    LISTEN      2366/coredns
tcp6       0      0 :::54                   :::*                    LISTEN      2366/coredns
udp6       0      0 :::53                   :::*                                2366/coredns
udp6       0      0 :::54                   :::*                                2366/coredns
[root@localhost ~]#

可以看到,此是CoreDNS服务同时监听了53和54端口。

查看域名解析:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
[root@localhost ~]# dig @localhost -p 53 baidu.com +short
111.63.65.247
111.63.65.103
110.242.74.102
124.237.177.164
[root@localhost ~]# dig @localhost -p 54 baidu.com +short
111.63.65.247
111.63.65.103
110.242.74.102
124.237.177.164
[root@localhost ~]#

可以看到,通过指定不同端口,都能查询到百度域名的DNS解析信息。

1.3 Corefile配置文件

大多数用户使用 Corefile 配置 CoreDNS。在 CoreDNS 启动并且未给出 -conf 标志的情况下,它将在当前目录中查找名为 Corefile 的文件。该文件由一个或多个 Server 块组成。各个 Server 块列出一种或多种插件。这些插件可以使用指令进一步进行配置。

Corefile 中插件的排列顺序并不会确定插件链的顺序。执行插件的顺序由 plugin.cfg 中的排列顺序决定。

Corefile 中的注释以 # 开始。行中的其余部分然后被视为注释。

CoreDNS 的配置文件的配置内容要求必须是编译在 coredns 中的插件才可以使用,添加和删除插件都很容易,但是需要重新编译 coredns。

我们通过systemctl启动CoreDNS服务时,已经在配置文件中指定了默认使用/etc/coredns/Corefile配置文件 !!

  • Corefile 中的注释以 # 开始。# 后面的内容是注释,不会被解析。
  • Corefile中随便是怎么指定插件的排列顺序,它都不是按你指定的顺序来执行插件的!而是由plugin.cfg配置文件决定的。
1.3.1 插件列表

你可以在https://github.com/coredns/coredns/blob/master/plugin.cfg 这里下载plugin.cfg配置文件,也可以看下面这个内容:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
## Directives are registered in the order they should be executed.
##
## Ordering is VERY important. Every plugin will feel the effects of all other
## plugin below (after) them during a request, but they must not care what plugin
## above them are doing.

## How to rebuild with updated plugin configurations: Modify the list below and
## run `go generate && go build`

## The parser takes the input format of:
##
##     <plugin-name>:<package-name>
## Or
##     <plugin-name>:<fully-qualified-package-name>
##
## External plugin example:
##
## log:github.com/coredns/coredns/plugin/log
## Local plugin example:
## log:log

root:root
metadata:metadata
geoip:geoip
cancel:cancel
tls:tls
quic:quic
timeouts:timeouts
multisocket:multisocket
reload:reload
nsid:nsid
bufsize:bufsize
bind:bind
debug:debug
trace:trace
ready:ready
health:health
pprof:pprof
prometheus:metrics
errors:errors
log:log
dnstap:dnstap
local:local
dns64:dns64
acl:acl
any:any
chaos:chaos
loadbalance:loadbalance
tsig:tsig
cache:cache
rewrite:rewrite
header:header
dnssec:dnssec
autopath:autopath
minimal:minimal
template:template
transfer:transfer
hosts:hosts
route53:route53
azure:azure
clouddns:clouddns
k8s_external:k8s_external
kubernetes:kubernetes
file:file
auto:auto
secondary:secondary
etcd:etcd
loop:loop
forward:forward
grpc:grpc
erratic:erratic
whoami:whoami
on:github.com/coredns/caddy/onevent
sign:sign
view:view
nomad:nomad

Corefile 中插件的排列顺序并不会确定插件链的顺序。执行插件的顺序由 plugin.cfg 中的排列顺序决定。也就是说,CoreDNS会按以上plugin.cfg配置文件里面的插件顺序来执行查询。

1.4 插件的使用

1.4.1 bind插件-端口绑定
  • bind插件用于控制绑定的接口。
  • 可以通过 bind 插件来让他绑定到不同的网卡上,可以实现使用不同网络接口或者IP地址的情况下使用相同的端口来提供服务。

看以下配置/etc/coredns/Corefile

1
2
3
4
5
6
7
8
.:53 {
    forward . /etc/resolv.conf
    bind lo
}
.:53 {
    forward . /etc/resolv.conf
    bind enp0s3
}

重启coredns服务,查看端口监听:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
[root@localhost ~]# netstat -tunlp|grep coredns
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      2077/coredns
tcp        0      0 192.168.56.101:53       0.0.0.0:*               LISTEN      2077/coredns
tcp6       0      0 fe80::36ca:dc09:db95:53 :::*                    LISTEN      2077/coredns
tcp6       0      0 ::1:53                  :::*                    LISTEN      2077/coredns
udp        0      0 127.0.0.1:53            0.0.0.0:*                           2077/coredns
udp        0      0 192.168.56.101:53       0.0.0.0:*                           2077/coredns
udp6       0      0 fe80::36ca:dc09:db95:53 :::*                                2077/coredns
udp6       0      0 ::1:53                  :::*                                2077/coredns
[root@localhost ~]#

可以看到环回接口和enp0s3网口都能正常监听。

你可以通过它们的 IP 或接口名称来排除一些地址,以下会排除127.0.0.1这个地址:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
.:53 {
    forward . /etc/resolv.conf
    bind lo {
        except 127.0.0.1
    }
}
.:53 {
    forward . /etc/resolv.conf
    bind enp0s3
}

重启服务后,此时查看端口监听:

1
2
3
4
5
6
7
8
[root@localhost ~]# netstat -tunlp|grep coredns
tcp        0      0 192.168.56.101:53       0.0.0.0:*               LISTEN      2134/coredns
tcp6       0      0 ::1:53                  :::*                    LISTEN      2134/coredns
tcp6       0      0 fe80::36ca:dc09:db95:53 :::*                    LISTEN      2134/coredns
udp        0      0 192.168.56.101:53       0.0.0.0:*                           2134/coredns
udp6       0      0 ::1:53                  :::*                                2134/coredns
udp6       0      0 fe80::36ca:dc09:db95:53 :::*                                2134/coredns
[root@localhost ~]# 

可以看到127.0.0.1此时未监听53端口。

1.4.2 health 启用健康检查端点插件

启用进程范围健康端点。当 CoreDNS 启动并运行时,其将返回 200 OK HTTP 状态代码。默认情况下,通过端口 8080/health 来导出健康状况。

1
2
3
4
.:53 {
    forward . /etc/resolv.conf
    health :8080
}

启用该配置后,此时重启coredns服务后,则会监听8080端口。

在本地C:\Windows\System32\drivers\etc\hosts文件中绑定coredns服务器IP:

1
2
## coredns
192.168.56.101 mycoredns.com

然后在浏览器中打开 URL http://mycoredns.com:8080/health,则可以看到显示OK,此时状态码也是200,说明coredns服务健康检查正常。

Snipaste_2026-01-03_16-00-00.png

1.4.3 ready 启用准备就绪检查插件

启用 ready 时,端口 8181 上的 HTTP 终结点将在所有能够发出准备就绪信号的插件完成信号发送后返回 200 OK。如果一些插件尚未就绪,终结点将返回 503,并返回一个正文,其中包含尚未就绪的插件列表。一次插件发出就绪信号后,将不再查询它。

在上一节的基础上,再开启ready插件:

1
2
3
4
5
.:53 {
    forward . /etc/resolv.conf
    health :8080
    ready :8181
}

启用ready :8181配置后,此时重启coredns服务后,则会监听8181端口。

然后在浏览器中打开 URL http://mycoredns.com:8181/ready,则可以看到显示OK,此时状态码也是200,说明coredns服务就绪检查正常。

Snipaste_2026-01-03_18-29-30.png

此时看下端口监听:

1
2
3
4
5
6
[root@localhost ~]# netstat -tunlp|grep coredns
tcp6       0      0 :::8080                 :::*                    LISTEN      1970/coredns
tcp6       0      0 :::8181                 :::*                    LISTEN      1970/coredns
tcp6       0      0 :::53                   :::*                    LISTEN      1970/coredns
udp6       0      0 :::53                   :::*                                1970/coredns
[root@localhost ~]#

可以看到,现在coredns也监听8181端口了!如果需要就绪时监听别的端口,只需要将8181换成别的端口号就行。

1.4.4 root设置根目录插件

The default root is the current working directory of CoreDNS. The root plugin allows you to change this. A relative root path is relative to the current working directory. NOTE: The *root* directory is NOT currently supported by all plugins. Currently the following plugins respect the root plugin configuration:

  • file
  • tls
  • dnssec

This plugin can only be used once per Server Block.

  • root插件当前并未被所有插件支持。当前仅支持filetlsdnssec插件。
  • 该插件仅可用于每个服务器块一次。

以下来测试设置根目录的使用。

修改/etc/coredns/Corefile配置:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
## 直接关联自定义域名和 zone 文件
mycoredns.com:53 {
    forward . /etc/resolv.conf
    bind 0.0.0.0
    #  1. 指定根目录为 /etc/coredns/zones
    root /etc/coredns/zones
    #  2. 读取该目录下的 mycoredns.com 文件
    file mycoredns.com
}

## 全局递归解析配置
.:53 {
    forward . /etc/resolv.conf
    bind 0.0.0.0
    health :8080
    ready :8181
}

创建目录/etc/coredns/zones

1
mkdir -p /etc/coredns/zones

然后编写配置文件/etc/coredns/zones/mycoredns.com,其内容如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
; Filename: /etc/coredns/zones/mycoredns.com
; 用 ; 作为注释符, 不要用#井号作为注释符,也不要在行内进行注释
; 关键:必须指定,且末尾带 . (绝对域名标识)
$ORIGIN mycoredns.com.
; 默认 TTL 时间
$TTL 3600

; 必备 SOA 记录(无行内注释,格式规范)
; 必备 SOA 记录(不可缺失,否则 file 插件初始化失败)
; 格式说明:区域域名 TTL 类型 主DNS服务器 管理员邮箱 序列号 刷新时间 重试时间 过期时间 最小TTL
; 序列号 2026010301 ,这个每次修改配置时,建议值加1,避免缓存
; 刷新时间 3600
; 重试时间 1800
; 过期时间 604800
; 最小TTL  3600
@       IN      SOA     ns1.mycoredns.com.  admin.mycoredns.com.  (
                                2026010301
                                3600
                                1800
                                604800
                                3600
                                )

; NS 记录
@       IN      NS      ns1.mycoredns.com.
@       IN      NS      ns2.mycoredns.com.


; A 记录 - 先写整行注释说明,再写记录(合法写法)
@       IN      A       192.168.56.101
; ns1/ns2 子域名绑定
ns1     IN      A       192.168.56.101
ns2     IN      A       192.168.56.101
; 这些相对域名会被补全为 api.mycoredns.com.、test.mycoredns.com.
www     IN      A       192.168.56.101
api     IN      A       192.168.56.101
test    IN      A       192.168.56.102

::: tip 提示

以上配置不知道什么意思没关系,照格式抄写就行。

:::

此时,启动coredns服务,然后尝试当coredns主机和远程主机上面解析域名:

在coredns主机上面请求域名:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
[root@localhost ~]# dig @localhost -p 53 api.mycoredns.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.16 <<>> @localhost -p 53 api.mycoredns.com
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 35380
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;api.mycoredns.com.             IN      A

;; ANSWER SECTION:
api.mycoredns.com.      3600    IN      A       192.168.56.101

;; AUTHORITY SECTION:
mycoredns.com.          3600    IN      NS      ns1.mycoredns.com.
mycoredns.com.          3600    IN      NS      ns2.mycoredns.com.

;; Query time: 0 msec
;; SERVER: ::1#53(::1)
;; WHEN: Sat Jan 03 20:29:15 CST 2026
;; MSG SIZE  rcvd: 167

[root@localhost ~]# dig @localhost -p 53 test.mycoredns.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.16 <<>> @localhost -p 53 test.mycoredns.com
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 64932
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;test.mycoredns.com.            IN      A

;; ANSWER SECTION:
test.mycoredns.com.     3600    IN      A       192.168.56.102

;; AUTHORITY SECTION:
mycoredns.com.          3600    IN      NS      ns1.mycoredns.com.
mycoredns.com.          3600    IN      NS      ns2.mycoredns.com.

;; Query time: 0 msec
;; SERVER: ::1#53(::1)
;; WHEN: Sat Jan 03 20:29:21 CST 2026
;; MSG SIZE  rcvd: 169

[root@localhost ~]# dig @localhost -p 53 www.mycoredns.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.16 <<>> @localhost -p 53 www.mycoredns.com
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58868
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.mycoredns.com.             IN      A

;; ANSWER SECTION:
www.mycoredns.com.      3600    IN      A       192.168.56.101

;; AUTHORITY SECTION:
mycoredns.com.          3600    IN      NS      ns1.mycoredns.com.
mycoredns.com.          3600    IN      NS      ns2.mycoredns.com.

;; Query time: 0 msec
;; SERVER: ::1#53(::1)
;; WHEN: Sat Jan 03 20:29:26 CST 2026
;; MSG SIZE  rcvd: 167

[root@localhost ~]#

在其他节点请求:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
[root@localhost ~]# hostname -I
192.168.56.102 10.0.3.15
You have mail in /var/spool/mail/root
[root@localhost ~]# dig @192.168.56.101 -p 53 api.mycoredns.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.16 <<>> @192.168.56.101 -p 53 api.mycoredns.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 49026
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;api.mycoredns.com.             IN      A

;; ANSWER SECTION:
api.mycoredns.com.      3600    IN      A       192.168.56.101

;; AUTHORITY SECTION:
mycoredns.com.          3600    IN      NS      ns1.mycoredns.com.
mycoredns.com.          3600    IN      NS      ns2.mycoredns.com.

;; Query time: 0 msec
;; SERVER: 192.168.56.101#53(192.168.56.101)
;; WHEN: Sat Jan 03 20:31:00 CST 2026
;; MSG SIZE  rcvd: 167

[root@localhost ~]# dig @192.168.56.101 -p 53 test.mycoredns.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.16 <<>> @192.168.56.101 -p 53 test.mycoredns.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 56644
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;test.mycoredns.com.            IN      A

;; ANSWER SECTION:
test.mycoredns.com.     3600    IN      A       192.168.56.102

;; AUTHORITY SECTION:
mycoredns.com.          3600    IN      NS      ns1.mycoredns.com.
mycoredns.com.          3600    IN      NS      ns2.mycoredns.com.

;; Query time: 0 msec
;; SERVER: 192.168.56.101#53(192.168.56.101)
;; WHEN: Sat Jan 03 20:31:05 CST 2026
;; MSG SIZE  rcvd: 169

[root@localhost ~]# dig @192.168.56.101 -p 53 www.mycoredns.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.16 <<>> @192.168.56.101 -p 53 www.mycoredns.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 60818
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.mycoredns.com.             IN      A

;; ANSWER SECTION:
www.mycoredns.com.      3600    IN      A       192.168.56.101

;; AUTHORITY SECTION:
mycoredns.com.          3600    IN      NS      ns1.mycoredns.com.
mycoredns.com.          3600    IN      NS      ns2.mycoredns.com.

;; Query time: 0 msec
;; SERVER: 192.168.56.101#53(192.168.56.101)
;; WHEN: Sat Jan 03 20:31:10 CST 2026
;; MSG SIZE  rcvd: 167

[root@localhost ~]#

Snipaste_2026-01-03_20-32-05.png

可以看到,本地和远程客户端都能正常请求到域名!!!

1.4.5 log日志插件
1.4.5.1 使用默认日志格式

修改配置文件Corefile为以下配置:

1
2
3
4
.:53 {
    forward . /etc/resolv.conf
    log
}

修改后,查看配置并重启服务:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
## 查看配置
[root@localhost ~]# cat /etc/coredns/Corefile
.:53 {
    forward . /etc/resolv.conf
    log
}
[root@localhost ~]# systemctl restart coredns

## 查看日志
[root@localhost ~]# journalctl -u coredns -n 6 -f
-- Logs begin at Fri 2026-01-30 21:22:53 CST. --
Jan 30 22:42:47 localhost.localdomain systemd[1]: Stopped CoreDNS DNS server.
Jan 30 22:42:47 localhost.localdomain systemd[1]: Started CoreDNS DNS server.
Jan 30 22:42:47 localhost.localdomain coredns[1600]: maxprocs: Leaving GOMAXPROCS=2: CPU quota undefined
Jan 30 22:42:47 localhost.localdomain coredns[1600]: .:53
Jan 30 22:42:47 localhost.localdomain coredns[1600]: CoreDNS-1.13.1
Jan 30 22:42:47 localhost.localdomain coredns[1600]: linux/amd64, go1.25.2, 1db4568

当你用systemctl start coredns启动服务时,CoreDNS 的默认输出(包括 log 插件的日志)会被 systemd 捕获,存放在 journal 日志中 ,此时就可以使用journal命令查看相关日志。以下是journal查日志的命令:

1
2
3
4
5
6
7
8
## 实时查看CoreDNS日志(推荐,能看到最新的DNS查询日志)
journalctl -u coredns -f

## 查看最近的100行日志
journalctl -u coredns -n 100

## 查看指定时间段的日志(比如今天的)
journalctl -u coredns --since today

此时,我们在远程客户端来请求coredns服务端,查看域名信息:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
[root@localhost ~]# dig @192.168.56.101 -p 53 www.baidu.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.16 <<>> @192.168.56.101 -p 53 www.baidu.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15352
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.baidu.com.                 IN      A

;; ANSWER SECTION:
www.baidu.com.          389     IN      CNAME   www.a.shifen.com.
www.a.shifen.com.       89      IN      A       183.2.172.17
www.a.shifen.com.       89      IN      A       183.2.172.177

;; Query time: 25 msec
;; SERVER: 192.168.56.101#53(192.168.56.101)
;; WHEN: Fri Jan 30 22:46:42 CST 2026
;; MSG SIZE  rcvd: 149

[root@localhost ~]# dig @192.168.56.101 -p 53 www.jd.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.16 <<>> @192.168.56.101 -p 53 www.jd.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27248
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.jd.com.                    IN      A

;; ANSWER SECTION:
www.jd.com.             30      IN      CNAME   www.jd.com.gslb.qianxun.com.
www.jd.com.gslb.qianxun.com. 18 IN      CNAME   www.jd.com.s.galileo.jcloud-cdn.com.
www.jd.com.s.galileo.jcloud-cdn.com. 18 IN CNAME wwwv6.jcloudimg.com.
wwwv6.jcloudimg.com.    18      IN      A       111.170.27.193

;; Query time: 27 msec
;; SERVER: 192.168.56.101#53(192.168.56.101)
;; WHEN: Fri Jan 30 22:46:49 CST 2026
;; MSG SIZE  rcvd: 269

[root@localhost ~]# dig @192.168.56.101 -p 53 www.mycoredns.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.16 <<>> @192.168.56.101 -p 53 www.mycoredns.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 20647
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.mycoredns.com.             IN      A

;; AUTHORITY SECTION:
com.                    600     IN      SOA     a.gtld-servers.net. nstld.verisign-grs.com. 1769784414 1800 900 604800 900

;; Query time: 61 msec
;; SERVER: 192.168.56.101#53(192.168.56.101)
;; WHEN: Fri Jan 30 22:47:17 CST 2026
;; MSG SIZE  rcvd: 125

[root@localhost ~]#

我查了三个域名,此时在coredns服务端可以看到对应日志:

1
2
3
Jan 30 22:46:42 localhost.localdomain coredns[1600]: [INFO] 192.168.56.102:44552 - 15352 "A IN www.baidu.com. udp 42 false 4096" NOERROR qr,rd,ra 149 0.025453156s
Jan 30 22:46:49 localhost.localdomain coredns[1600]: [INFO] 192.168.56.102:33977 - 27248 "A IN www.jd.com. udp 39 false 4096" NOERROR qr,rd,ra 269 0.026657191s
Jan 30 22:47:17 localhost.localdomain coredns[1600]: [INFO] 192.168.56.102:37653 - 20647 "A IN www.mycoredns.com. udp 46 false 4096" NXDOMAIN qr,rd,ra 125 0.06107392s

Snipaste_2026-01-30_22-48-35.png

说明开启log插件后的确生成了日志!!

日志格式 说明

您可以使用任何占位符值指定自定义日志格式。日志同时支持请求和答复占位符。

支持以下占位符

  • {type}:请求的 qtype
  • {name}:请求的 qname
  • {class}:请求的 qclass
  • {proto}:使用的协议(tcp 或 udp)
  • {remote}:客户端 IP 地址,对于 IPv6 地址,它们用括号括起来:[::1]
  • {local}:服务器 IP 地址,对于 IPv6 地址,它们用括号括起来:[::1]
  • {size}:请求大小(以字节为单位)
  • {port}:客户端端口
  • {duration}:响应持续时间
  • {rcode}:响应 RCODE
  • {rsize}:原始(未压缩)响应大小(客户端可能会收到更小的响应)
  • {>rflags}:响应标志,每个设置的标志都将显示,例如 “aa, tc”。这也包括 qr 位
  • {>bufsize}:查询中通告的 EDNS0 缓冲区大小
  • {>do}:查询中是否设置了 EDNS0 DO(DNSSEC OK)位
  • {>id}:查询 ID
  • {>opcode}:查询 OPCODE
  • {common}:默认的 Common Log Format(通用日志格式)。
  • {combined}:包含查询 opcode 的 Common Log Format(通用日志格式)。
  • {/LABEL}:如果任何元数据标签被括在 {/} 之间,则该标签将被接受为占位符,占位符将被对应的元数据值替换,或在未定义该标签时被默认值 - 替换。请参见metadata 插件,了解更多信息。

默认的 Common Log Format(通用日志格式)为

1
`{remote}:{port} - {>id} "{type} {class} {name} {proto} {size} {>do} {>bufsize}" {rcode} {>rflags} {rsize} {duration}`

上面我们的日志输出就是通用日志格式的。

1.4.5.2 使用自定义日志格式

我们也可以使用上面的各种占位符来自定义日志格式。

以下是一个测试,修改配置文件Corefile为以下配置:

1
2
3
4
.:53 {
    forward . /etc/resolv.conf
    log . "{remote}:{port} Request: 域名: {name} 类型: {type} 查询 ID: {>id}"
}

修改后,查看配置并重启服务:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
[root@localhost ~]# cat /etc/coredns/Corefile
.:53 {
    forward . /etc/resolv.conf
    log . "{remote}:{port} Request: 域名: {name} 类型: {type} 查询 ID: {>id}"
}
[root@localhost ~]# systemctl restart coredns
[root@localhost ~]# journalctl -u coredns -n 10 -f
-- Logs begin at Fri 2026-01-30 21:22:53 CST. --
Jan 30 23:11:57 localhost.localdomain coredns[1674]: [INFO] 192.168.56.102:43617 - 64440 "ANY IN taobao.com. tcp 39 false 65535" NOERROR qr,rd,ra 70 0.055068562s
Jan 30 23:14:23 localhost.localdomain coredns[1674]: [INFO] 192.168.56.102:48636 - 39365 "MX IN taobao.com. udp 39 false 4096" NOERROR qr,rd,ra 84 0.041251749s
Jan 30 23:14:23 localhost.localdomain coredns[1674]: [INFO] 192.168.56.102:57744 - 38079 "A IN anydfdasfads. udp 41 false 4096" NXDOMAIN qr,rd,ra 116 0.106458861s
Jan 30 23:20:11 localhost.localdomain systemd[1]: Stopping CoreDNS DNS server...
Jan 30 23:20:11 localhost.localdomain systemd[1]: Stopped CoreDNS DNS server.
Jan 30 23:20:11 localhost.localdomain systemd[1]: Started CoreDNS DNS server.
Jan 30 23:20:11 localhost.localdomain coredns[1717]: maxprocs: Leaving GOMAXPROCS=2: CPU quota undefined
Jan 30 23:20:11 localhost.localdomain coredns[1717]: .:53
Jan 30 23:20:11 localhost.localdomain coredns[1717]: CoreDNS-1.13.1
Jan 30 23:20:11 localhost.localdomain coredns[1717]: linux/amd64, go1.25.2, 1db4568

然后在客户端发送两个请求:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
[root@localhost ~]# dig @192.168.56.101 -p 53 jd.com A

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.16 <<>> @192.168.56.101 -p 53 jd.com A
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47880
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;jd.com.                                IN      A

;; ANSWER SECTION:
jd.com.                 60      IN      A       211.144.24.218
jd.com.                 60      IN      A       111.13.149.108
jd.com.                 60      IN      A       106.39.171.134
jd.com.                 60      IN      A       211.144.27.126

;; Query time: 27 msec
;; SERVER: 192.168.56.101#53(192.168.56.101)
;; WHEN: Fri Jan 30 23:20:37 CST 2026
;; MSG SIZE  rcvd: 123

[root@localhost ~]# dig @192.168.56.101 -p 53 jd.com AAAA

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.16 <<>> @192.168.56.101 -p 53 jd.com AAAA
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5511
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;jd.com.                                IN      AAAA

;; AUTHORITY SECTION:
jd.com.                 93      IN      SOA     ns1.jdcache.com. apollo.jd.com. 2015280403 10800 3600 604800 38400

;; Query time: 96 msec
;; SERVER: 192.168.56.101#53(192.168.56.101)
;; WHEN: Fri Jan 30 23:20:40 CST 2026
;; MSG SIZE  rcvd: 105

[root@localhost ~]#

此时在服务端有新的日志输出:

1
2
Jan 30 23:20:37 localhost.localdomain coredns[1717]: [INFO] 192.168.56.102:57552 Request: 域名: jd.com. 类型: A 查询 ID: 47880
Jan 30 23:20:40 localhost.localdomain coredns[1717]: [INFO] 192.168.56.102:41947 Request: 域名: jd.com. 类型: AAAA 查询 ID: 5511

Snipaste_2026-01-30_23-25-14.png

可以看到,自定义日志起作用了!!!

Licensed under the GNU General Public License v3.0