分步教程:配置DNS缓存服务器-dnsmasq(CentOS/RHEL 7)
" Dnsmasq"是一种轻量级,易于配置的DNS转发器,旨在为小型网络提供DNS(以及可选的DHCP和TFTP)服务。它可以服务不在全局DNS中的本地计算机的名称。本文是在使用CentOS 7时编写的,因此可以肯定地说,它还全面介绍了RHEL 7,Fedora以及整个Red Hat操作系统家族,以及Novell的SLES和OpenSUSE。
要"配置DNS缓存服务器",我们需要按照以下步骤操作。
安装RPM
说明:
在RHEL系统上,我们必须具有RHN的活动订阅,或者我们可以配置本地脱机存储库," yum"程序包管理器可以使用该本地存储库安装所提供的rpm及其依赖项。
[root@node2 ~]# yum -y install dnsmasq
在dns缓存服务器配置文件中修改或者添加以下内容。
说明:
在这种配置下,我们假设系统没有libvirtd软件包,因为libvirtd将dnsmasq用作其虚拟客户机。
[root@node2 ~]# grep -v ^# /etc/dnsmasq.conf | egrep -v ^$ resolv-file=/etc/resolv.dnsmasq no-poll listen-address=127.0.0.1 cache-size=1000 conf-dir=/etc/dnsmasq.d,.rpmnew,.rpmsave,.rpmorig
其中cache-size
设置缓存的大小。默认值为保留150个主机名。通过将缓存大小设置为0可以禁用该功能。 resolv-file
其中我们使用一个单独的文件,其中dns缓存服务器读取父级名称服务器的IP。no-poll为了防止dns缓存服务器轮询" resolv"文件进行更改。 " listen-address"仅绑定到提供的地址
上游名称服务器
我们使用了一个单独的文件来存储父级名称服务器的IP;那是/etc/resolv.dnsmasq
。我们将使用与/etc/resolv.conf
中相同的语法添加名称服务器IP地址。检查下面的示例输出:这里10.0.2.32是我命名的chroot dns服务器的IP地址。
[root@node2 ~]# cat /etc/resolv.dnsmasq nameserver 10.0.2.32
对于此步骤,网络中必须有一个"上游DNS服务器"。
开关名称解析
对于/etc/hosts中不存在的主机名,系统仍使用/etc/resolv.conf内的名称服务器进行名称解析。
要开始使用dns缓存服务器,请更改/etc/resolv.conf
以将所有DNS查询发送到本地回送接口。如果文件包含多个名称服务器条目,请删除它们,以便仅保留一个条目。
[root@node2 ~]# cat /etc/resolv.conf search example.com nameserver 127.0.0.1
说明:
如果将DNS信息写入主网络接口文件中,则还需要更新网络文件中的DNS选项。在某些情况下(由于DHCP或者网络配置文件),可能会更新/etc/resolv.conf
中的名称服务器行,以替换对回送接口的引用。
启动DNSMASQ服务
使用systemctl启用并启动dns缓存服务器服务:
[root@node2 ~]# systemctl enable dnsmasq.service --now Created symlink from /etc/systemd/system/multi-user.target.wants/dnsmasq.service to /usr/lib/systemd/system/dnsmasq.service. [root@node2 ~]# systemctl is-active dnsmasq.service active
使用netstat检查端口53的状态:
[root@node2 ~]# netstat -ntlp | grep :53 tcp 0 0 0.0.0.0:53 0.0.0.0:* LISTEN 6274/dnsmasq tcp6 0 0 :::53 :::* LISTEN 6274/dnsmasq
验证DNS缓存服务器
以下步骤可与tcpdump一起使用,以确保DNS缓存服务器按预期工作。
在终端上安装tcpdump软件包(术语A)
[root@node2 ~]# yum -y install tcpdump
打开另一个终端会话(术语B)并运行以下命令。
[root@node2 ~]# tcpdump port 53 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
在终端(术语A)上运行两次以下命令,并确认" tcpdump"在术语B中显示对上层DNS服务器的1个DNS查询
说明:
某些或者域名具有与之关联的多个IP地址。由于这个原因和其他原因,tcpdump
可能会显示多个查询。
[root@node2 ~]# ping google.com [root@node2 ~]# ping google.com
对于第一次ping,我们应该在tcpdump
中看到多个条目,但是第二次重新运行ping之后,我们将观察到主机未传输任何数据包,因此我们的DNS缓存服务器可以按预期工作。