CoreDNS安装和配置

安装

官方给出的安装方式还是很多的 , 有二进制 , docker等等 , 下面我们采用的是github方式

需要提前安装go环境 , 需要Go 1.9.x的版本

mkdir -p $GOPATH/src/github.com/coredns
cd $GOPATH/src/github.com/coredns/
git clone git@github.com:coredns/coredns
cd coredns
make CHECKS= godeps all

测试

启动coredns

./coredns -dns.port=1053

测试

dig @localhost -p 1053 a whoami.example.org

配置

配置文件一般是在当前运行程序下的文件夹下的Corefile文件 , 可以用-conf 指定特定路径下的Corefile文件

添加插件

插件添加的语法

例子

. {
    chaos
}

在一对花括号里直接加上插件的名字就可以了 , 这种一对花括号 , 加上之前的. 叫做一个Server Block

当然也可以这样配置插件

. {
    plugin {
       # Plugin Block
    }
}

示例

coredns.io:5300 {
    file db.coredns.io
}

example.io:53 {
    log
    errors
    file db.example.io
}

example.net:53 {
    file db.example.net
}

.:53 {
    kubernetes
    proxy . 8.8.8.8
    log
    errors
    cache
}

上述例子达到的效果是

其中的 db.example.org 文件可以这样写

$ORIGIN example.org.
@	3600 IN	SOA sns.dns.icann.org. noc.dns.icann.org. (
				2017042745 ; serial
				7200       ; 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.

www     IN A     127.0.0.1
        IN AAAA  ::1

最后的2条定义了www.example.org. 的地址是127.0.0.1和(the IPv6) ::1.

例子中的log , errors 都是插件名称 , 表示用到这个插件 , 其中的log的插件是记录每次查询的 .

转发

关于转发的功能 , 依靠的是 proxyforward2个插件

例子:

. {
    forward . 8.8.8.8 9.9.9.9
    log
}

还有一种情况是我们希望example.org交给8.8.8.8这个dns查询 , 其余由我们本地的dns解析

example.org {
    forward . 8.8.8.8
    log
}

. {
    forward . /etc/resolv.conf
    log
}

Recursive Resolver递归解析器

coredns没有原生的解析器, 可以用libunbound , 要想加上必须重新编译 , 并且启用 unbound plugin.

要用source 编译 , 之后把unbound:github.com/coredns/unbound 加到 plugin.cfg.文件里面

之后执行go generate , 最后make.