加入收藏 | 设为首页 | 会员中心 | 我要投稿 辽源站长网 (https://www.0437zz.com/)- 云专线、云连接、智能数据、边缘计算、数据安全!
当前位置: 首页 > 站长资讯 > 外闻 > 正文

使用 CoreDNS 来应对 DNS 污染

发布时间:2019-04-02 15:28:47 所属栏目:外闻 来源:yangcs
导读:CoreDNS 是新晋的 CNCF 孵化项目,前几天已经从 CNCF 正式毕业,并正式成为 Kubernetes 的 DNS 服务器。CoreDNS 的目标是成为 cloud-native 环境下的 DNS 服务器和服务发现解决方案,即: Our goal is to make CoreDNS the cloud-native DNS server and se

从配置文件来看,我们定义了两个 server(尽管有 4 个区块),分别监听在 5300 和 53 端口。其逻辑图可如下所示:

使用 CoreDNS 来应对 DNS 污染

每个进入到某个 server 的请求将按照 plugin.cfg 定义顺序执行其已经加载的插件。

从上图,我们需要注意以下几点:

尽管在 .:53 配置了 health 插件,但是它并为在上面的逻辑图中出现,原因是:该插件并未参与请求相关的逻辑(即并没有在插件链上),只是修改了 server 配置。更一般地,我们可以将插件分为两种:

Normal 插件:参与请求相关的逻辑,且插入到插件链中;

其他插件:不参与请求相关的逻辑,也不出现在插件链中,只是用于修改 server 的配置,如 health,tls 等插件;

4. 在 MacOS 上部署 CoreDNS

既然 CoreDNS 如此优秀,我用它来抵御伟大的防火长城岂不美哉?研究了一圈,发现技术上还是可行的,唯一的一个缺点是不支持使用代理,不过你可以通过 proxychians-ng 或 proxifier 来强制使用代理。下面开始折腾。

安装

CoreDNS 是 golang 写的,所以只需要下载对应操作系统的二进制文件,到处拷贝,就可以运行了。

下面统统以 MacOS 为例作讲解。

  1. $ cd ~/Downloads 
  2. $ wget https://github.com/coredns/coredns/releases/download/v1.4.0/coredns_1.4.0_darwin_amd64.tgz 
  3. $ tar zxf coredns_1.4.0_darwin_amd64.tgz 
  4. $ mv ./coredns /usr/local/bin/ 

这里补充一句,CoreDNS 的二进制版本已经安装了所有的插件(plugins),不需要你自己编译。推荐下载二进制版本。

配置

要深入了解 CoreDNS,请查看其文档,及 plugins 的介绍。下面是我的配置文件:

  1. $ cat <<EOF > /usr/local/etc/Corefile 
  2. . { 
  3.   hosts { 
  4.     fallthrough 
  5.   } 
  6.  
  7.   forward . tls://8.8.8.8 tls://8.8.4.4 { 
  8.     tls_servername dns.google 
  9.     force_tcp 
  10.     max_fails 3 
  11.     expire 10s 
  12.     health_check 5s 
  13.     policy sequential 
  14.     except www.baidu.com 
  15.   } 
  16.  
  17.   proxy . 117.50.11.11 117.50.22.22 { 
  18.     policy round_robin 
  19.   } 
  20.  
  21.   cache 120 
  22.   reload 6s 
  23.   log . "{local}:{port} - {>id} '{type} {class} {name} {proto} {size} {>do} {>bufsize}' {rcode} {>rflags} {rsize} {duration}" 
  24.   errors 
  25. EOF 
  • hosts : hosts 是 CoreDNS 的一个 plugin,这一节的意思是加载 /etc/hosts 文件里面的解析信息。hosts 在最前面,则如果一个域名在 hosts 文件中存在,则优先使用这个信息返回;
  • fallthrough : 如果 hosts 中找不到,则进入下一个 plugin 继续。缺少这一个指令,后面的 plugins 配置就无意义了;
  • forward :这是另外一个 plugin。. 代表所有域名,后面的 IP 代表上游 DNS 服务器的列表。按照什么顺序溯源,由下面的 policy 指令决定;
  • tls://8.8.8.8 : 这里表示使用 DNS-over-TLS 协议访问 8.8.8.8。同时还需要通过 tls_servername 指定 DNS 名称。
  • force_tcp : 强制使用 TCP 协议溯源。这要求上游 DNS 必须支持 TCP 协议;
  • expect :指定哪些域名不按照本 plugin 配置溯源。这里主要用来排除国内的域名,然后通过下面的 proxy 转到国内的 DNS 进行解析。这里被排除的域名只填了一个 www.baidu.com,后面我们再通过脚本填上所有的国内域名;
  • proxy : 解析 forward 中被排除的域名。. 代表所有域名,后面的 IP 代表上游 DNS 服务器的列表,这里我选择的是 onedns。按照什么顺序溯源,由下面的 policy 指令决定;
  • cache : 溯源得到的结果,缓存指定时间。类似 TTL 的概念;
  • reload : 多久扫描配置文件一次。如有变更,自动加载;
  • log : 打印/存储访问日志。日志格式参考:https://coredns.io/plugins/log/;
  • errors : 打印/存储错误日志;

(编辑:辽源站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读