利用DNSMASQ获得正确DNS解析

原文:http://bullshitlie.blogspot.com/2012/03/dnsmasq-dns.html

至于DNS在瓷器国被污染的这回事,不用多解释了,正确的DNS解析对于使用squid透明代理进行翻墙极为重要,因为在squid在收到http请求前,域名已经在客户端先解析了

以下说明如何获得正确的dns解析。

首先,你必须要有一台境外服务器,笔者用的是一台境外VPS。

在这台VPS上,安装isc bind。 (当然dnsmasq也应该可以。)

配置 /etc/named.conf options部分
options {
        listen-on port 3722 { any; };  // 要点,必须绑定非标准端口(non 53 UDP)
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        allow-query     { any; };
        recursion yes;

        forward only;
        forwarders { 208.67.222.222; 208.67.220.220; }; // 这里选取VPS访问最快的DNS服务器,笔者选得是OpenDNS,毫秒级。
        max-cache-size 32M;
        cleaning-interval 480;
        lame-ttl 1800;
        max-ncache-ttl 166000;
        max-cache-ttl 86400;
        edns-udp-size 512;
        max-udp-size 512;
};


在网关上,安装dnsmasq,配置/etc/dnsmasq.conf
no-resolv
server=VPS的IP#3722  // 配置这里访问非标准端口!
bogus-priv
domain-needed
filterwin2k
no-hosts
cache-size=8192
stop-dns-rebind
neg-ttl=3600
~

好了,现在你的dnsmasq应该能解析出正确的dns了。

看来GFW对DNS只做了UDP 53端口的干扰。


最后,以彼之道,施彼之身。利用iptables劫持局域网用户的DNS访问,以保证解析到正确的IP。

iptables -t nat -A PREROUTING -p udp -m udp --dport 53 -j REDIRECT --to-ports 53

用dig 实验:

第一次,用google dns解析,得出被污染的解析记录


第二次,用DNSMASQ解析,得出正确的解析记录

发表评论