CentOS搭建dnsmasq,拦截广告
目 录
一、DNS服务简介
1、DNS服务简介
DNS(Domain Name System)域名系统。
目前提供网络服务的应用使用唯一的32位的IP地址来标识,但是由于数字比较复杂、难以记忆,因此产生了域名系统(DNS),通过域名系统,可以使用易于理解和形象的字符串名称来标识网络应用(如www.baidu.com、www.taobao.com)。访问互联网应用可以使用域名,也可以通过IP地址直接访问该应用,在使用域名访问网络应用时,DNS负责将域名解析为IP地址
2、主机名和域名的区别?
主机名是内网的名字;域名是外网的名字。
主机名和域名其实是两个完全可以不同的名字,但是有很多软件(如邮件系统postfix)会默认认为它们一致。
全世界共有有13台DNS根域服务器
顶级域名:
.com .org .edu .gov .net .mil .info
商业 组织 教育 政府 通讯 军事 信息
根域:
cn hk us jp tw in
.com.cn .net.us .edu.cn
3、DNS服务器特点
分布式的数据库
解决了数据不一致,避免了名字冲突
有缓存机制,提高了性能和可靠性
4、域名解析过程
为了将一个名字解析成一个IP地址,用户应用程序调用一个称为解析器的库程序,将名字作为参数传递给它,形成DNS用户;然后DNS用户发送查询请求给本地域名服务器,服务器首先在其管辖区域内查找名字,名字找到后,把对应的IP地址返回给DNS客户。完整的名字解析过程如下图所示:
DNS是在互联网上进行域名解析到对应IP地址的服务器,保存互联网上所有的IP与域名的对应信息,然后将我们对网址的访问,解析成IP地址并返回,然后电脑再去通过IP地址去访问服务器,获得数据。
首先就要讲一下域名,这里我拿百度的地址来进行讲解: www.baidu.com.
完整的域名,后面都是有一个“.”的,但是一般使用中都是默认省略点了,这是一个完整的域名。通过 “.” 来进行分割成三个部分:
www: www是 主机名
baidu: baidu是 域名
com: com是 类型
当我们访问 www.baidu.com 时,会先去根服务器中查找所有的 com 类型服务器的地址,然后再去 com 类型的服务器上查找所有 baidu.com 域名的服务器地址,最后再去 所有 baidu.com 的域名服务器上找到 www.baidu.com 这个网址对应的IP地址,然后返回给访问www.baidu.com的电脑主机。 然后主机就用这个IP与服务器建立连接
另外,所有这些不同层级DNS服务器都一般是由多台服务器同时提供服务,做一个冗余好可用,负载均衡。 在这上面分为:
主服务器: 又名master服务器,所有其他从服务器和缓存服务器的域名解析信息都是由master服务器上抓取下来的,所有的修改都直接在master上修改就行了,别的自动同步 从服务器: 又名salve服务器,是作为master服务器的冗余备份,让master故障后,salve还能继续提供服务 缓存服务器: 主要作用就是缓存DNS信息,提供服务给用户查询,并不能自定义域名配置进行解析
然后再DNS服务器上进行查询的时候,分为两种查询模式,递归查询和循环查询:
递归查询:
就是去到一个dns服务器查询到结果后,就将结果返回给查询者,查询者再去查询别的DNS服务器,这样一次一次的进行查询返回,直到找到数据。
循环查询(迭代查询):
循环查询就是查询者像一个DNS服务器发起查询后,由这个DNS服务器去查询别的服务器A,A又去查询别的服务器B,直到找到结果,然后返回B,B返回给A,A再返回给查询者
一般情况下,是我们个人主机,向我们网络配置中配置的DNS服务器进行查询,使用循环查询,由指定的DNS服务器代替我们用递归查询去网络上查询得到结果。然后返回给个人用户主机。 这就是DNS服务器的工作原理。
而现在我们就是要搭建自己DNS服务器,让公司内所有员工的DNS服务器地址都指向到这台服务器上。通过这个本地的DNS服务器来进行解析,代替常用的DNS服务器,如果各大运行商的,114的,阿里云的等等。
这样做就可以自定义自己内部的域名,通过域名来访问内网的服务器,像公司内网的论坛,内网的网站等等,都可以直接输入网址进行访问
二、系统环境
有安装Proxmox VE 6.4-8直接虚拟一台
系统:CentOS 8
安装并启动Dnsmasq:
dnf -y install bind-utils vim dnsmasq 或者 yum install -y dnsmasq
yum install net-tools
systemctl start dnsmasq.service
防火墙关闭或者开放53端口:
systemctl stop firewalld --临时关闭防火墙 systemctl disable firewalld --永久关闭防火墙
关闭selinux
setenforce 0 --临时关闭 vim /etc/selinux/config SELINUX=disabled --将enforcing改为disabled reboot --重启系统永久生效CentOS安装iptables防火墙
配置服务
[root@localhost ~]# ifconfig
ens18: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.10.251 netmask 255.255.255.0 broadcast 192.168.10.255
inet6 fe80::98f2:cc73:a7ad:62b9 prefixlen 64 scopeid 0x20
ether c2:6e:d3:33:96:9a txqueuelen 1000 (Ethernet)
RX packets 840784 bytes 124315363 (118.5 MiB)
RX errors 0 dropped 5 overruns 0 frame 0
TX packets 602189 bytes 92985010 (88.6 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
1、Dnsmasq的配置文件路径为:/etc/dnsmasq.conf
[root@localhost ~]# ll -d /etc/dnsmasq.conf -rw-r--r--. 1 root dnsmasq 483 Jul 14 22:29 /etc/dnsmasq.conf
2、编辑/etc/dnsmasq.conf
[root@localhost ~]# vim /etc/dnsmasq.conf resolv-file=/etc/resolv.dnsmasq.conf //dnsmasq 会从这个文件中寻找上游dns服务器 strict-order //去掉前面的# server=/cn/223.5.5.5 server=/com/61.139.2.69 server=/youtube.com/114.114.114.114 server=/google.com/8.8.4.4 server=/cc/114.114.114.114 listen-address=192.168.10.251,127.0.0.1 //监听地址 address=/ojbk.com/192.168.10.251 addn-hosts=/etc/dnsmasq.hosts //在这个目里面添加记录 cache-size=10240 bogus-nxdomain=114.114.114.114 log-queries conf-dir=/etc/dnsmasq.d conf-dir=/etc/dnsmasq.d,.bak conf-dir=/etc/dnsmasq.d/,*.conf conf-dir=/etc/dnsmasq.d,.rpmnew,.rpmsave,.rpmorig
参数说明:
resolv-file=/etc/resolv.conf strict-order listen-address=192.168.10.251,127.0.0.1 address=/ojbk.com/192.168.10.251 server=114.114.114.114 bogus-nxdomain=114.114.114.114 对参数的解释 resolve-file 定义dnsmasq从哪里获取上游DNS服务器的地址, 默认是从/etc/resolv.conf获取。 strict-order 表示严格按照resolv-file文件中的顺序从上到下进行DNS解析,直到第一个解析成功为止。 r listen-address 定义dnsmasq监听的地址,默认是监控本机的所有网卡上。局域网内主机若要使用dnsmasq服务时,指定本机的IP地址。 address 启用泛域名解析,即自定义解析a记录,如下配置为ojbk.com这个域名: *address=/ojbk.com/192.168.10.251 #访问ojbk.com时的所有域名都会被解析成192.168.10.251* bogus-nxdomain 为防止DNS污染,使用参数定义的DNS解析的服务器。注意:如果是阿里云服务器上配置dnsmasq要启用此项。 server 指定dnsmasq程序使用哪个DNS服务器进行解析。对于不同的网站可以使用不同的域名对应解析如下配置 *server=/google.com/8.8.4.4 #表示对于google的服务,使用谷歌的DNS解析。*
注意:检查一下no-hosts前面是不是已经有了#号,默认的情况下是有的,dnsmasq 会首先寻找本地的 hosts 文件再去寻找缓存下来的域名, 最后去上游dns 服务器寻找。
设置:listen-address=127.0.0.1,表示这个 dnsmasq 本机自己使用有效。注意:如果你想让本机所在的局域网的其它电脑也能够使用上Dnsmasq,应该把本机的局域网IP加上去:listen-address=192.168.10.251,127.0.0.1。注意:如果想允许所有的用户使用你的DNS解析服务器,把listen-address去掉即可
3、修改/etc/resolv.conf
echo 'nameserver 127.0.0.1' > /etc/resolv.conf
4、创建resolv.dnsmasq.conf文件并添加上游dns服务器的地址
touch /etc/resolv.dnsmasq.conf //添加上游的DNS服务器,也就是公网DNS,这里添加阿里云的,或者114 echo 'nameserver 223.5.5.5' > /etc/resolv.dnsmasq.conf echo 'nameserver 223.6.6.6' > /etc/resolv.dnsmasq.conf echo 'nameserver 114.114.114.114' > /etc/resolv.dnsmasq.conf echo 'nameserver 114.114.115.115' > /etc/resolv.dnsmasq.conf
5、创建dnsmasq.hosts文件
cp /etc/hosts /etc/dnsmasq.hosts echo 'addn-hosts=/etc/dnsmasq.hosts' >> /etc/dnsmasq.conf
Dnsmasq启动
systemctl enable dnsmasq //开机启动
systemctl start dnsmasq //启动服务
systemctl status dnsmasq //查看服务
systemctl restart dnsmasq //重启服务
netstat -tunlp | grep 53 //查看Dnsmasq是否正常启动
[root@localhost ~]# netstat -tunlp | grep 53
tcp 0 0 0.0.0.0:53 0.0.0.0:* LISTEN 781/dnsmasq
tcp6 0 0 :::53 :::* LISTEN 781/dnsmasq
udp 0 0 0.0.0.0:53 0.0.0.0:* 781/dnsmasq
udp6 0 0 :::53 :::* 781/dnsmasq
测试
下载dig和nslookup工具:
CentOS/Fodora:
[root@localhost ~]# yum install bind-utils
Ubuntu/Debian:
[root@localhost ~]# apt-get install dnsutils
[root@localhost ~]# dig www.2345.com
; <<>> DiG 9.11.26-RedHat-9.11.26-4.el8_4 <<>> www.2345.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44268
;; flags: qr rd ra; QUERY: 1, ANSWER: 17, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;www.2345.com. IN A
;; ANSWER SECTION:
www.2345.com. 15 IN CNAME www.2345.com.w.alikunlun.com.
www.2345.com.w.alikunlun.com. 15 IN A 119.96.67.227
www.2345.com.w.alikunlun.com. 15 IN A 119.96.67.224
www.2345.com.w.alikunlun.com. 15 IN A 119.96.66.248
www.2345.com.w.alikunlun.com. 15 IN A 119.96.67.226
www.2345.com.w.alikunlun.com. 15 IN A 222.221.104.242
www.2345.com.w.alikunlun.com. 15 IN A 119.96.67.231
www.2345.com.w.alikunlun.com. 15 IN A 119.96.66.243
www.2345.com.w.alikunlun.com. 15 IN A 125.74.34.243
www.2345.com.w.alikunlun.com. 15 IN A 119.96.67.225
www.2345.com.w.alikunlun.com. 15 IN A 119.96.67.229
www.2345.com.w.alikunlun.com. 15 IN A 125.74.34.244
www.2345.com.w.alikunlun.com. 15 IN A 119.96.67.228
www.2345.com.w.alikunlun.com. 15 IN A 119.96.66.242
www.2345.com.w.alikunlun.com. 15 IN A 119.96.77.241
www.2345.com.w.alikunlun.com. 15 IN A 119.96.66.244
www.2345.com.w.alikunlun.com. 15 IN A 119.96.67.230
;; Query time: 3 msec
;; SERVER: 223.5.5.5#53(223.5.5.5)
;; WHEN: Thu Jul 15 20:05:55 CST 2021
;; MSG SIZE rcvd: 325
下载dig和nslookup工具: CentOS/Fodora: [root@localhost ~]# yum install bind-utils Ubuntu/Debian: [root@localhost ~]# apt-get install dnsutils
[root@localhost ~]# dig www.2345.com ; <<>> DiG 9.11.26-RedHat-9.11.26-4.el8_4 <<>> www.2345.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44268 ;; flags: qr rd ra; QUERY: 1, ANSWER: 17, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;www.2345.com. IN A ;; ANSWER SECTION: www.2345.com. 15 IN CNAME www.2345.com.w.alikunlun.com. www.2345.com.w.alikunlun.com. 15 IN A 119.96.67.227 www.2345.com.w.alikunlun.com. 15 IN A 119.96.67.224 www.2345.com.w.alikunlun.com. 15 IN A 119.96.66.248 www.2345.com.w.alikunlun.com. 15 IN A 119.96.67.226 www.2345.com.w.alikunlun.com. 15 IN A 222.221.104.242 www.2345.com.w.alikunlun.com. 15 IN A 119.96.67.231 www.2345.com.w.alikunlun.com. 15 IN A 119.96.66.243 www.2345.com.w.alikunlun.com. 15 IN A 125.74.34.243 www.2345.com.w.alikunlun.com. 15 IN A 119.96.67.225 www.2345.com.w.alikunlun.com. 15 IN A 119.96.67.229 www.2345.com.w.alikunlun.com. 15 IN A 125.74.34.244 www.2345.com.w.alikunlun.com. 15 IN A 119.96.67.228 www.2345.com.w.alikunlun.com. 15 IN A 119.96.66.242 www.2345.com.w.alikunlun.com. 15 IN A 119.96.77.241 www.2345.com.w.alikunlun.com. 15 IN A 119.96.66.244 www.2345.com.w.alikunlun.com. 15 IN A 119.96.67.230 ;; Query time: 3 msec ;; SERVER: 223.5.5.5#53(223.5.5.5) ;; WHEN: Thu Jul 15 20:05:55 CST 2021 ;; MSG SIZE rcvd: 325
第一次解析时间:
[root@localhost ~]# dig www.veewe.com | grep "Query time" ;; Query time: 1800 msec
再运行次就缓存了
[root@localhost ~]# dig www.veewe.com | grep "Query time" ;; Query time: 1 msec
查看系统日志:
#查看dnsmasq是否启动正常,查看系统日志: journalctl -u dnsmasq /var/log/dnsmasq.log
域名的绑定:
修改resolv.conf文件,将服务器地址改为本机地址 vim /etc/resolv.conf 对于reslov.conf的这个文件作用主要有四个关键字: nameserver //定义DNS服务器的IP地址 domain //定义本地域名 search //定义域名的搜索列表 sortlist //对返回的域名进行排序 举个例子 domain ojbk.com search www.ojbk.com mail.ojbk.com ftp.ojbk.com nameserver 114.114.114.114 nameserver 223.5.5.5
另外:domain和search不能共存;如果同时存在,后面出现的将会被使用。
当程序寻找不到主机域名时,会对 search 后面的参数一一查找主机域名
智能DNS加快解析速度
打开/etc/dnsmasq.conf文件,server=后面可以添加指定的DNS,例如国内外不同的网站使用不同的DNS
国内指定DNS
server=/cn/114.114.114.114 server=/taobao.com/114.114.114.114 server=/taobaocdn.com/114.114.114.114 国外指定DNS server=/google.com/223.5.5.5
说明:
server=/cn/表示所有的cn域名都使用114这个公共DNS,server=/taobao.com/表示所有的taobao.com域名都用114,223.5.5.5 是阿里云的公共DNS,你可以换成其它的
屏蔽网页广告。将指广告的URL指定127这个IP,就可以将网页上讨厌的广告给去掉了
address=/ad.youku.com/127.0.0.1 address=/ad.iqiyi.com/127.0.0.1
指定域名解析到特定的IP上。这个功能可以让你控制一些网站的访问,非法的DNS就经常把一些正规的网站解析到不正确IP上
address=/baidu.com.com/127.0.0.0
补充:
vim /etc/dnsmasq.conf
# line 19: 取消注释(从不转发普通名称)
domain-needed
# line 21: 取消注释 (从不转发非路由地址空间中的地址)
bogus-priv
# line 41: 取消注释 (查询每个服务器严格按照resolv.conf中的顺序)
strict-order
# line 55: 添加下面一行 (查询特定域名到特定的DNS服务器)
server=/linuxprobe.org/10.1.1.53
# line 123: 取消注释 (自动添加域名)
expand-hosts
# line 133: 添加 (定义域名)
domain=srv.world
详细配置说明:
#监听的端口,dns默认53端口,如果设置为0,则完全禁止DNS功能
port=53
#监听地址
listen-address=192.168.145.134
#正确的域名格式才转发
domain-needed
#设置本地域扩展,相当于域简写,如hosts配置 www 会自动加上www.zhutw.com
expand-hosts
local=/zhutw.com/
#配置上游的nameserver解析文件
#resolv-file=/etc/dnsmasq.resolv.conf
#当/etc/resolv.conf或resolv-file文件变化,不重新加载
no-poll
#不使用上游nameserver配置文件(/etc/resolv.conf和resolv-file)
no-resolv
#配置本地解析的hosts
addn-hosts=/etc/dnsmasq.hosts
#不使用/etc/hosts,开启后expand-hosts不生效
#no-hosts
#按配置顺序查询上级nameserver服务器
strict-order
#记录日志,如果打开日志,要及时清理
log-queries
log-facility=/var/log/dnsmasq.log
#启用异步日志记录,缓解阻塞,提高性能。默认队列长度为5,合理值为5-25,最大限制为100
log-async=20
#缓存地址数目,提高速
cache-size=10000
#自动加载目录配置
conf-dir=/etc/dnsmasq.d
四:广告屏蔽
抱歉!隐藏内容,请输入密码后可见!
请打开微信扫描右边的二维码回复关键字“屏蔽广告”获取密码,也可以微信直接搜索“吊儿啷当”关注微信公众号获取密码。
#监听的端口,dns默认53端口,如果设置为0,则完全禁止DNS功能 port=53 #监听地址 listen-address=192.168.145.134 #正确的域名格式才转发 domain-needed #设置本地域扩展,相当于域简写,如hosts配置 www 会自动加上www.zhutw.com expand-hosts local=/zhutw.com/ #配置上游的nameserver解析文件 #resolv-file=/etc/dnsmasq.resolv.conf #当/etc/resolv.conf或resolv-file文件变化,不重新加载 no-poll #不使用上游nameserver配置文件(/etc/resolv.conf和resolv-file) no-resolv #配置本地解析的hosts addn-hosts=/etc/dnsmasq.hosts #不使用/etc/hosts,开启后expand-hosts不生效 #no-hosts #按配置顺序查询上级nameserver服务器 strict-order #记录日志,如果打开日志,要及时清理 log-queries log-facility=/var/log/dnsmasq.log #启用异步日志记录,缓解阻塞,提高性能。默认队列长度为5,合理值为5-25,最大限制为100 log-async=20 #缓存地址数目,提高速 cache-size=10000 #自动加载目录配置 conf-dir=/etc/dnsmasq.d
四:广告屏蔽
抱歉!隐藏内容,请输入密码后可见!
请打开微信扫描右边的二维码回复关键字“屏蔽广告”获取密码,也可以微信直接搜索“吊儿啷当”关注微信公众号获取密码。
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?