- 本帖所述主要内容是相关 resolver(5) ,具体内容是用其绕过大陆的 DNS 投毒。
- 本帖有关绕过 DNS 投毒的原理为使用非 53 端口的 DNS 公共服务器
- 当然在路由器上使用 dnsmasq 或自建 DNS 有时候会是更好的解决方案,不过本帖不讨论其他防 DNS 投毒方案,亦不作比较。
下面为方案介绍
简单应用(/etc/resolv.conf)
修改 /etc/resolv.conf *,使用如下 nameserver
nameserver 208.67.222.222.443
nameserver 208.67.220.220.443
系统在解析域名时即会使用 OpenDNS 的 443 端口的 DNS 服务了。(这里说是系统解析似乎不大准确,意会即可)
以上修改即可绕过 DNS 投毒。
[*] 在_系统偏好设置_中所做 DNS 修改会重新生成 /etc/resolv.conf ,需要重新修改改文件。
进阶应用(/etc/resolver/*)
进阶应用所述方案符合如下需求:
- 不修改
/etc/resolv.conf - 指定域使用指定
nameserver
方案如下:
新建文件 /etc/resolver/twitter.com,内容如下:
nameserver 208.67.222.222
port 443
意思是让 twitter.com 域的所有域名查询使用 208.67.222.222:443 DNS 服务器。
所有的 resolver 可以通过执行 scutil --dns 查看。
添加其他域(以 google.com 为例):
cd /etc/resolver
ln -sfv twitter.com google.com
其他说明
- 查询所用 resolver 的顺序策略参看 resolver(5) 的
SEARCH STRATEGY区块。 host,nslookup,dig等自实现 DNS 查询程序的默认查询服务器均只从/etc/resolv.conf读取(dig还有${HOME}/.digrc) ,故不作上述进阶应用方案的验证方案;- 可使用
ping,telnet,traceroute等网络程序,或其他任意使用libresolv的程序来确认方案是否有效;当然直接用浏览器也是可以的。 - 其他可用的非 53 端口 DNS 公共服务器:https://github.com/jedisct1/dnscrypt-proxy/blob/master/dnscrypt-resolvers.csv (所列服务器不使用 dnscrypt 亦可用,只是不加密)