简单避免 DNS 污染的方法


说明

国内因为 GFW,对境外域名有 DNS 污染。

有时候即使使用了代理、VPN 等,但因为解析到的 IP 不正确,仍然无法访问。

常用办法是让 DNS 查询也走代理,但依赖代理本身的稳定性。这里介绍几种简单的绕过 DNS 污染的办法,有些场景下还挺实用。

使用非 53 端口查询

默认 DNS 查询方式是使用 UDP 协议走 53 端口。而 GFW 只污染 53 端口 dns 解析,使用非 53 端口查询 dns 即可绕过 DNS 污染。

境外的 OpenDNS 208.67.222.222/220 开放了 443 端口,我们可以直接使用。(自架服务的话,可以使用任意非 53 端口)

  • linux 下 /etc/resolv.conf 配置 443 端口即可
  • mac 下改 resolve.conf 配置不生效(暂没找到办法),但不过可以配成 127.0.0.1#53 再做个端口转发

如果你想指定特定域名通过境外 DNS 服务器查询的话,可以本地装 dnsmasq 软件,默认使用系统原来的 DNS 服务器,特定域名参考如下配置即可:

server=/twitter.com/208.67.222.222#443

使用 tcp 协议查询

GFW同时也没有对 dns 的 tcp 协议进行污染,所以可以使用 tcp 协议查询 53 端口。

dig 例子如下:

$ dig +short twitter.com @8.8.8.8
37.61.54.158
$ dig +short twitter.com @8.8.8.8 +tcp
199.59.148.10
199.59.149.230
199.59.148.82
199.59.149.198

这点一般只自己写 DNS 相关服务用的上,不好给电脑配置。

DNSCrypt

此外 OpenDNS 有做一个 dnscrypt 加密协议来保障 dns 解析安全,避免污染。

这个不算简单方法,因为需要额外装软件,但是十分安全的解析 DNS 的方案,类似 https 相对 http 。有一层加密。

客户端参考:DNSCrypt

服务端可以直接使用 OpenDNS 的 IP : 208.67.222.222/220

自架 DNS 服务器的话,可以使用服务端代理软件 dnscrypt-wrapper 给任意 DNS 服务器,增加加密功能。