@daduizhang
2018-09-30T17:22:08.000000Z
字数 4284
阅读 2679
DNSmasq是一个小巧且方便地用于配置DNS和DHCP的工具,适用于小型网络,它提供了DNS功能和可选择的DHCP功能。DNS和DHCP两个功能可以同时或分别单独实现。dnsmasq轻量且易配置,适用于个人用户或少于50台主机的网络。
- dnsmasq安装
- dnsmasq解析流程
- dnsmasq相关配置
- 以及docker服务
系统:ubuntu16.4
- sudo apt-get update
- sudo apt-get install dnsmasq
/usr/share/doc/dnsmasq-base/examples/dnsmasq.conf.example
vagrant@shannonai:~$ ll /etc/dnsmasq.conf
-rw-r--r-- 1 root root 27016 9月 29 19:20 /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
# 以上为第一次,耗时为48msecvagrant@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成功运行
创建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就可以运用到当前主机了