Ubuntu16.04用Pdnsd替换dnsmasq防止DNS污染

Ubuntu16.04默认使用dnsmasq作为dns解析服务,换句话说,一个Ubuntu 16.04LTS的电脑本身就是一个开放53端口的DNS服务器,听起来有点像买Ubuntu电脑送DNS服务器的感觉。但事实确实是这样的,因为Ubuntu默认开机启动dnsmasq服务,而且即使你把它stop了,Ubuntu还会定时重启,而且在启动dnsmasq服务的时候,Ubuntu系统会自动修改/etc/resolv.conf这个默认DNS服务指向文件为127.0.0.1,导致你试图修改这个文件改变你的DNS服务器地址后会莫名其妙被改回127.0.0.1。但是我之所以要用Pdnsd替换点dnsmasq的主要目的还是为了防止DNS污染。

首先Pdnsd有这样几个优势

1、可以将UDP协议的DNS请求转换为TCP协议进行发送,通过这种方式避免DNS污染

2、pdnsd可以选择性的拒绝一些常见的被污染的目标地址,直接通过境内的dns服务器即可获得正确结果

3、pdnsd可以做本地DNS缓存,而且可以自由设置过期时间,对于已缓存的DNS地址,局域网内其他电脑在DNS解析上的耗时可以缩减到1ms以内,大大提升了电脑的上网速度

鉴于Pdnsd既能防止污染,又能加快速度的好处,很有必要将系统默认的dnsmasq换成pdnsd。这个过程主要分一下两步

第一步:将dnsmasq的监听端口从53端口挪到其他端口,防止和pdnsd端口冲突

第二步:配置并启动pdnsd


本文以Ubuntu 16.04LTS系统为例详细讲解这个替换过程


  第一步:将dnsmasq的监听端口从53端口挪到其他端口

首先要科普一下,Ubuntu系统中的dnsmasq并不只有一个实例在运行,而是会开启多个,在我的电脑中因为开启了Ubuntu自带的Wifi分享功能,本机多了一个内网IP地址10.42.0.1,并且作为这个Wifi网络的DNS服务器,所以我现在电脑上运行着三个dnsmasq进程。

查看电脑53端口的占用情况,可以用一下命令

sudo netstat -apn | grep 53


如图所示,我的计算机有线网卡的内网地址为192.168.1.100,并且分享了一个Wifi网络,在这个Wifi网络中的内网地址是10.42.0.1在Ubuntu默认情况下,所有网卡的53端口(包括ipv6地址)均会被dnsmasq所占,并且不止一个dnsmasq实例正在运行。

注:之所以有127.0.0.1:53而没有192.168.1.100:53或者0.0.0.0:53是Ubuntu默认不向局域网开放自己的53端口,理由当然是为了安全,防止让你真的变成一台局域网DNS服务器,而有10.42.0.1:53的原因是本计算机分享了一个Wifi,在这个Wifi局域网中,这台电脑既当网关也当DNS服务器,该wifi中的所有电脑被DHCP分配到的DNS服务器均为10.42.0.1,所以对于这个内网,dnsmasq是向局域网开放自己的53端口的。

注:运行在127.0.0.1的:53的dnsmasq进程和运行在10.42.0.1的dnsmasq是两个 不同的进程,使用不同的配置文件

在Ubuntu默认情况下,127.0.0.1和0.0.0.0的53端口一般由同一个dnsmasq进程所占,而其他网段比如10.42.0.1由另一个dnsmasq进程控制,由于10.42.0.1是笔记本共享出的wifi,所以这里的dnsmasq除了做dns转发以外,还有一个更重要的作用就是做DHCP服务器动态为连接热点的设备分配IP地址。

那么如何观察本机一共有多少dnsmasq进程,这些dnsmasq的配置文件又各是谁呢?可以用如下指令

ps -fC dnsmasq|more

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值