在RHEL 7上设置仅缓存的DNS服务器

时间:2020-03-21 11:42:27  来源:igfitidea点击:

RHEL 7上提供了不同的软件包来配置仅缓存DNS服务器。
我们今天将配置未绑定和绑定。

我们在本文中使用RHEL 7.0虚拟机。
请注意,DNS服务器上只能部署一个未绑定或者绑定的软件包。

具有无限绑定的仅捕获名称服务器

安装未绑定的软件包,在启动时启用服务并配置防火墙:

# yum install -y unbound
# systemctl enable unbound
# firewall-cmd --permanent --add-service=dns 
# firewall-cmd --reload

防止出现有关不存在的服务器密钥的错误:

# unbound-control-setup

打开文件“ /etc/unbound/unbound.conf”进行编辑,并添加以下几行,其中对我们的实验室局域网设置了访问控制:

interface: 0.0.0.0
access-control: 10.8.8.0/24 allow

现在,如果我们已经配置了一些其他DNS服务器,其中包含一些本地区域(例如rhce.local),那么我们想将对该区域的所有请求转发到此类DNS服务器,以便可以对其进行解析。
由于我们已经有一个带有“ rhce.local”区域的FreeIPA服务器,因此我们要将其添加到未绑定的配置中:

forward-zone:
    name: "rhce.local"
    forward-addr: 10.8.8.70

转发地址是我们的FreeIPA服务器的IP地址。
要将所有请求转发到另一个DNS服务器,我们需要为根(。
)域配置转发区域。

现在,如果我们尝试还原本地区域,它将使我们无法通过验证。
默认情况下,未绑定要求对其接收的所有DNS响应进行DNSSEC验证。
对于尚未配置DNSSEC的内部DNS域,我们可能希望绕过它。

包括domain-insecure参数,后跟我们不想对以下内容进行DNSSEC验证的DNS域的名称:

domain-insecure: "rhce.local"

验证配置:

# unbound-checkconf

启动未绑定的服务:

# systemctl start unbound

在我们的特殊情况下,配置名称服务器:

# nmcli c mod mybond0 ipv4.dns 127.0.0.1

核实:

# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 127.0.0.1

未绑定版本披露

默认情况下,返回未绑定版本:

# dig localhost version.bind chaos txt +noall +answer|tail -n1
version.bind.    0   CH   TXT     "unbound 1.4.20"

可以通过在文件“ unbound.conf”中添加“ hide-version:no”来隐藏未绑定的版本号。

具有绑定的仅捕获名称服务器

安装绑定软件包,在启动时启用服务并配置防火墙:

# yum install -y bind
# systemctl enable named
# firewall-cmd --permanent --add-service=dns
# firewall-cmd --reload

打开文件“ /etc/named.conf”进行编辑。
创建以下访问控制列表(acl)语句:

acl "trusted" {
    127.0.0.0/8;
    10.8.8.0/24;
};

这使我们可以定义主机组,以便可以允许它们访问名称服务器。

告诉Bind侦听任何IPv4地址,并允许来自“受信任”客户端的查询和传输。

listen-on port 53 { any; };
allow-query       { "trusted"; };
allow-transfer    { "trusted"; };
dnssec-validation no;

现在与未绑定配置相同,如果我们已经配置了一些其他DNS服务器,其中包含一些本地区域,那么我们希望将该区域的所有请求转发到此类DNS服务器,以便可以对其进行解析。

添加按域转发:

zone "rhce.local" IN {
    type forward;
    forwarders { 10.8.8.70; };
};

检查语法错误:

# named-checkconf

启动服务:

# systemctl enable named

在我们的特殊情况下,配置名称服务器:

# nmcli c mod mybond0 ipv4.dns 127.0.0.1

核实:

# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 127.0.0.1

绑定版本披露

默认情况下返回绑定版本:

# dig localhost version.bind chaos txt +noall +answer|tail -n1
version.bind.   0   CH  TXT   "9.9.4-RedHat-9.9.4-14.el7"

如果需要隐藏版本号,可以通过在文件“ named.conf”中添加“版本无”来实现。

SELinux

不用担心,根据绑定配置的不同,可能需要对SELinux进行一些更改。

例如,如果我们想确定Bind是否可以将tcp套接字绑定到http端口,则需要打开named_tcp_bind_http_port布尔值。
默认情况下它是禁用的。

# setsebool -P named_tcp_bind_http_port=1

如果要确定Bind是否可以写入主区域文件(通常用于动态DNS或者区域传输的内容),则需要打开named_write_master_zones布尔值(默认情况下禁用):

# setsebool -P named_write_master_zones=1

对DNS问题进行故障排除

journalctl

检查日志是否有明显的错误:

# journalctl -xlf

dig

检查DNS解析是否成功:

# dig rhce.local | grep status
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14297

NXDOMAIN的状态表示未找到所请求的DNS信息:

# dig rhce2.local | grep status
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 23674

检查为感兴趣区域定义的名称服务器:

# dig NS rhce.local +noall +answer
; < <>> DiG 9.9.4-RedHat-9.9.4-14.el7 < <>> NS rhce.local +noall +answer
;; global options: +cmd
rhce.local.             86392   IN      NS      ipa.rhce.local.

找出感兴趣区域的名称服务器的IP,并检查它们是否可用:

# dig A ipa.rhce.local +noall +answer
; < <>> DiG 9.9.4-RedHat-9.9.4-14.el7 < <>> A ipa.rhce.local +noall +answer
;; global options: +cmd
ipa.rhce.local.         443     IN      A       10.8.8.70

检查DNS服务器是否正在捕获查询:

# dig A google.com +noall +stats
; < <>> DiG 9.9.4-RedHat-9.9.4-14.el7 < <>> A google.com +noall +stats
;; global options: +cmd
;; Query time: 67 msec
;; SERVER: 10.8.8.71#53(10.8.8.71)
;; WHEN: Tue Jan 31 11:44:15 BST 2015
;; MSG SIZE  rcvd: 55
# dig A google.com +noall +stats
; < <>> DiG 9.9.4-RedHat-9.9.4-14.el7 < <>> A google.com +noall +stats
;; global options: +cmd
;; Query time: 0 msec
;; SERVER: 10.8.8.71#53(10.8.8.71)
;; WHEN: Tue Jan 31 11:44:21 BST 2015
;; MSG SIZE  rcvd: 55

有时可能会缓存一些无效的记录。

未绑定

将缓存打印到标准输出:

# unbound-control dump_cache

如果缓存了一些无效的记录,则可能需要刷新所有内容:

# unbound-control flush_zone .
ok removed 19 rrsets, 8 messages and 3 key entries