使用了 ChinaDNS 作为本地 DNS 服务器一段时间后,发现它似乎只是单纯的分流器,并没有缓存功能,虽然污染问题得到一定程度缓解,但没有缓存功能还是拖累了上网体验。因此又去寻找一些更好用的 DNS 轮子。
一开始是用 Overture 的,也不知道是不是因为我配置的问题,一旦需要查询大量的DNS信息的时候,我用做DNS服务器的树莓派3B+就会稳稳地爆缸,CPU使用率稳稳的超过100%,想要通过提升缓存数值的方法来解决这个问题,结果搞了半天无论怎么调CacheSize
数值都好像没起到啥作用。后来就又去看了下CoreDNS
,结合类库大魔王大佬的配置文件一键生成脚本,感觉是真的好用。因为CoreDNS
采用了Caddy
的框架,所以无论是弄插件还是配置文件,使用过Caddy
的用户应该很快就能上手CoreDNS
.
首先你需要搭建好Go
编译环境,要求Go>=1.11
并且开启go module
.
wget https://dl.google.com/go/go1.14.2.linux-amd64.tar.gz
tar -C /usr/local -xzf go1.12.6.linux-amd64.tar.gz
echo 'export PATH=$PATH:/usr/local/go/bin' >>/etc/profile
source /etc/profile
因为编译CoreDNS
需要用到go module
,由于某些原因,需要配置一下goproxy
,我这里用的是可信度还行的阿里云的源,如果是在非大陆的服务器上编译的话,可以省略一下这个步骤。
export GOPROXY=https://mirrors.aliyun.com/goproxy/
而后,你需要做的就是从 GitHub 上git clone
了
git clone https://github.com/coredns/coredns
cd coredns
如果我们用到类库大魔王大佬的脚本的话,就还需要额外在plugin.cfg
的文件结尾处添加以下内容:
proxy:github.com/coredns/proxy
ads:github.com/c-mueller/ads
bogus:github.com/missdeer/bogus
ipset:github.com/missdeer/ipset
redisc:github.com/miekg/redis
dnsredir:github.com/leiless/dnsredir
然后就是
make
你可以在官方 GitHub 上的release上下载适合各个平台已经编译好的文件,也可以去找类库大魔王大佬在GitHub提供的已经编译好了适用于各个平台的文件,与官方 release 不同的是而且Corefile
配置文件也已经写好,真正的开箱即用!
官方GitHub文档上提供了Docker
的部署方法,我也就照抄一下官方的部署方法吧
docker run --rm -i -t -v $PWD:/v -w /v golang:1.14 make
这部分最重要的就是配置好Corefile
文件了,我根据类库大魔王大佬的一键生成脚本修改了下,以符合自己使用的实际情况。
#!/bin/bash
china=`curl -sSL https://github.com/felixonmars/dnsmasq-china-list/raw/master/accelerated-domains.china.conf | while read line; do awk -F '/' '{print $2}' | grep -v '#' ; done | paste -sd " " -`
apple=`curl -sSL https://github.com/felixonmars/dnsmasq-china-list/raw/master/apple.china.conf | while read line; do awk -F '/' '{print $2}' | grep -v '#' ; done | paste -sd " " -`
google=`curl -sSL https://github.com/felixonmars/dnsmasq-china-list/raw/master/google.china.conf | while read line; do awk -F '/' '{print $2}' | grep -v '#' ; done | paste -sd " " -`
cat>Corefile<<EOF
.:533 {
hosts {
fallthrough
}
forward . 208.67.222.222:443 208.67.222.222:5353 208.67.220.220:443 208.67.220.220:5353 127.0.0.1:5301 {
except $china $apple $google cdn.jsdelivr.net
}
proxy . 127.0.0.1
log
cache
health
reload
}
.:5301 {
bind 127.0.0.1
forward . tls://115.159.131.23 {
tls_servername dns.rubyfish.cn
}
cache
}
EOF
因为我在路由器中使用OpenClash
配置了去广告规则,所以我把原脚本的ads
规则给去掉了,并且把上游无污染DNS换成了红鱼DNS
来提升响应速度。
注意:对于这种非53
端口的DNS要用在路由器上,我们需要在OpenWRT
上配合一些如smartdns
和Openclash
等插件来使用。
另外,我们也可以用Systemd
和Supervisor
来管理Coredns
创建Systemd
的配置文件(参考自Rat大佬的写法,请根据实际目录自行修改):
#直接复制到终端中去
cat > /etc/systemd/system/coredns.service <<EOF
[Unit]
Description=coredns
After=network.target
Wants=network.target
[Service]
Type=simple
PIDFile=/var/run/flowerss.pid
WorkingDirectory=/root/coredns
ExecStart=/root/coredns/coredns
RestartPreventExitStatus=23
Restart=always
[Install]
WantedBy=multi-user.target
EOF
然后执行
systemctl start coredns
systemctl enable coredns
如果没有Systemd
,我们也可以使用Supervisor
来管理
# 安装 Supervisor
apt -y install supervisor
# 直接复制到终端中去
cat > /etc/supervisor/conf.d/coredns.conf <<EOF
[program:coredns]
priority=1
directory=/root/coredns
command=/root/coredns/coredns -conf /root/coredns/Corefile
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/var/log/supervisor/overture.log
EOF
然后执行
supervisorctl update
supervisorctl status coredns
如果表示RUNNING
就表示运行成功了。
dig
图我就不放了,因为抗污染效果那是妥妥的。这里我用dnsperf
让coredns
和overture
对比着做了下负载测试。测试的域名如下:
iidns.com A
dnspod.com A
dnspod.net A
hichina.com A
xincache.com A
dnsv2.com A
dnsv3.com A
dnsv4.com A
dnsv5.com A
myhostadmin.net A
cnolnic.com A
cnolnic.net A
dns.com.cn A
cnmsn.net A
biz.cn.com A
alidns.com A
aliyun.com A
bddns.cn A
360wzb.com A
dnsdun.com A
dnsdun.net A
china.net A
ffdns.net A
xundns.com A
jiasule.net A
nsyunjiasu.com A
cdncenter.com A
anquanbao.com A
sina.com.cn A
72dns.com A
idc1.cn A
ezdnscenter.com A
01isp.com A
01isp.net A
800hr.net.cn A
dns.net.cn A
okidc.com A
cdnhost.cn A
eznowdns.net A
ndns.cn A
dnsng.net A
wanmeilink.com A
22.cn A
zjdomain.com A
zol.com A
ce.net.cn A
4everdns.com A
east.net.cn A
zdnscloud.net.cn A
51.net A
cloudcdns.com A
pubyun.com A
qq.com A
cdeledu.com A
myhexin.com A
bidns.net A
inc365.com A
zdnscloud.com A
china.net A
gzidc.com A
ns365.net A
51dns.com A
nease.net A
xr.net.cn A
cnkuai.cn A
cnkuai.com A
taobao.com A
aoyou365.com A
dnspai.com A
360safe.com A
sino.net.cn A
sfn.cn A
yovole.com A
duowanns.com A
ucweb.com A
jcloud.com A
eedns.com A
maff.com A
szhot.com A
bigwww.com A
ns1oray.net A
ns2oray.net A
cdnudns.com A
zhujiwu.com A
jjworld.net.cn A
dns-diy.com A
iidns.com A
dns.com A
youku.com A
zj01.com A
cdns.cn A
bdydns.cn A
baidu.com A
139135.com A
hwclouds.net A
hwclouds.com A
hwclouds.cn A
alibabadns.com A
iqiyi.com A
jdcloud.com A
jdcache.com A
jd.com A
sohu.com A
dns234.net A
测试结果如下:
可以看到,这两个在首次测试中差距明显,但经过缓存之后,能做到基本感受不到差别。
GitHub:missdeer/coredns_custom_build
本文作者:NiNya
本文链接:https://lilynas.com/archives/648/
最后修改时间:2020-04-30 12:53:21
本站未注明转载的文章均为原创,并采用 CC BY-NC-SA 4.0 授权协议,转载请注明来源,谢谢!