基础服务:DNS:解决DNS污染问题
大约 3 分钟
前言
国内环境下,除了不能直连海外服务器问题外,还有DNS污染问题让人恼火,因此需要了解一下怎么解决。
什么是DNS污染
又称DNS“投毒”,执行DNS劫持攻击导致下游DNS服务器缓存了错误记录的现象。详见wiki
正文
通过使用dnsmasq和DOH服务器解决DNS污染问题。
实现原理:
- 主要使用加密的DNS查询。普通DNS流量因为都是明文,没有加密才会被导致篡改,给DNS流量加密,套一层解决。加密方法主要有这么几种。
DOH (DNS Over HTTPS)
, DOT (DNS Over TLS)
,DNS Encrypt
- 配合使用DNS缓存服务器。加密的DNS查询消耗大,增加DNS查询的延迟,因此需要使用缓存服务器加快查询。
具体实现
- 在本地部署一台DNS缓存服务器,然后配置它的上游DNS服务器通讯加密。实现方法可以是DOH或是DNS Encrypt。
- 本地其他主机的DNS服务器指向到本地DNSMasq缓存服务器。
方案选项1:配置本地DNS缓存服务器 + DOH
步骤1:选择DOH服务器作为上游DNS服务器
当前使用比较多的是DOH,比较著名的支持DOH的公网DNS服务器有:
- Cloudflare的
1.1.1.1
- Google的
8.8.8.8
步骤2:部署本地DNS缓存服务器
本地DNS缓存服务器,它扮演DOH客户端,负责转发本地的DNS查询给外部的DOH服务器,需要本地部署。 可以使用支持DOH的客户端软件部署本地DNS缓存服务器。比较著名支持DOH的DNS客户端软件有:
dnsmasq
,确保您的 Dnsmasq 版本是 2.83 或以上dnscrypt-proxy
配置参考
# /etc/dnsmasq.conf
server=https://dns.example.com/dns-query
server=https://dns2.example.com/dns-query
步骤3:使用本地缓存服务器dnsmasq
- 如果是dnsmasq和本机一台主机使用,可以修改
/etc/resolv.conf
。删除所有nameserver
,添加一行nameserver 127.0.0.1
即可。 - 如果是供内网所有主机使用,修改内网主机的DNS服务器指向到dnsmasq。