使用 Pcap DNS Proxy 解决 DNS AAAA 记录被投毒

又一款优秀的 DNS 递归查询程序。

对 DNS 处理的开源软件有十分多,例如专注与 cache 的 dnsmasq,OpenWRT 上面的 DNS + DHCP 就是基于它完成。SYSUv6 DNS 的大部分功能也是基于 dnsmasq 实现。可是它的缺点也是显而易见,毕竟是国外开源作者的作品,不支持 TCP 方式查询,不支持修改 TTL 这些中国特色功能。

此外我也用过 ChinaDNS,它是 Shadowsocks 作者的作品,自从喝茶之后就没用更新了。但不是专业的 DNS cache,稳定性始终比 dnsmasq 差一点点。加上国内奇葩的网络质量,不支持 IPv6 的它已经被我抛弃了。

pdnsd 最大的特点是支持 TCP 查询和 TTL 修改,也支持 IP 地址过滤,一直配合 dnsmasq 使用,直到我遇到了 Pcap DNS Proxy。

如果在解决 DNS 被投毒方面说,前面提到的软件算是小工具,Pcap DNS Proxy 则是黑科技。

原生支持 IPv6,具有超级丰富的功能与可配置的选项,单是文档就足够你看大半个小时。

例如你可以用下面两条命令获取中国路由表,过滤国外 DNS 返回的结果。

curl 'https://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest' | grep ipv4 | grep CN | awk -F\| '{printf("%s/%d\n", $4, 32-log($5)/log(2))}' > Routing_IPv4.txt
curl 'https://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest' | grep ipv6 | grep CN | awk -F\| '{printf("%s/%d\n", $4, $5)}' > Routing_IPv6.txt

用正则表达式定制不同域名需要的解析方式。

.*\bapppsd\.com
.*\bapprcn\.com
.*\bappsina\.com
.*\bapptao\.com
.*\bappying\.com
.*\baq200\.com
.*\barchlinuxcn\.org

支持过滤黑名单 IP

[Blacklist]
## Special DNS poisoning addresses
8.7.198.45 ALL

## DNS provider or ISP advertisement/cache server addresses
## Some DNS providers will return certain IP addresses for non-exist domain for their advertisement.
## Some ISP will hijack domain result to their cache server.
# OpenDNS
67.215.65.132|67.215.77.132 ALL
208.69.34.132|208.69.32.132 ALL

# DNSPai
101.226.10.8 ALL
123.125.81.12 ALL

# China Unicom
123.129.254.11-123.129.254.19 ALL
202.106.199.34-202.106.199.38 ALL
220.250.64.18-220.250.64.30 ALL
220.250.64.225-220.250.64.228 ALL

# China Telecom
58.53.211.46|58.53.211.47 ALL
61.139.8.101-61.139.8.104 ALL
60.191.124.236 ALL
111.175.220.163 ALL
180.168.41.175 ALL
202.102.110.203|202.102.110.205 ALL

# China Mobile
103.207.229.0-103.207.229.255 ALL
120.196.0.0-120.196.0.255 ALL
120.198.244.0-120.198.244.255 ALL
211.139.136.0-211.139.136.255 ALL

# Great Wall Broadband Network
124.14.8.196 ALL

而且还具备 CNAME HOST 功能

[CNAME Hosts]
59.68.77.2 .*\.b0\.aicdn\.com

效果如下

terrys-MBP:~ terrychan$ dig t.32ph.com

; <<>> DiG 9.8.3-P1 <<>> t.32ph.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10401
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1220
;; QUESTION SECTION:
;t.32ph.com.            IN  A

;; ANSWER SECTION:
t.32ph.com.     388 IN  CNAME   terryhubcdn.b0.aicdn.com.
terryhubcdn.b0.aicdn.com. 7200  IN  A   59.68.77.2

;; Query time: 4 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Thu May 26 20:01:54 2016
;; MSG SIZE  rcvd: 90

Pcap DNS Proxy 几乎适合当下所有的场景,当然就靠你调整配置的功力了,或者你可以参考 SYSUv6-DNS