分步教程:使用绑定chroot配置DNS服务器(CentOS/RHEL 7/8)

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

如何逐步在rhel 7或者rhel 8中配置dns服务器。

在Linux中逐步配置dns服务器。
绑定chroot。
在Linux中逐步配置dns服务器。
如何在Rhel 7中逐步配置dns服务器。
名为chroot。
绑定允许查询。
安装bind centos 7或者centos8. 使用centos或者rhel 7或者centos 8使用命名的chroot配置正向区域文件和反向区域文件。
在rhel 7或者rhel 8 linux上示例正向区域文件和反向区域文件。
使用named-checkconf验证绑定dns服务器配置文件。
不要将chroot内容复制到/var/named/chroot。
dns配置逐步。
在红色帽子上安装dns服务器。

安装绑定Chroot RPM

要安装在chroot环境中运行的BIND,我们必须安装bind-chroot软件包。

说明:

如果我们没有活动的存储库,请下载具有所有依赖项列表的rpms,然后可以使用其创建离线存储库。

[root@centos-8 ~]# yum install -y bind-chroot

通过yum验证与bind chroot一起安装的可用绑定软件包的列表:

[root@centos-8 ~]# rpm -qa| grep bind
bind-license-9.9.4-74.el7_6.1.noarch
bind-chroot-9.9.4-74.el7_6.1.x86_64
keybinder3-0.3.0-1.el7.x86_64
bind-libs-9.9.4-74.el7_6.1.x86_64
bind-utils-9.9.4-74.el7_6.1.x86_64
bind-libs-lite-9.9.4-74.el7_6.1.x86_64
bind-9.9.4-74.el7_6.1.x86_64
rpcbind-0.2.0-47.el7.x86_64

下面的目录和文件列表将在CentOS/RHEL 7/8 Linux主机上使用bind chroot软件包创建:

[root@centos-8 ~]# ls -l /var/named/chroot/
total 20
drwxr-x---. 2 root named 4096 Jun 21 16:11 dev
drwxr-x---. 4 root named 4096 Jun 21 16:11 etc
drwxr-x---. 3 root named 4096 Jun 21 16:11 run
drwxr-xr-x. 3 root root  4096 Jun 21 16:11 usr
drwxr-x---. 5 root named 4096 Jun 21 16:11 var

打开bind chroot环境,与此相关的所有与DNS DNS服务器绑定的文件和目录将挂载在/var/named/chroot上。

提示:

如果我们已经安装了bind chroot软件包,则BIND服务将在chroot环境中运行。
在这种情况下,初始化脚本将使用mount --bind命令将所有BIND配置文件安装到chroot位置,以便我们可以在此环境之外管理配置。
不需要将任何内容复制到/var/named/chroot /目录中,因为它是自动挂载的。

[root@centos-8 ~]# /usr/libexec/setup-named-chroot.sh /var/named/chroot on

接下来验证/var/named/chroot上的安装路径列表

[root@centos-8 ~]# mount | grep chroot
/dev/mapper/centos-root on /var/named/chroot/etc/named type ext4 (rw,relatime,data=ordered)
/dev/mapper/centos-root on /var/named/chroot/usr/lib64/bind type ext4 (rw,relatime,data=ordered)
/dev/mapper/centos-root on /var/named/chroot/etc/localtime type ext4 (rw,relatime,data=ordered)
/dev/mapper/centos-root on /var/named/chroot/etc/named type ext4 (rw,relatime,data=ordered)
/dev/mapper/centos-root on /var/named/chroot/etc/named.root.key type ext4 (rw,relatime,data=ordered)
/dev/mapper/centos-root on /var/named/chroot/etc/named.conf type ext4 (rw,relatime,data=ordered)
/dev/mapper/centos-root on /var/named/chroot/etc/named.rfc1912.zones type ext4 (rw,relatime,data=ordered)
/dev/mapper/centos-root on /var/named/chroot/etc/rndc.key type ext4 (rw,relatime,data=ordered)
/dev/mapper/centos-root on /var/named/chroot/etc/named.iscdlv.key type ext4 (rw,relatime,data=ordered)
/dev/mapper/centos-root on /var/named/chroot/etc/protocols type ext4 (rw,relatime,data=ordered)
/dev/mapper/centos-root on /var/named/chroot/etc/services type ext4 (rw,relatime,data=ordered)
/dev/mapper/centos-root on /var/named/chroot/usr/lib64/bind type ext4 (rw,relatime,data=ordered)
tmpfs on /var/named/chroot/run/named type tmpfs (rw,nosuid,nodev,mode=755)
/dev/mapper/centos-root on /var/named/chroot/var/named type ext4 (rw,relatime,data=ordered)

我们将记下我们的IP地址,该地址将用于在chroot环境中配置BIND DNS

[root@centos-8 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:df:87:41 brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.32/8 brd 10.255.255.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fedf:8741/64 scope link
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:95:c3:cd brd ff:ff:ff:ff:ff:ff
4: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:b0:af:fb brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
5: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 1000
    link/ether 52:54:00:b0:af:fb brd ff:ff:ff:ff:ff:ff

配置DNS服务器(named.conf)

配置DNS服务器的第一件事就是更新我们的/etc/named.conf文件。
我们在我们的named.conf文件中进行了以下突出显示的更改:

[root@centos-8 ~]# cat /etc/named.conf
options {
        listen-on port 53 { 127.0.0.1; any; };
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        recursing-file  "/var/named/data/named.recursing";
        secroots-file   "/var/named/data/named.secroots";
        allow-query     { localhost; any; };
        allow-query-cache { localhost; any; };
        recursion yes;
        dnssec-enable yes;
        dnssec-validation yes;
        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.iscdlv.key";
        managed-keys-directory "/var/named/dynamic";
        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";
};
logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};
zone "." IN {
        type hint;
        file "named.ca";
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

添加区域记录

接下来,我们需要在/etc/named.rfc1912.zones文件中添加正向区域文件和反向区域文件位置的区域记录。
这里example.com包含我们的正向区域文件的详细信息,而2.0.10.in-addr.arpa包含有关反向区域文件的信息。

zone "example.com" IN {
        type master;
        file "example.com.zone";
        allow-update { none; };
};
zone "2.0.10.in-addr.arpa" IN {
        type master;
        file "example.com.rzone";
        allow-update { none; };
};

说明:

对于反向区域,这里由于我们的IP为10.0.2.32,因此我将2.0.10.in-addr.arpa用作区域名称,类似地,如果IP为192.168.0.XX,则反向区域区域名称语法为0.168.192.in-addr.arpa

在接下来的步骤中,我们将创建正向和反向区域文件。

创建前向区域文件

导航到"/var/named",我们将使用一些默认模板来配置我们的正向区域文件。

[root@centos-8 ~]# cd /var/named/

列出/var/named的内容

[root@centos-8 named]# ls -l
total 32
drwxr-x---. 2 root  named 4096 Jun 21 16:12 chroot
drwxrwx---. 2 named named 4096 Jun  5 00:56 data
drwxrwx---. 2 named named 4096 Jun  5 00:56 dynamic
-rw-r-----. 1 root  named 2281 Jan 22  2016 named.ca
-rw-r-----. 1 root  named  152 Dec 15  2009 named.empty
-rw-r-----. 1 root  named  152 Jun 21  2007 named.localhost
-rw-r-----. 1 root  named  168 Dec 15  2009 named.loopback
drwxrwx---. 2 named named 4096 Jun  5 00:56 slaves

使用" named.localhost"创建前向区域文件

[root@centos-8 named]# cat named.loopback > example.com.zone

更改转发区域文件(example.com.zone)的权限和所有权,如下所示:

[root@centos-8 named]# chmod 644 example.com.zone
[root@centos-8 named]# chown root:named example.com.zone
[root@centos-8 named]# ls -l example.com.zone
-rw-r--r--. 1 root named 260 Jun 21 16:28 example.com.zone

使用设置和环境中的详细信息更新前向区域文件。
以下是我的示例正向区域文件:

[root@centos-8 named]# cat example.com.zone
$TTL 1D
@       IN SOA  example.com       root (
                                        1       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
                   IN NS   localhost
localhost          IN A    127.0.0.1
centos-7           IN A    10.0.2.30
rhel-8             IN A    10.0.2.31
centos-8           IN A    10.0.2.32

创建反向区域文件

同样,使用named.localhost创建一个反向区域文件。

[root@centos-8 named]# cat named.localhost > example.com.rzone

更改反向区域文件(example.com.rzone)的权限和所有权,如下所示:

[root@centos-8 named]# chmod 644 example.com.rzone
[root@centos-8 named]# chown root:named example.com.rzone
[root@centos-8 named]# ls -l example.com.rzone
-rw-r--r--. 1 root named 260 Jun 21 16:28 example.com.rzone

接下来,根据环境更新反向区域文件的值。
以下是我的示例反向区域文件:

[root@centos-8 named]# cat example.com.rzone
$TTL 1D
@       IN SOA  example.com.    root.example.com. (
                                        1       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        IN NS   localhost.
30      IN PTR  centos-7.example.com.
31      IN PTR  rhel-8.example.com.
32      IN PTR  centos-8.example.com.

说明:

每次修改区域文件时更新序列号。

验证绑定chroot配置

在启动" named-chroot"服务之前,重要的是要验证绑定chroot配置文件是否存在语法错误:

[root@centos-8 named]# named-checkconf -t /var/named/etc/named.conf

这里的-t表示chroot到目录,以便配置文件中的include伪指令被处理,就好像是由类似chrooted的名称运行一样。
执行此命令之前,请确保将/var/named /的所有内容都挂载在/var/named/chroot上,否则可能会出现`open:etc/named.conf:not found file'错误。

使用mount命令检查/etc/mtab的内容

[root@centos-8 ~]# mount | grep chroot
/dev/mapper/centos-root on /var/named/chroot/etc/named type ext4 (rw,relatime,data=ordered)
/dev/mapper/centos-root on /var/named/chroot/usr/lib64/bind type ext4 (rw,relatime,data=ordered)
/dev/mapper/centos-root on /var/named/chroot/etc/localtime type ext4 (rw,relatime,data=ordered)
/dev/mapper/centos-root on /var/named/chroot/etc/named type ext4 (rw,relatime,data=ordered)
/dev/mapper/centos-root on /var/named/chroot/etc/named.root.key type ext4 (rw,relatime,data=ordered)
/dev/mapper/centos-root on /var/named/chroot/etc/named.conf type ext4 (rw,relatime,data=ordered)
/dev/mapper/centos-root on /var/named/chroot/etc/named.rfc1912.zones type ext4 (rw,relatime,data=ordered)
/dev/mapper/centos-root on /var/named/chroot/etc/rndc.key type ext4 (rw,relatime,data=ordered)
/dev/mapper/centos-root on /var/named/chroot/etc/named.iscdlv.key type ext4 (rw,relatime,data=ordered)
/dev/mapper/centos-root on /var/named/chroot/etc/protocols type ext4 (rw,relatime,data=ordered)
/dev/mapper/centos-root on /var/named/chroot/etc/services type ext4 (rw,relatime,data=ordered)
/dev/mapper/centos-root on /var/named/chroot/usr/lib64/bind type ext4 (rw,relatime,data=ordered)
tmpfs on /var/named/chroot/run/named type tmpfs (rw,nosuid,nodev,mode=755)
/dev/mapper/centos-root on /var/named/chroot/var/named type ext4 (rw,relatime,data=ordered)

如果我们没有在/var/named/chroot上看到这些路径,请使用以下命令关闭chroot的安装:

[root@centos-8 ~]# /usr/libexec/setup-named-chroot.sh /var/named/chroot off

然后将其重新打开

[root@centos-8 ~]# /usr/libexec/setup-named-chroot.sh /var/named/chroot on

接下来重新验证mount | grep chroot命令输出。
我们应该看到所有必需的设备都挂载在/var/named/chroot上。
这对于刷新我们最近执行的所有更改非常重要,这些更改应该在/var/named/chroot下可见。

现在我们可以运行以下命令来验证chroot配置文件

[root@centos-8 named]# named-checkconf -t /var/named/etc/named.conf

启动named-chroot服务

要在Red Hat Enterprise Linux 7上配置dns服务器,bind-chroot的安装不会改变命名服务的运行方式。
相反,如果我们想在chroot环境中运行命名服务,它将安装新的named-chroot服务,该服务需要使用systemctl命令启动。

但在此之前,请确保停止并禁用RHEL 7 Linux主机上可用且正在运行的任何命名服务:

[root@centos-8 named]# systemctl stop named
[root@centos-8 named]# systemctl disable named

接下来使用systemctl启动named-chroot服务:

[root@centos-8 named]# systemctl start named-chroot
[root@centos-8 ~]# systemctl status named-chroot
● named-chroot.service - Berkeley Internet Name Domain (DNS)
   Loaded: loaded (/usr/lib/systemd/system/named-chroot.service; disabled; vendor preset: disabled)
   Active: active (running) since Fri 2019-06-21 17:00:25 IST; 1min 1s ago
  Process: 5321 ExecStart=/usr/sbin/named -u named -c ${NAMEDCONF} -t /var/named/chroot $OPTIONS (code=exited, status=0/SUCCESS)
  Process: 5319 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkconf -t /var/named/chroot -z "$NAMEDCONF"; else echo "Checking of zone files is disabled"; fi (code=exited, status=0/SUCCESS)
 Main PID: 5323 (named)
    Tasks: 4
   CGroup: /system.slice/named-chroot.service
           └─5323 /usr/sbin/named -u named -c /etc/named.conf -t /var/named/chroot
Jun 21 17:00:25 centos-8.example.com named[5323]: zone 2.0.10.in-addr.arpa/IN: loaded serial 1
Jun 21 17:00:25 centos-8.example.com named[5323]: zone 1.0.0.127.in-addr.arpa/IN: loaded serial 0
Jun 21 17:00:25 centos-8.example.com named[5323]: zone localhost.localdomain/IN: loaded serial 0
Jun 21 17:00:25 centos-8.example.com named[5323]: zone example.com/IN: loaded serial 1
Jun 21 17:00:25 centos-8.example.com named[5323]: zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0....ial 0
Jun 21 17:00:25 centos-8.example.com named[5323]: zone localhost/IN: loaded serial 0
Jun 21 17:00:25 centos-8.example.com named[5323]: all zones loaded
Jun 21 17:00:25 centos-8.example.com named[5323]: running
Jun 21 17:00:25 centos-8.example.com named[5323]: zone example.com/IN: sending notifies (serial 1)
Jun 21 17:00:25 centos-8.example.com named[5323]: zone 2.0.10.in-addr.arpa/IN: sending notifies (serial 1)
Hint: Some lines were ellipsized, use -l to show in full.

现在我们的配置dns服务器步骤几乎完成,启用named-chroot服务以在每次重新启动后自动启动该服务:

[root@centos-8 ~]# systemctl enable named-chroot
Created symlink from /etc/systemd/system/multi-user.target.wants/named-chroot.service to /usr/lib/systemd/system/named-chroot.service.

使用resolv.conf配置DNS服务器

现在配置dns服务器的最后一步是使用我们的DNS服务器IP(即" 10.0.2.32")更新/etc/resolv.conf

[root@centos-8 ~]# cat /etc/resolv.conf
# Generated by NetworkManager
search example.com
nameserver 10.0.2.32
nameserver 8.8.8.8

验证绑定的Chroot DNS服务器

现在,我们可以使用其他工具来验证绑定chroot DNS服务器配置。

在此示例中,我使用" nslookup"进行挖掘以验证我的正向和反向区域配置

[root@centos-8 ~]# nslookup centos-7.example.com
Server:         10.0.2.32
Address:        10.0.2.32#53
Name:   centos-7.example.com
Address: 10.0.2.30

因此,nslookup可以使用我们的绑定chroot DNS服务器10.0.2.32来获得centos-7.example.com的响应。
类似地,使用dig命令查找ANSWER SECTION,以获取反向区域文件内容。

[root@centos-8 ~]# dig -x 10.0.2.30
; <<>> DiG 9.9.4-RedHat-9.9.4-74.el7_6.1 <<>> -x 10.0.2.30
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55495
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 3
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;30.2.0.10.in-addr.arpa.                IN      PTR
;; ANSWER SECTION:
30.2.0.10.in-addr.arpa. 86400   IN      PTR     centos-7.example.com.
;; AUTHORITY SECTION:
2.0.10.in-addr.arpa.    86400   IN      NS      localhost.
;; ADDITIONAL SECTION:
localhost.              86400   IN      A       127.0.0.1
localhost.              86400   IN      AAAA    ::1
;; Query time: 0 msec
;; SERVER: 10.0.2.32#53(10.0.2.32)
;; WHEN: Fri Jun 21 17:02:28 IST 2019
;; MSG SIZE  rcvd: 149

在客户端上配置DNS服务器

要在客户端上配置DNS服务器,我们不需要安装任何其他与绑定chroot相关的rpm,只需在所有客户端上更新/etc/resolv.conf文件即可使用DNS服务器的名称服务器IP。

例如在我的客户节点上:

[root@rhel-8 ~]# cat /etc/resolv.conf
# Generated by NetworkManager
search example.com
nameserver 10.0.2.32

让我们使用nslookup来验证DNS服务器的配置:

[root@rhel-8 ~]# nslookup centos-8.example.com
Server:         10.0.2.32
Address:        10.0.2.32#53
Name:   centos-8.example.com
Address: 10.0.2.32

如我们所见,客户端可以正确地从运行在10.0.2.32 rhel linux主机上的DNS服务器获取响应。