一。dnsmasq简介
DNSmasq是一个小巧且方便地用于配置DNS和DHCP的工具,适用于小型网络,它提供了DNS功能和可选择的DHCP功能。它服务那些只在本地适用的域名,这些域名是不会在全球的DNS服务器中出现的。DHCP服务器和DNS服务器结合,并且允许DHCP分配的地址能在DNS中正常解析,而这些DHCP分配的地址和相关命令可以配置到每台主机中,也可以配置到一台核心设备中(比如路由器),DNSmasq支持静态和动态两种DHCP配置方式。
dnsmasq架构图
Dnsmasq原理:
•本机APP访问主机的/etc/resolv.conf获取DNSServer,该文件指向的DNSServer为Dnsmasq。
•本地局域网中的主机可以直接访问Dnsmasq,即在这些主机中/etc/resolv.conf指向了Dnsmasq。
•Dnsmasq需要通过上游DNS来进行域名解析,上游DNS可以配置在/etc/resolv.dnsmasq.conf中,该文件需要在Dnsmasq的配置文件/etc/dnsmasq.conf中指定。
默认会从/etc/hosts 读取到本地域名配置文件(不支持泛域名)
如果读取不到/etc/hosts的地址解析,就会转发给resolv.conf读取上游DNS配置文件进行解析地址
dnsmasq安装后有个配置文件 /etc/dnsmasq.conf 如果使用yum安装不需要任何额外配置,但是也可以在其中配置泛域名解析等
常用配置案例
resolv-file=/etc/resolv.conf
strict-order
listen-address=192.168.58.144
address=/a.com/192.168.58.155
server=114.114.114.114
bogus-nxdomain=114.114.114.114
对参数的解释
- resolve-file 定义dnsmasq从哪里获取上游DNS服务器的地址, 默认是从/etc/resolv.conf获取。
- strict-order 表示严格按照resolv-file文件中的顺序从上到下进行DNS解析,直到第一个解析成功为止。
- listen-address 定义dnsmasq监听的地址,默认是监控本机的所有网卡上。局域网内主机若要使用dnsmasq服务时,指定本机的IP地址。
- address 启用泛域名解析,即自定义解析a记录,如下配置为demon.com这个域名:
address=/demon.com/127.0.0.1 #访问demon.com时的所有域名包括子域名都会被解析成127.0.0.1 - bogus-nxdomain 为防止DNS污染,使用参数定义的DNS解析的服务器。注意:如果是阿里云服务器上配置dnsmasq要启用此项。
- server 指定dnsmasq程序使用哪个DNS服务器进行解析。 对于不同的网站可以使用不同的域名对应解析如下配置
server=/google.com/8.8.8.8 #表示对于google的服务,使用谷歌的DNS解析。
以上配置完毕后,需要重启dnsmasq服务,重启完毕后局域网中的其他机器,就可以通过该DNS服务器解析公网的域名。
二。搭建dnsmasq
使用yum安装
yum -y install dnsmasq
启动服务
systemctl start dnsmasq
假设有主机192.16.8.58.144安装了dnsmasq,该主机配置/etc/hosts(修改了重启dnsmasq)
192.168.58.144 swarm01
192.168.58.145 swarm02
192.168.58.147 swarm03
假设模拟在当前机器上模拟一个docker镜像,看是否能ping swarm (不通)
[root@swarm01 ~]# docker run -itd zookeeper
098f6978f53b1c6168cbf563b72f4a506de398a423c13377b705c371c8cd9e28
[root@swarm01 ~]# docker exec -it 09 bash
bash-4.4# ping swarm01
ping: bad address 'swarm01'
启动docker指定dns --dns 192.168.58.144 再次尝试(通)
[root@swarm01 ~]# docker run -itd --dns 192.168.58.144 zookeeper
6a1c7536ab9937543031ca2e2aed0a1d2cce308dc884c25c5cb505e4ebf9416d
[root@swarm01 ~]# docker exec -it 6a bash
bash-4.4# ping swarm01
PING swarm01 (192.168.58.144): 56 data bytes
64 bytes from 192.168.58.144: seq=0 ttl=64 time=0.110 ms
64 bytes from 192.168.58.144: seq=1 ttl=64 time=0.177 ms
^C
--- swarm01 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.110/0.143/0.177 ms
bash-4.4# ping swarm03
PING swarm03 (192.168.58.147): 56 data bytes
64 bytes from 192.168.58.147: seq=0 ttl=63 time=0.685 ms
64 bytes from 192.168.58.147: seq=1 ttl=63 time=0.791 ms
^C
--- swarm03 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.685/0.738/0.791 ms
docker除了在run指定dns也可以在/etc/docker/daemon.json中指定
{
"dns":"192.168.58.144"
}

991

被折叠的 条评论
为什么被折叠?



