IT技术博客大学习 共学习 共进步

自建DNS以防止GFW干扰

A programmer's life 2014-03-19 23:03:04 浏览 12,943 次

   国内用户无法访问youtube的主要原因是当浏览器进行DNS查询时GFW 会拦截此请求并返回错误的结果。那么一个解决办法就是采用更安全的传输方式。

   DNS请求默认是采用UDP协议,它是无连接的,所以UDP协议头部的IP地址非常容易被伪造,拦截的成本很低。但是DNS也支持tcp协议,经众多网友测试,GFW 不会处理TCP形式的DNS请求。

   所以解决办法之一就是:自建一个本地的DNS服务器,把TCP协议的DNS服务转成UDP的,以给其它程序用。

   此处推荐一个软件:unbound。它是FreeBSD操作系统下的默认DNS服务器软件。它不仅支持FreeBSD,也支持Linux和Windows。其中Windows版本的下载地址是:http://www.unbound.net/downloads/unbound_setup_1.4.21.exe 这是一个安装文件,默认会安装在C:\Program Files (x86)\Unbound目录下。

   然后修改unbound的配置文件:

   用记事本打开C:\Program Files (x86)\Unbound\service.conf,把里面原来的东西统统删掉,然后换成

   server:
 # verbosity level 0-4 of logging
 verbosity: 1

 # if you want to log to a file use
 logfile: ”C:\unbound.log”
  interface: 0.0.0.0
  do-ip6: no
  tcp-upstream: yes
  access-control: 192.168.1.0/16 allow
 
  val-permissive-mode: yes  
  module-config: ”iterator”
   
  forward-zone:
    name: ”.”
    forward-addr: 8.8.8.8

   然后用开始菜单打开命令行提示符,执行以下两条命令

   sc stop unbound

   sc start unbound

   

   然后测试一下是不是好了。

   

   如果好了,就去修改网络连接属性,让默认的DNS服务器指向本地的127.0.0.1

   

   

   然后直接打开浏览器上网就行了。

   如果有一天这个办法不好使了,我再告诉你一个办法:

   unbound支持ssl的upstream和listener。所以你在境外找一台主机用unbound开一个ssl的tcp端口,然后本机再开一个作为它的缓存。嗯嗯 。

建议继续学习

  1. 强制刷新本地 DNS 缓存记录 (阅读 10,640)
  2. 2014年1月21日中国互联网DNS瘫痪事件原因分析 (阅读 8,221)
  3. 关于 SOCKS 代理的远端 DNS 解析 (阅读 7,744)
  4. DNS 隧道 (阅读 7,022)
  5. 什么是DNS劫持和DNS污染? (阅读 6,103)
  6. DNS解析过程及DNS TTL值 (阅读 5,902)
  7. CentOS下通过Webmin管理BIND实现DNS轮询 (阅读 5,761)
  8. dig挖出DNS的秘密 (阅读 5,620)
  9. nslookup通往DNS的桥梁 (阅读 5,621)
  10. public DNS servers (阅读 5,240)