Dnsmasq部署DNS服务

Dnsmasq

简介

Dnsmasq是一个小巧且方便地用于配置DNS和DHCP的工具,适用于小型网络,它提供了DNS功能和可选择的DHCP功能。

作为dhcp服务器,它可以为局域网电脑提供内网ip和路由。

如果是在本地搭建,还可以大幅提高解析速度。还可以有效的防止DNS劫持,实现屏蔽广告等作用。

如果是在公网搭建Dnsmasq,还可以对指定的域名解析hosts指向,从而避免DNS污染。

工作原理

当接受到一个DNS请求时,Dnsmasq首先会查找/etc/hosts这个文件,然后查找/etc/resolv.conf中定义的外部DNS。所以说Dnsmasq是一个很不错的外部DNS中继。

配置Dnsmasq为DNS缓存服务器,同时在/etc/hosts文件中加入本地内网解析,这样一来每当内网机器查询时就会优先查询hosts文件,这就等于将/etc/hosts共享给全内网机器使用,从而解决内网机器互相识别的问题。相比逐台机器编辑hosts文件或者添加Bind DNS记录,仅编辑一个hosts文件,这简直太容易了。

安装

1
yum install -y dnsmasq

配置

Dnsmasq处理DNS设置与BIND等其他DNS服务有所不同。所有的配置都在一个文件中完成/etc/dnsmasq.conf

配置文件说明

  • resolv-file=/etc/resolv.dnsmasq.conf:指定该文件来管理上游的DNS服务器
  • strict-order:默认情况下Dnsmasq会发送查询到它的任何上游DNS服务器上,如果取消注释,则Dnsmasq则会严格按照/etc/resolv.conf中的DNS Server顺序进行查询。
  • no-hosts:如果不想使用/etc/hosts,则取消下面的注释。
  • listen-address=127.0.0.1:设置想监听的地址,如果你本机要使用写上127.0.0.1。如果你想让本机所在的局域网的其它电脑也能够使用上Dnsmasq,应该把本机的局域网IP加上去。

编辑配置

1
2
3
4
5
# 需要新建一个resolv.dnsmasq.conf文件,这个是配置上游DNS,也就是真正的公共DNS
vim /etc/resolv.dnsmasq.conf
nameserver 8.8.8.8
nameserver 8.8.4.4
nameserver 127.0.0.1
1
2
3
4
5
6
7
vim /etc/dnsmasq.conf
# 上游DNS路径
resolv-file=/etc/resolv.dnsmasq.conf
# 取消strict-order注释
strict-order
#监听地址,加上自己服务器IP
listen-address=127.0.0.1,172.19.19.124

使用

DNSmasq可以设置不同的域名指定不同的DNS进行解析,修改/etc/dnsmasq.conf文件即可,若不对域名设置DNS,则从上游DNS获取记录。

1
2
3
4
vim /etc/dnsmasq.conf
address=/ad.youku.com/127.0.0.1
address=/ad.iqiyi.com/127.0.0.1
address=/topsec-etcd.com/172.19.19.124

启动

1
2
# 启动
systemctl start dnsmasq

测试

本机

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 本机测试
[root@jw-etcd03 ~]# dig www.topsec-etcd.com
; <<>> DiG 9.9.4-RedHat-9.9.4-74.el7_6.1 <<>> www.topsec-etcd.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 60031
;; flags: qr aa rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;www.topsec-etcd.com. IN A

;; ANSWER SECTION:
www.topsec-etcd.com. 0 IN A 172.19.19.124

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Tue Jul 23 21:37:20 CST 2019
;; MSG SIZE rcvd: 53

内网

添加dns服务器

1
2
3
4
5
[root@jw-etcd02 ~]# cat /etc/resolv.conf 
# Generated by NetworkManager
search 8.8.8.8
nameserver 172.19.19.124
nameserver 192.168.59.241

测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@jw-etcd02 ~]# dig www.topsec-etcd.com
; <<>> DiG 9.9.4-RedHat-9.9.4-74.el7_6.1 <<>> www.topsec-etcd.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 52854
;; flags: qr aa rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;www.topsec-etcd.com. IN A

;; ANSWER SECTION:
www.topsec-etcd.com. 0 IN A 172.19.19.124

;; Query time: 0 msec
;; SERVER: 172.19.19.124#53(172.19.19.124)
;; WHEN: 二 7月 23 13:37:14 CST 2019
;; MSG SIZE rcvd: 53
/