Update (2014-01-18): 全部国外流量走 VPN 后,发现国外部分下载网站及 GitHub 等访问缓慢,因此改回了原来的黑名单做法。启用了另外一台服务器做 DNS,这台服务器上全部国外流量走 VPN。这样 DNS 污染问题彻底解决了,正常的国外网站访问也不至于明显减慢。

Original Post (2014-01-12):

  1. 国外 IPv4 全部走我个人的VPN。这是由于现在越来越多的网站用了 Amazon 之类的云服务,IP地址不再是静态的小范围。与其把这些云服务的IP段都找出来,还不如让国外的IP全部走VPN,因为根据我对少院机房的统计,访问国外的流量还不到国内的10%。大部分流量都是在国内网站看视频、在国内网站下载东西。
  2. 国外 IPv6 返回 unreachable,国内 IPv6 正常访问。因为我的VPN不支持IPv6,只能走运营商线路。很多浏览器在域名同时有IPv4和IPv6地址时默认会访问IPv6,结果被 connection reset(IPv6没有墙的时代一去不复返了)。
  3. 取消 bind9 的 resolver,全部自己去递归查询。关闭 IPv6,都使用 IPv4 去递归。结合前面两条,国内DNS看到的就是科大IP,国外DNS看到的是VPN的IP,既能防污染又对CDN友好。只有一种情况会干扰CDN:国内CDN的DNS服务器在国外,不过我觉得这种情况应该很少。