# CoreDNS

官网:https://coredns.io

CoreDNS 是一款配置非常简单地 DNS 解析工具

# 配置

点击这里下载最新版本,解压缩后得到一个名为 coredns 的可执行文件

程序运行时会加载同级目录中名为 Corefile 的配置文件,或使用 -conf 指定配置位置

配置文件详解:

.:1053 {
	import config/common.conf
	forward example.org 8.8.8.8
    forward . 202.102.128.68
    cache 600
    log {
       class error
    }
}
  • 1053 端口,通过此端口发起查询
  • import 引入配置文件
  • forward 将请求转发至指定的 DNS 地址, . 表示所有请求
  • cache 启用缓存,后跟缓存时间,单位/秒
  • log 日志,具体可以看这里

# 引入配置

CoreDNS 可以引入配置文件,一个被引入的文件示例如下:

假设文件名为 /home/cloud/test.conf

cache 900
forward www.baidu.com 114.114.114.114
forward www.microsoft.com 1.1.1.1

主配置:

.:1053 {
	import /home/cloud/test.conf
    forward . 8.8.8.8
    log {
       class error
    }
}

此时

  • 监听本机所有网卡地址,端口为 1053
  • 访问 www.baidu.com 会使用 114.114.114.114 查询;
  • 访问 www.microsoft.com会使用 1.1.1.1 查询;
  • 其他网站会使用 8.8.8.8 查询
  • 缓存为 900 秒;
  • 日志等级为 error

import 可使用 * 载入文件夹内的所有配置,例如 /home/cloud/*

分流查询时可国内外分别建立一个配置文件,维护更容易

提示

编写分流配置文件麻烦?本站提供一键输出工具 domain-parse

# 测试

运行 CoreDNS

./coredns

打开新的窗口发起查询

root@softproxy:~# dig -p 1053 @localhost ilouis.cn

; <<>> DiG 9.11.3-1ubuntu1.11-Ubuntu <<>> -p 1053 @localhost ilouis.cn
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 25435
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: f501111dc2bc8a53 (echoed)
;; QUESTION SECTION:
;ilouis.cn.			IN	A

;; ANSWER SECTION:
ilouis.cn.		120	IN	A	118.24.229.114

;; Query time: 25 msec
;; SERVER: 127.0.0.1#1053(127.0.0.1)
;; WHEN: Wed Mar 25 10:16:36 CST 2020
;; MSG SIZE  rcvd: 75

再次查询时时间会缩短 Query time: 0 msec

注意

配合其他程序使用时请注意其是否支持自定义 DNS 端口,否则应使用 53 端口

# 设置开机自启

  • 移动 coredns/usr/bin 目录

  • 创建 /etc/coredns 文件夹并将 Corefile 移动至此

  • 创建 coredns.service

vi /etc/systemd/system/coredns.service

#填入以下内容
[Unit]
Description=CoreDNS DNS server
Documentation=https://coredns.io
After=network.target

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

[Install]
WantedBy=multi-user.target

# 操作

可通过 systemctl 控制程序运行

systemctl enbale|disable|start|stop|restart coredns