Total Pageviews

Saturday, 7 December 2019

在vps上,安装dnsmasq的用处

在此文https://briteming.blogspot.com/2019/06/high-performance-dns-over-https-client.html的“我的补充说明“里,我提到在vps上,安装dnsmasq.dnsmasq其实只是一个dns forwarder,它本身并不能做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环境。然后,
git clone https://github.com/StalkR/dns-reverse-proxy
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污染问题

在mac机器上。
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



  9.在mac机器上。
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
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
项目地址:
------------------------------------------


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