A tradução do artigo foi preparada para os alunos do curso Está interessado em se desenvolver nesta área? Veja a gravação da transmissão do workshop de Ivan Piskunov

Neste artigo, falarei sobre os passos para configurar um servidor DNS no RHEL 7 ou CentOS 7. Para demonstração, utilizei o Red Hat Enterprise Linux 7.4. Nosso objetivo é criar um registro A e um registro PTR para a zona de pesquisa direta e reversa, respectivamente.
Primeiro, instale os pacotes rpm necessários para o servidor DNS.
NOTA: Para RHEL, você deve ter uma , ou você pode , com o qual o gerenciador de pacotes «yum» poderá instalar os pacotes rpm e as dependências necessárias.
# yum install bind bind-chroot caching-nameserverMinhas configurações:
# hostname
golinuxhub-client.example
Мой IP-адрес 192.168.1.7
# ip address | egrep 'inet.*enp0s3'
inet 192.168.1.7/24 brd 192.168.1.255 scope global dynamic enp0s3Como usaremos chroot, é necessário desativar o serviço.
# systemctl stop named
# systemctl disable namedEm seguida, copie os arquivos necessários para o diretório chroot.
NOTA. Use o argumento -p no comando cp para preservar permissões e proprietários.
[root@golinuxhub-client ~]# cp -rpvf /usr/share/doc/bind-9.9.4/sample/etc/* /var/named/chroot/etc/
‘/usr/share/doc/bind-9.9.4/sample/etc/named.conf’ -> ‘/var/named/chroot/etc/named.conf’
‘/usr/share/doc/bind-9.9.4/sample/etc/named.rfc1912.zones’ -> ‘/var/named/chroot/etc/named.rfc1912.zones’Em seguida, copie os arquivos relacionados à zona para o novo local.
[root@golinuxhub-client ~]# cp -rpvf /usr/share/doc/bind-9.9.4/sample/var/named/* /var/named/chroot/var/named/
‘/usr/share/doc/bind-9.9.4/sample/var/named/data’ -> ‘/var/named/chroot/var/named/data’
‘/usr/share/doc/bind-9.9.4/sample/var/named/my.external.zone.db’ -> ‘/var/named/chroot/var/named/my.external.zone.db’
‘/usr/share/doc/bind-9.9.4/sample/var/named/my.internal.zone.db’ -> ‘/var/named/chroot/var/named/my.internal.zone.db’
‘/usr/share/doc/bind-9.9.4/sample/var/named/named.ca’ -> ‘/var/named/chroot/var/named/named.ca’
‘/usr/share/doc/bind-9.9.4/sample/var/named/named.empty’ -> ‘/var/named/chroot/var/named/named.empty’
‘/usr/share/doc/bind-9.9.4/sample/var/named/named.localhost’ -> ‘/var/named/chroot/var/named/named.localhost’
‘/usr/share/doc/bind-9.9.4/sample/var/named/named.loopback’ -> ‘/var/named/chroot/var/named/named.loopback’
‘/usr/share/doc/bind-9.9.4/sample/var/named/slaves’ -> ‘/var/named/chroot/var/named/slaves’
‘/usr/share/doc/bind-9.9.4/sample/var/named/slaves/my.ddns.internal.zone.db’ -> ‘/var/named/chroot/var/named/slaves/my.ddns.internal.zone.db’
‘/usr/share/doc/bind-9.9.4/sample/var/named/slaves/my.slave.internal.zone.db’ -> ‘/var/named/chroot/var/named/slaves/my.slave.internal.zone.db’
```bash
Agora vamos examinar o arquivo de configuração principal.
```bash
# cd /var/named/chroot/etc/Limpe o conteúdo do named.conf e insira o seguinte.
[root@golinuxhub-client etc]# vim 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";
allow-query { localhost; any; };
allow-query-cache { localhost; any; };
};
logging {
channel default_debug {
file "data\/named.run";
severity dynamic;
};
};
view my_resolver {
match-clients { localhost; any; };
recursion yes;
include "\/etc\/named.rfc1912.zones";
};As informações relacionadas à zona devem ser adicionadas em /var/named/chroot/etc/named.rfc1912.zones. Adicione os registros abaixo. O arquivo example.zone é o arquivo da zona direta, e example.rzone é o arquivo da zona reversa.
NOTA IMPORTANTE: A zona de pesquisa reversa contém 1.168.192, uma vez que meu endereço IP é 192.168.1.7
zone "example" IN {
type master;
file "example.zone";
allow-update { none; };
};
zone "1.168.192.in-addr.arpa" IN {
type master;
file "example.rzone";
allow-update { none; };
};Os arquivos relacionados às zonas estão aqui:
# cd /var/named/chroot/var/named/Em seguida, criaremos os arquivos para a zona direta e reversa. Os nomes dos arquivos serão os mesmos do arquivo acima named.rfc1912.zones. Já temos alguns modelos padrão que podemos usar.
# cp -p named.localhost example.zone
# cp -p named.loopback example.rzoneComo você pode ver, as permissões atuais de todos os arquivos e diretórios pertencem a root.
[root@golinuxhub-client named]# ll
total 32
drwxr-xr-x. 2 root root 6 May 22 2017 data
-rw-r--r--. 1 root root 168 May 22 2017 example.rzone
-rw-r--r--. 1 root root 152 May 22 2017 example.zone
-rw-r--r--. 1 root root 56 May 22 2017 my.external.zone.db
-rw-r--r--. 1 root root 56 May 22 2017 my.internal.zone.db
-rw-r--r--. 1 root root 2281 May 22 2017 named.ca
-rw-r--r--. 1 root root 152 May 22 2017 named.empty
-rw-r--r--. 1 root root 152 May 22 2017 named.localhost
-rw-r--r--. 1 root root 168 May 22 2017 named.loopback
drwxr-xr-x. 2 root root 71 Feb 12 21:02 slavesAltere as permissões de todos os arquivos, definindo como proprietário o usuário root e o grupo named.
# chown root:named *Mas para data o proprietário deve ser named:named.
# chown -R named:named data
# ls -l
total 32
drwxr-xr-x. 2 named named 6 May 22 2017 data
-rw-r--r--. 1 root named 168 May 22 2017 example.rzone
-rw-r--r--. 1 root named 152 May 22 2017 example.zone
-rw-r--r--. 1 root named 56 May 22 2017 my.external.zone.db
-rw-r--r--. 1 root named 56 May 22 2017 my.internal.zone.db
-rw-r--r--. 1 root named 2281 May 22 2017 named.ca
-rw-r--r--. 1 root named 152 May 22 2017 named.empty
-rw-r--r--. 1 root named 152 May 22 2017 named.localhost
-rw-r--r--. 1 root named 168 May 22 2017 named.loopback
drwxr-xr-x. 2 root named 71 Feb 12 21:02 slavesAdicione o conteúdo abaixo ao arquivo da zona direta. Aqui, estamos criando um registro A para localhost (golinuxhub-client) e outro para o servidor (golinuxhub-server).
# vim example.zone
$TTL 1D
@ IN SOA example. root (
1 ; serial
3H ; refresh
15M ; retry
1W ; expire
1D ) ; minimum
IN NS example.
IN A 192.168.1.7
golinuxhub-server IN A 192.168.1.5
golinuxhub-client IN A 192.169.1.7Em seguida, adicione o conteúdo ao arquivo da zona reversa. Aqui, estamos criando um registro PTR para golinuxhub-client e para o servidor golinuxhub-server.
# vim example.rzone
$TTL 1D
@ IN SOA example. root.example. (
1997022700 ; serial
28800 ; refresh
14400 ; retry
3600000 ; expire
86400 ) ; minimum
IN NS example.
5 IN PTR golinuxhub-server.example.
7 IN PTR golinuxhub-client.example.Antes de iniciarmos o serviço named-chroot, vamos verificar a configuração do arquivo da zona.
[root@golinuxhub-client named]# named-checkzone golinuxhub-client.example example.zone
zone golinuxhub-client.example\/IN: loaded serial 1
OK
[root@golinuxhub-client named]# named-checkzone golinuxhub-client.example example.rzone
zone golinuxhub-client.example\/IN: loaded serial 1997022700
OKTudo parece bom. Agora verifique o arquivo de configuração usando o seguinte comando.
[root@golinuxhub-client named]# named-checkconf -t \/var\/named\/chroot\/ \/etc\/named.confEntão, tudo foi realizado com sucesso.
[root@golinuxhub-client named]# echo $?
0NOTA IMPORTANTE: meu SELinux está em modo permissivo
# getenforce
PermissiveTudo parece bem, então é hora de iniciar nosso serviço named-chroot .
[root@golinuxhub-client named]# systemctl restart named-chroot[root@golinuxhub-client named]# 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 Mon 2018-02-12 21:53:23 IST; 19s ago
Process: 5236 ExecStop=/bin/sh -c /usr/sbin/rndc stop > /dev/null 2>&1 || /bin/kill -TERM $MAINPID (code=exited, status=0/SUCCESS)
Process: 5327 ExecStart=/usr/sbin/named -u named -c ${NAMEDCONF} -t /var/named/chroot $OPTIONS (code=exited, status=0/SUCCESS)
Process: 5325 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkconf -t /var/named/chroot -z "$NAMEDCONF"; else echo "Verificação de arquivos de zona está desabilitada"; fi (code=exited, status=0/SUCCESS)
Main PID: 5330 (named)
CGroup: /system.slice/named-chroot.service
└─5330 /usr/sbin/named -u named -c /etc/named.conf -t /var/named/chroot
Feb 12 21:53:23 golinuxhub-client.example named[5330]: managed-keys-zone/my_resolver: carregado serial 0
Feb 12 21:53:23 golinuxhub-client.example named[5330]: zona 0.in-addr.arpa/IN/my_resolver: carregado serial 0
Feb 12 21:53:23 golinuxhub-client.example named[5330]: zona 1.0.0.127.in-addr.arpa/IN/my_resolver: carregado serial 0
Feb 12 21:53:23 golinuxhub-client.example named[5330]: zona 1.168.192.in-addr.arpa/IN/my_resolver: carregado serial 1997022700
Feb 12 21:53:23 golinuxhub-client.example named[5330]: zona example/IN/my_resolver: carregado serial 1
Feb 12 21:53:23 golinuxhub-client.example named[5330]: zona localhost/IN/my_resolver: carregado serial 0
Feb 12 21:53:23 golinuxhub-client.example named[5330]: zona 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.0.0.ip6.arpa/IN/my_resolver: carregado serial 0
Feb 12 21:53:23 golinuxhub-client.example named[5330]: zona localhost.localdomain/IN/my_resolver: carregado serial 0
Feb 12 21:53:23 golinuxhub-client.example named[5330]: todas as zonas carregadas
Feb 12 21:53:23 golinuxhub-client.example named[5330]: em execução
```bash
Certifique-se de que o resolv.conf contém seu endereço IP para que ele possa funcionar como um servidor DNS.
```bash
# cat /etc/resolv.conf
search example
nameserver 192.168.1.7
```bash
Vamos verificar nosso servidor DNS para a zona reversa, usando dig.
```bash
[root@golinuxhub-client named]# dig -x 192.168.1.5
; <> DiG 9.9.4-RedHat-9.9.4-50.el7 <> -x 192.168.1.5
;; global options: +cmd
;; Obteve resposta:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40331
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: versão: 0, flags:; udp: 4096
;; QUESTION SECTION:
;5.1.168.192.in-addr.arpa. IN PTR
;; ANSWER SECTION:
5.1.168.192.in-addr.arpa. 86400 IN PTR golinuxhub-server.example.
;; AUTHORITY SECTION:
1.168.192.in-addr.arpa. 86400 IN NS example.
;; ADDITIONAL SECTION:
example. 86400 IN A 192.168.1.7
;; Tempo da consulta: 1 msec
;; SERVIDOR: 192.168.1.7#53(192.168.1.7)
;; QUANDO: Mon Feb 12 22:13:17 IST 2018
;; TAMANHO MSG recebida: 122Como você pode ver, recebemos uma resposta positiva (ANSWER) para nossa consulta (QUERY).
[root@golinuxhub-client named]# dig -x 192.168.1.7
; <> DiG 9.9.4-RedHat-9.9.4-50.el7 <> -x 192.168.1.7
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55804
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;7.1.168.192.in-addr.arpa. IN PTR
;; ANSWER SECTION:
7.1.168.192.in-addr.arpa. 86400 IN PTR golinuxhub-client.example.
;; AUTHORITY SECTION:
1.168.192.in-addr.arpa. 86400 IN NS example.
;; ADDITIONAL SECTION:
example. 86400 IN A 192.168.1.7
;; Query time: 1 msec
;; SERVER: 192.168.1.7#53(192.168.1.7)
;; WHEN: Mon Feb 12 22:12:54 IST 2018
;; MSG SIZE rcvd: 122Da mesma forma, podemos verificar a zona direta.
[root@golinuxhub-client named]# nslookup golinuxhub-client.example
Server: 192.168.1.7
Address: 192.168.1.7#53
Name: golinuxhub-client.example
Address: 192.169.1.7
[root@golinuxhub-client named]# nslookup golinuxhub-server.example
Server: 192.168.1.7
Address: 192.168.1.7#53
Name: golinuxhub-server.example
Address: 192.168.1.5Este artigo está um pouco desatualizado, pois no RHEL 7 agora não é mais necessário copiar os arquivos de configuração do bind para o chroot. .
Fonte: habr.com
