在RHEL 7上设置仅缓存的DNS服务器
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