通常上网使用的 DNS 服务器都是由电信、联通等运营商提供的,或者是公用的 DNS 解析服务器,例如 Google 提供的解析器,这通常会带来些问题,如有时解析不正常、经常弹出广告等。
有时我们需要管理 DNS 解析,如加速 DNS 的解析过程、纠正错误的 DNS 解析记录、配置局域网的 DNS 解析等等。
DNSmasq 就是其中的一个主机上最常用的解决方案,相比 BIND 来说,其更加小巧,配置更加方便,其源码仅有 2 万多行,但足以满足常见的需求。
DNSmasq 是一个小巧且方便地用于配置 DNS 和 DHCP 的工具,它提供了 DNS 功能和可选择的 DHCP 功能,它服务那些只在本机和局域网可用的域名,这些域名是不会在全球的 DNS 服务器中出现的,既不能通过外网访问。
一般情况下,可以用 bind
解决 dns 的问题;dhcpd
解决 dhcp 的问题;用 ypbind
解决自定义 hostname 解析的 ip,而 DNSmasq 已经解决了所有的这些功能,而且配置简单,更适用于虚拟化和大数据环境的部署。
可以使用 dnsmasq 通过缓存来加速 dns 解析,提高上网速度;比 hosts 更强大的域名重定向功能,为在本机测试二级域名提供了很大的方便。
详细的内容可以参考官方网站 www.thekelleys.org.uk 。
在 CentOS 中,可以通过如下方式安装 dnsmasq 。
# yum install dnsmasq // CentOS
# netstat -atunp | grep dnsmasq // 查看系统是否启动
# systemctl [start|restart] dnsmasq // 重启等操作
dnsmasq 的配置文件为 /etc/dnsmasq.conf
。
DHCP 的工作过程主要分为以下六个阶段:
接下来,我们看下 DNSmasq 是如何配置 DHCP 服务器的,首先查看本机的 DHCP 服务是否已经启动。
----- DHCP服务器默认使用53号端口
# grep -E '^domain\>' /etc/services
domain 53/tcp # name-domain server
domain 53/udp
----- 查看服务器是否启动
# netstat -tnlp | grep dnsmasq
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN 2623/dnsmasq
如下是其配置文件。
# 服务监听的网络接口地址
listen-address=192.168.1.132,127.0.0.1
# DNS监听端口,如果设置为0则取消DNS功能
port=5353
# 设置默认租期
dhcp-lease-max=150
# dhcp动态分配的地址范围,包括了地址范围,以及租约时间
dhcp-range=192.168.1.50,192.168.1.150,48h
# dhcp服务的静态绑定,包括 MAC 地址、IPv4、主机名
dhcp-host=00:0C:29:5E:F2:6F,192.168.1.201,os02
dhcp-host=00:0C:29:15:63:CF,192.168.1.202,os03
# 租期保存在下面文件
# The DHCP server needs somewhere on disk to keep its lease database.
# This defaults to a sane location, but if you want to change it, use
# the line below.
#dhcp-leasefile=/var/lib/dnsmasq/dnsmasq.leases
# 忽略下面MAC地址的DHCP请求
#dhcp-host=11:22:33:44:55:66,ignore
dnsmasq 能够缓存外部 DNS 记录,同时也可以提供本地 DNS 解析或者作为外部 DNS 的代理,也就是说实际上 dnsmasq 支持首先查找 /etc/hosts
等本地解析文件,然后再查找 /etc/resolv.conf
等外部 nameserver 配置文件中定义的外部 DNS。
所以说 dnsmasq 是一个很不错的 DNS 中继,DNS 配置同样写入 dnsmasq.conf
配置文件里。
# 服务监听的网络接口地址,可以指定设备端口、排除一些设备端口或者指定IP地址
listen-address=192.168.1.132,127.0.0.1
# 本地解析文件,默认为 /etc/hosts,可以通过 no-hosts 不使用本地,也可以通过如下指定文件
#addn-hosts=/etc/banner_add_hosts
# 添加额外的上级DNS主机配置文件,默认使用 /etc/resolv.conf
#resolv-file=
# 设置DNS缓存大小,单位是DNS解析的条数,为0时将会禁用缓存,默认为150
cache-size=500
如果喜欢这里的文章,而且又不差钱的话,欢迎打赏个早餐 ^_^