[关闭]
@daduizhang 2018-09-30T17:22:08.000000Z 字数 4284 阅读 2763

DNSmasq文档


DNSmasq是一个小巧且方便地用于配置DNS和DHCP的工具,适用于小型网络,它提供了DNS功能和可选择的DHCP功能。DNS和DHCP两个功能可以同时或分别单独实现。dnsmasq轻量且易配置,适用于个人用户或少于50台主机的网络。

  • dnsmasq安装
  • dnsmasq解析流程
  • dnsmasq相关配置
  • 以及docker服务

1. DNSmasq安装

服务准备

系统:ubuntu16.4

  1. sudo apt-get update
  2. sudo apt-get install dnsmasq

2. DNSmasq解析流程

  1. dnsmasq先去解析hosts文件,再去解析/etc/dnsmasq.d/下的*.conf文件,并且这些文件的优先级要高于dnsmasq.conf,我们自定义的resolv.dnsmasq.conf中的DNS也被称为上游DNS,这是最后去查询解析的;
  2. 如果不想用hosts文件做解析,我们可以在/etc/dnsmasq.conf中加入no-hosts这条语句,这样的话就直接查询上游DNS了,如果我们不想做上游查询,就是不想做正常的解析,我们可以加入no-reslov这条语句。

3. 相关配置

(1) dnsmasq备份配置文件路径

/usr/share/doc/dnsmasq-base/examples/dnsmasq.conf.example

(2) Dnsmasq的配置文件路径为:/etc/dnsmasq.conf

vagrant@shannonai:~$ ll /etc/dnsmasq.conf
-rw-r--r-- 1 root root 27016 9月 29 19:20 /etc/dnsmasq.conf

(3) 编辑/etc/dnsmasq.conf以及相关参数说明


dnsmasq经常修改的比较重要参数说明:

具体参数 参数说明
resolv-file 定义dnsmasq从哪里获取上游DNS服务器的地址, 默认从/etc/resolv.conf获。
addn-hosts 添加读取额外的hosts文件路径,可以多次指定。如果指定为目录,则读取目录中的所有文件。
strict-order 表示严格按照resolv-file文件中的顺序从上到下进行DNS解析,直到第一个解析成功为止。
listen-address 定义dnsmasq监听的地址,默认是监控本机的所有网卡上。局域网内主机若要使用dnsmasq服务时,指定本机的IP地址, 如10.0.2.15
address 启用泛域名解析,即自定义解析a记录,例如:address=/long.com/192.168.115.10 访问long.com时的所有域名都会被解析成192.168.115.10
bogus-nxdomain 为防止DNS污染,使用参数定义的DNS解析的服务器。注意:如果是阿里云服务器上配置dnsmasq要启用此项
server 指定使用哪个DNS服务器进行解析,对于不同的网站可以使用不同的域名对应解析。例如:server=/google.com/8.8.8.8 #表示对于google的服务,使用谷歌的DNS解析。

dnsmasq其他配置说明

具体参数 参数说明
no-hosts 不加载本地的 /etc/hosts 文件,开启后expand-hosts不生效
domain-needed 完整的域名才向上游服务器查找,如果仅仅是主机名仅查找hosts文件
bogus-priv 如果反向查找的是私有地址例如192.168.X.X,仅从 hosts 文件查找,不再转发到上游服务器
strict-order 查询每个服务器严格按照resolv-file中的顺序, 默认从/etc/resolv.conf
server 查询特定域名到特定的DNS服务器,如server=/linuxprobe.org/10.1.1.53
expand-hosts 自动添加域名,如/etc/hosts中的os01将扩展成os01.example.com
domain 定义expand-hosts提供域名部分
cache-size 缓存条数,默认为150条,cache-size=0 禁用缓存。
clear-on-reload 重启后清空缓存
no-negcache 不缓存未知域名缓存,默认情况下dnsmasq缓存未知域名并直接返回为客户端
log-queries 记录dns查询日志,如果指定 log-queries=extra 那么在每行开始处都有额外的日志信息
log-facility 设置日志记录器路径
log-async 异步log,缓解阻塞,提高性能。默认为5,最大100
port 指定DNS的端口,默认53,设置 port=0 将完全禁用 DNS 功能,仅使用 DHCP/TFTP
conf-dir 自动加载目录配置
no-poll 当/etc/resolv.conf或resolv-file文件变化,不重新加载
no-resolv 不使用上游nameserver配置文件(/etc/resolv.conf和resolv-file)

注意:检查一下no-hosts前面是不是已经有了#号,默认的情况下是有的,dnsmasq 会首先寻找本地的 hosts 文件再去寻找缓存下来的域名, 最后去上游dns 服务器寻找。

设置:listen-address=127.0.0.1,表示这个 dnsmasq 本机自己使用有效。注意:如果你想让本机所在的局域网的其它电脑也能够使用上Dnsmasq,应该把本机的局域网IP加上去:listen-address=192.168.1.123,127.0.0.1。注意:如果想允许所有的用户使用你的DNS解析服务器,把listen-address去掉即可。


创建resolv.dnsmasq.conf

vagrant@shannonai:~$ sudo touch /etc/resolv.dnsmasq.conf

vagrant@shannonai:~$ sudo vim /etc/resolv.dnsmasq.conf
nameserver  1.2.4.8
nameserver  114.114.114.114
nameserver  8.8.8.8

创建dnsmasq.hosts

vagrant@shannonai:~$ sudo touch /etc/dnsmasq.hosts

agrant@shannonai:~$ sudo vim /etc/dnsmasq.hosts
140.205.220.96   taobao.com taobao
140.205.94.189   taobao.com taobao
可根据自己的需求配置hosts文件

当前配置:

vagrant@shannonai:~$ sudo vim /etc/dnsmasq.conf

domain-needed

bogus-priv

resolv-file=/etc/resolv.dnsmasq.conf    在/etc下创建resolv.dnsmasq.conf来替换resolv.conf

strict-order

server=/github.com/8.8.8.8

server=/cn/114.114.114.114

server=/google.com/223.5.5.5

listen-address=10.0.2.15,127.0.0.1

addn-hosts=/etc/dnsmasq.hosts     在/etc下创建dnsmasq.host来读取地址

cache-size=10000    最大缓存数

bogus-nxdomain=64.94.110.11

log-queries

log-facility=/var/log/dnsmasq.log

log-async=5

conf-dir=/etc/dnsmasq.d

查看配置文件语法是否正确,可执行下列命令:

vagrant@shannonai:~$ dnsmasq --test
dnsmasq: syntax check OK.

如发生问题请查看系统日志

vagrant@shannonai:~$ sudo journalctl -q


重要
配置完成需要将IGNORE_RESOLVCONF=yes打开

vagrant@shannonai:~$ sudo vim /etc/default/dnsmasq
#IGNORE_RESOLVCONF=yes    打开注释
然后启动dnsmasq就可以了


测试配置是否成功

vagrant@shannonai:~$ dig baidu.com
;; Query time: 48 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Sep 30 16:58:11 CST 2018
;; MSG SIZE rcvd: 240
# 以上为第一次,耗时为48msec

vagrant@shannonai:~$ dig baidu.com
;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Sep 30 16:58:18 CST 2018
;; MSG SIZE rcvd: 70
# 以上为第二次耗时为0msec
所以配置dnsmasq成功运行

4. docker配置

创建dockerfile文件

vagrant@shannonai:~$ mkdir docker-dnsmasq

vagrant@shannonai:~$ touch Dockerfile


将dnsmasq的相关配置拷贝到docker-dnsmasq中

vagrant@shannonai:~$ cd docer-dnsmasq

vagrant@shannonai:~$ sudo cp /etc/dnsmasq.conf    .

vagrant@shannonai:~$ sudo cp /etc/dnsmasq.hosts    .

vagrant@shannonai:~$ sudo cp /etc/reslov.dnsmasq.conf    .

vagrant@shannonai:~$ sudo cp /etc/reslov.conf    .


配置dockerfile文件

vagrant@shannonai:~$ vim Dockerfile

FROM andyshinn/dnsmasq
ADD resolv.conf /etc/resolv.conf
ADD dnsmasq.conf /etc/dnsmasq.conf
ADD resolv.dnsmasq.conf /etc/
ADD dnsmasq.hosts /etc/


运行docker

vagrant@shannonai:~$ docker build -t dahuihui/dnsmasq   .
然后进到环境里面看下ip就可以运用到当前主机了

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注