官方给出的安装方式还是很多的 , 有二进制 , 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
的插件是记录每次查询的 .
关于转发的功能 , 依靠的是 proxy 和 forward2个插件
例子:
. {
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
}
coredns没有原生的解析器, 可以用libunbound , 要想加上必须重新编译 , 并且启用 unbound plugin.
要用source 编译 , 之后把unbound:github.com/coredns/unbound
加到 plugin.cfg
.文件里面
之后执行go generate
, 最后make
.