在此文https://briteming.blogspot.com/2019/06/high-performance-dns-over-https-client.html的“我的补充说明“里,我提到在vps上,安装dnsmasq.dnsmasq其实只是一个dns forwarder,它本身并不能做dns解析。
(在自己的vps上安装dnsmasq
所有的配置都在一个文件中完成
如果装在本地机器上,那么它就是我在https://briteming.blogspot.com/2019/12/dns.html内所说的“各种dns forwarder,dns mapper”之一而已,因为这类程序都是未加密的连接,所以都不可靠。用不了多久,就不行了。
但是如果装在vps上的话, 虽然它仍然是一个dns forwarder,但是通过vps上的/etc/resolv.conf内🈯️定的dns server,我的是8.8.8.8,
在本地机器,先连接vps上的dnsmasq,然后通过vps上的dnsmasq去连接8.8.8.8,由8.8.8.8进行域名解析。
实际例子:https://briteming.blogspot.com/2015/01/chinadns-dns.html
其实dnsmasq可搭配使用的dns forwarder/dns mapper的例子远不止chinadns。dnsmasq可搭配使用绝大部分的各类dns forwarder/dns mapper。比如:
1. 利用dnsproxy-by-zhengxinhn解决dns污染问题
------------------------------------------
基于上述原理,我们可以在
默认情况下,
(在自己的vps上安装dnsmasq
apt-get install dnsmasq -y或yum install -y dnsmasq
所有的配置都在一个文件中完成
/etc/dnsmasq.conf,
Dnsmasq配置文件是/etc/dnsmasq.conf
,下面对Dnsmasq中和DNS相关的配置项进行说明:用指定的端口代替默认的DNS 53端口,如果设置为0,则完全禁止DNS功能. port=53538
从不转发格式错误的域名:
domain-needed
从不转发不在路由地址中的域名:
bogus-priv
然后,运行dnsmasq即可。)
如果装在本地机器上,那么它就是我在https://briteming.blogspot.com/2019/12/dns.html内所说的“各种dns forwarder,dns mapper”之一而已,因为这类程序都是未加密的连接,所以都不可靠。用不了多久,就不行了。
但是如果装在vps上的话, 虽然它仍然是一个dns forwarder,但是通过vps上的/etc/resolv.conf内🈯️定的dns server,我的是8.8.8.8,
在本地机器,先连接vps上的dnsmasq,然后通过vps上的dnsmasq去连接8.8.8.8,由8.8.8.8进行域名解析。
实际例子:https://briteming.blogspot.com/2015/01/chinadns-dns.html
其实dnsmasq可搭配使用的dns forwarder/dns mapper的例子远不止chinadns。dnsmasq可搭配使用绝大部分的各类dns forwarder/dns mapper。比如:
1. 利用dnsproxy-by-zhengxinhn解决dns污染问题
git clone https://github.com/zhengxinhn/dnsproxy dnsproxy-by-zhengxinhn
cd dnsproxy-by-zhengxinhn
make
cd src
src目录里面生成了可执行文件dnsproxy
./dnsproxy -h
sudo ./dnsproxy -p 53 --remote-addr=my-vps-ip --remote-port=53538
在mac机器上。
mkdir proxydns
cd proxydns
unzip proxydns-master.zip
cd proxydns-master
chmod 755 make.sh
./make.sh
(会在当前目录下,生成可执行文件proxydns)
sudo ./proxydns my-vps-ip 53538 53
3. git clone https://github.com/vietor/dnsproxy dnsproxy-by-vietor
cd dnsproxy-by-vietor
make
cd src (在src目录下,生成了可执行文件dnsproxy)
./dnsproxy -h
./dnsproxy --port=53 --remote-addr=my-vps-ip --remote-port=53538
4. 利用DNS-reverse-proxy解决dns污染问题
在mac机器上。首先安装go环境。然后,
cd dns-reverse-proxy
go build .
(在当前目录下,会生成可执行文件dns-reverse-proxy)
sudo ./dns-reverse-proxy -address :53 -default my-vps-ip:53538
5.利用udpxd解决dns污染问题
在本地机器mac上。
git clone https://github.com/TLINDEN/udpxd udpxd-by-TLINDEN
cd udpxd-by-TLINDEN
make
(会在当前目录,生成可执行文件udpxd)
sudo ./udpxd -l 127.0.0.1:53 -t my-vps-ip:53538
(相关帖子:https://briteming.blogspot.com/2019/11/udpxddns.html)
6. 利用portfwd解决dns污染问题
在本地机器mac上。
git clone https://github.com/rssnsj/portfwd portfwd-by-rssnsj
cd portfwd-by-rssnsj
cd src
make
(在当前目录,会生成可执行文件udpfwd)
sudo ./udpfwd 127.0.0.1:53 my-vps-ip:53538
7.利用dns2tcp解决dns污染问题
在本地机器mac上。
brew install libuv
git clone https://github.com/zfl9/dns2tcp dns2tcp-by-zfl9
cd dns2tcp-by-zfl9
make
(在当前目录下,会生成可执行文件dns2tcp)
sudo ./dns2tcp -L"127.0.0.1#53" -R"my-vps-ip#53538"
或者ctl+c ,
接着:
make install
(在/usr/local/bin/里面会生成dns2tcp)
sudo dns2tcp -L"127.0.0.1#53" -R"my-vps-ip#53538"
8.利用crappydns解决dns污染问题
9.在mac机器上。8.利用crappydns解决dns污染问题
在mac机器上。
git clone https://github.com/nekolab/CrappyDNS CrappyDNS-by-nekolab
cd CrappyDNS-by-nekolab
./autogen.sh
./configure
make
(在当前目录的子目录src里面,会生成可执行文件crappydns)
cd src
git clone https://github.com/nekolab/CrappyDNS CrappyDNS-by-nekolab
cd CrappyDNS-by-nekolab
./autogen.sh
./configure
make
(在当前目录的子目录src里面,会生成可执行文件crappydns)
cd src
sudo ./crappydns --listen 127.0.0.1 --port 53 --good-dns udp://my-vps-ip:53538
git clone https://github.com/creac/dnsAgent dnsAgent-by-creac
cd dnsAgent-by-creac
nano dnsAgent.py
(修改第15行为:
('my-vps-ip',53538),
删除第16行)
sudo python dnsAgent.py
(此命令是运行在后台的。)
10.利用simple-dns解决dns污染问题
在mac机器上。
pip install twisted
git clone https://github.com/RicterZ/simple-dns simple-dns-by-ricterz
cd simple-dns-by-ricterz/simple-dns/
nano dns.py
(修改第60行的114.114.114.114为my-vps-ip ,修改53为53538 ,53538为vps上的dnsmasq的端口号。)
sudo python dns.py
项目地址:
https://github.com/RicterZ/simple-dns
11. https://briteming.blogspot.com/2019/12/pofwddns.html
12. https://briteming.blogspot.com/2012/03/pwx-dns-proxy.html
13. https://briteming.blogspot.com/2019/09/dnsproxy-by-adguardteamdns.html
14. https://briteming.blogspot.com/2019/12/edgedns-dns.html
15. https://briteming.blogspot.com/2019/12/dns-dispatcherdns.html
16. https://briteming.blogspot.com/2019/12/dns-reverse-proxydns.html
17. https://briteming.blogspot.com/2019/06/dns-proxy-server-coredns.html
(详见‘我的补充说明’部分)
11. https://briteming.blogspot.com/2019/12/pofwddns.html
12. https://briteming.blogspot.com/2012/03/pwx-dns-proxy.html
13. https://briteming.blogspot.com/2019/09/dnsproxy-by-adguardteamdns.html
14. https://briteming.blogspot.com/2019/12/edgedns-dns.html
15. https://briteming.blogspot.com/2019/12/dns-dispatcherdns.html
16. https://briteming.blogspot.com/2019/12/dns-reverse-proxydns.html
17. https://briteming.blogspot.com/2019/06/dns-proxy-server-coredns.html
(详见‘我的补充说明’部分)
Dnsmasq的使用
在查找一个设备无法解析公司内部域名的问题,最终查出来问题是在网关设备上运行的Dnsmasq
服务没有正确的配置上游 DNS 服务器,导致内网域名无法被正常的解析。在这期间对DNS协议
又重新学习了一番,并且对Dnsmasq
服务有了一些了解,结合网上一些资料,对Dnsmasq
提供的 DNS 和 DHCP 服务的配置做一些总结和备忘。
Dnsmasq
是一个开源的项目,可以在 thekelleys 上找到最新版本和源码,它能提供 DNS 、DHCP、TFTP、PXE 等功能。Dnsmasq
的 DNS 服务工作原理是,当接收到一个 DNS 请求是, Dnsmasq
首先会查找 /etc/hosts
文件,如果没有查找到,会查询本地 DNS 缓存记录,如果还是未找到对应的记录,则会将请求装发到 /etc/resolv.conf
文件中定义的上游 DNS 服务器中,从而实现对域名的解析。基于上述原理,我们可以在
/etc/hosts
文件中添加本地内网的域名解析,从而实现本地内网的域名解析。同时我们还可以使用 Dnsmasq
来为一些特定的域名指定 DNS 服务器,或者阻止某些域名的访问。由于 Dnsmasq
会缓存上游 DNS 服务的查询记录,从而可以提高访问过的网址的连接速度。默认情况下,
Dnsmasq
会从 /etc/dnsmasq.conf
读取配置项,我们也可以使用 -C
的启动参数来指定配置文件。参考资料
- thekelleys 官网
- dnsmasq (简体中文)
- http://www.freeoa.net/osuport/servap/dnsmasq-use-intro-refer_2480.html
- ---------------------------
- related post: https://briteming.blogspot.com/2017/08/53-dnsmasq.html