分步教程:配置DNS缓存服务器-dnsmasq(CentOS/RHEL 7)

时间:2020-01-09 10:37:43  来源:igfitidea点击:

" 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缓存服务器可以按预期工作。