from http://bullshitlie.blogspot.com/2012/03/dnsmasq-dns.html
至于DNS在瓷器国被污染的这回事,不用多解释了,正确的DNS解析对于使用squid透明代理进行翻墙极为重要,因为在squid在收到http请求前,域名已经在客户端先解析了。
以下说明如何获得正确的dns解析。
首先,你必须要有一台境外服务器,笔者用的是一台境外VPS。
在这台VPS上,安装bind。 (当然dnsmasq也可以。)
配置 /etc/named.conf options部分
在网关上或本地机器上,安装dnsmasq,配置/usr/local/etc/dnsmasq.conf
或者不调用配置文件,直接加参数运行亦可:
sudo dnsmasq --listen-address=127.0.0.1 --port=53 --server=vps-ip#bind-port-number-on-vps
好了,现在你的dnsmasq应该能解析出正确的dns了。
GFW对DNS只做了UDP 53端口的干扰。
使用例子:
sudo wg-quick up wg0
sudo networksetup -setdnsservers "Wi-Fi" 127.0.0.1
sudo dnsmasq --listen-address=127.0.0.1 --port=53 --server=vps-ip#bind-port-number-on-vps
如果你的本地机器是mac,不必往下看了。
(最后,以彼之道,施彼之身。利用iptables劫持局域网用户的DNS访问,以保证解析到正确的IP。
用dig 实验:
以下说明如何获得正确的dns解析。
首先,你必须要有一台境外服务器,笔者用的是一台境外VPS。
在这台VPS上,安装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,配置/usr/local/etc/dnsmasq.conf
--server=VPS的IP#3722 // 配置访问非标准端口3722!
--bogus-priv
--domain-needed
或者不调用配置文件,直接加参数运行亦可:
sudo dnsmasq --listen-address=127.0.0.1 --port=53 --server=vps-ip#bind-port-number-on-vps
好了,现在你的dnsmasq应该能解析出正确的dns了。
GFW对DNS只做了UDP 53端口的干扰。
使用例子:
sudo wg-quick up wg0
sudo networksetup -setdnsservers "Wi-Fi" 127.0.0.1
sudo dnsmasq --listen-address=127.0.0.1 --port=53 --server=vps-ip#bind-port-number-on-vps
如果你的本地机器是mac,不必往下看了。
(最后,以彼之道,施彼之身。利用iptables劫持局域网用户的DNS访问,以保证解析到正确的IP。
iptables -t nat -A PREROUTING -p udp -m udp --dport 53 -j REDIRECT --to-ports 53 )
用dig 实验:
第一次,用google dns解析,得出被污染的解析记录
第二次,用DNSMASQ解析,得出正确的解析记录
相关帖子:
http://briteming.blogspot.com/2012/02/dnsmasq.html
http://briteming.blogspot.com/2012/09/dnsmasquedns.html
http://briteming.blogspot.com/2014/03/dnsmasq-china-list.html
http://briteming.blogspot.com/2016/03/dnsmasq.html
https://wiki.archlinux.org/index.php/Dnsmasq_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)
------------------------------
利用dnsmasq搭建DNS服务器简易教程
Assume that you use Ubuntu. First download&install dnsmasq:
apt-get install dnsmasq
Then modify the config file: /etc/dnsmasq.conf, add the following lines (Assume that you use port 53 for DNS service):
port=53
server=208.67.222.222#5353
...
Add firewall rule if necessary (Assume that you use UFW):
ufw allow 53
Finally, enable&run:
service dnsmasq start
--------------------------
用dnsmasq做dns代理缓存服务器
一般说到dns,都会想到bind,bind虽然强大,但太复杂了,配置起来很头疼。用牛刀杀鸡倒不是鸡不死,而是怕那刀砍伤脚。dnsmasq这个小程序,使用上比dns始祖bind要简便得多,可以做正向dns代理,也可以直接做内部纯dns服务器用。
在debian/ubuntu下安装
apt-get install dnsmasq
配置
vi /etc/dnsmasq.conf
默认配置下,dnsmasq使用系统的/etc/resolv.conf并读取/etc/hosts,在配置里可以更改或者关闭,现在是修改了这两个,
其它的按默认:
resolv-file=/etc/dnsmasq.resolv.conf
addn-hosts=/etc/dnsmasq.hosts
(dnsmasq还支持dhcp服务,但一般不用搭理)
dnsmasq可以用hosts文件来设置域名:
例:test.sudone.com是不存在的域名,我在dnsmasq中指向到一个ip里:
echo "64.233.189.99 test.sudone.com" > /etc/dnsmasq.hosts
改完要重启
/etc/init.d/dnsmasq restart
做完之后,只要把本机dns指到dnsmasq的机器,就可以ping到test.sudone.com这个域名.