BIND-9.20.19

Introdução ao BIND

O pacote BIND fornece um servidor DNS e utilitários clientes. Se você estiver interessado(a) somente nos utilitários, [então] consulte Utilitários BIND-9.20.19.

[Nota]

Nota

Esse pacote é conhecido por construir e funcionar adequadamente usando-se uma plataforma LFS 13.0.

Informação do Pacote

  • Transferência (HTTP): https://ftp.isc.org/isc/bind9/9.20.19/bind-9.20.19.tar.xz

  • Transferência (FTP):

  • Soma de verificação MD5 da transferência: eb6d57657dbe9c8c6d9c02fbb3e43ce6

  • Tamanho da transferência: 5,5 MB

  • Espaço em disco estimado exigido: 139 MB (23 MB instalado)

  • Tempo de construção estimado: 0,4 UPC (com paralelismo=4; cerca de 40 minutos, um tanto independente do processador, para executar a suíte completa de teste)

Dependências do "BIND"

Exigidas

liburcu-0.15.6 e libuv-1.52.0

Recomendadas

Opcionais

cURL-8.18.0, libidn2-2.3.8, libxml2-2.15.1, lmdb-0.9.35, MIT Kerberos V5-1.22.2, pytest-9.0.2, sphinx-9.1.0 (exigido para construir documentação), cmocka, geoip, jemalloc, w3m

Opcional (para executar a suíte de teste)

Net-DNS-1.54, dnspython e hypothesis

Observações de Editor(a): https://wiki.linuxfromscratch.org/blfs/wiki/bind

Instalação do BIND

Instale o "BIND" executando os seguintes comandos:

./configure --prefix=/usr          \
            --sysconfdir=/etc       \
            --localstatedir=/var    \
            --mandir=/usr/share/man \
            --disable-static        &&
make

Emita os seguintes comandos para executar a suíte completa de teste. Primeiro, como o(a) usuário(a) "root", configure algumas interfaces de teste:

[Nota]

Nota

Se o "IPv6" não estiver habilitado no núcleo, [então] existirão diversas mensagens de erro: "RTNETLINK answers: Operation not permitted". Essas mensagens não afetam os testes.

bin/tests/system/ifconfig.sh up

A suíte de teste possivelmente indique alguns testes ignorados, dependendo de quais opções de configuração forem usadas. Alguns testes são marcados com UNTESTED ou até mesmo falham se Net-DNS-1.54 não estiver instalado. Um teste, dnssec, é conhecido por falhar. Os testes exigem os módulos Python hypothesis e dnspython, os quais não estão no BLFS. Para contornar isso, as instruções abaixo criam um ambiente virtual Python e, em seguida, instalam os módulos nele antes de executar os testes. Para executar os testes, como um(a) usuário(a) desprivilegiado(a), execute:

python3 -m venv --system-site-packages testenv &&
source testenv/bin/activate                    &&
pip3 install dnspython hypothesis              &&
make -k check                                  &&
deactivate

Novamente como "root", limpe as interfaces de teste:

bin/tests/system/ifconfig.sh down

Finalmente, instale o pacote como o(a) usuário(a) "root":

make install

Explicações do Comando

--sysconfdir=/etc: Esse parâmetro força o "BIND" a procurar arquivos de configuração em "/etc" em vez de "/usr/etc".

--with-libidn2: Esse parâmetro habilita o suporte a "Internationalized Domain Names in Applications" ("IDNA2008").

--enable-fetchlimit: Use essa opção se você quiser estar apto(a) a limitar a taxa de consultas recursivas do cliente. Isso possivelmente seja útil em servidores que recebem um grande número de consultas.

--disable-doh: Use essa opção se você não tiver nghttp2-1.68.0 instalado e não precisar de suporte para DNS sobre HTTPS.

--disable-static: Essa chave impede a instalação das versões estáticas das bibliotecas.

--system-site-packages: Permita que o módulo venv do Python3 acesse o diretório /usr/lib/python3.14/site-packages do sistema instalado.

Configurando o BIND

Arquivos de Configuração

named.conf, root.hints, 127.0.0, rndc.conf e resolv.conf

Informação de Configuração

O BIND será configurado para executar em uma jaula chroot como um(a) usuário(a) sem privilégios (named). Essa configuração é mais segura naquilo que um comprometimento do DNS consegue afetar somente uns poucos arquivos no diretório HOME do(a) usuário(a) named.

Crie o(a) usuário(a) sem privilégios e grupo "named":

groupadd -g 20 named &&
useradd -c "Proprietário(a) do BIND" -g named -s /bin/false -u 20 named &&
install -d -m770 -o named -g named /srv/named

Configure alguns arquivos, diretórios e dispositivos necessários ao "BIND":

mkdir -p /srv/named &&
cd      /srv/named &&
mkdir -p dev etc/named/{slave,pz} usr/lib/engines var/run/named &&
mknod /srv/named/dev/null c 1 3 &&
mknod /srv/named/dev/urandom c 1 9 &&
chmod 666 /srv/named/dev/{null,urandom} &&
cp /etc/localtime etc

O arquivo "rndc.conf" contém informações para controlar as operações do "named" com o utilitário "rndc". Gere uma chave para uso no "named.conf" e "rndc.conf" com o comando "rndc-confgen":

rndc-confgen -a -b 512 -t /srv/named

Crie o arquivo named.conf a partir do qual o named lerá o local dos arquivos de zona, servidores raiz de nomes e chaves seguras DNS:

cat >> /srv/named/etc/named.conf << "EOF"
options {
    directory "/etc/named";
    pid-file "/var/run/named.pid";
    statistics-file "/var/run/named.stats";

};
zone "." {
    type hint;
    file "root.hints";
};
zone "0.0.127.in-addr.arpa" {
    type master;
    file "pz/127.0.0";
};

// O "Bind" 9 agora registra por padrão por intermédio do "syslog" (exceto depuração).
// Estas são as regras padrão de registro.

logging {
    category default { default_syslog; default_debug; };
    category unmatched { null; };

  channel default_syslog {
      syslog daemon;                      // Envia para o recurso de processo de segundo plano
                                          // do "syslog"
      severity info;                      // Envia somente informações prioritárias
                                          // e superiores
  };

  channel default_debug {
      file "named.run";                   // Escreve para "named.run" no 
                                          // diretório de trabalho. 
                                          // Observação: "stderr" é 
                                          // usado em vez de "named.run" 
                                          // se o servidor for iniciado 
                                          // com a opção "-f".
      severity dynamic;                   // Registra no nível de 
                                          // depuração atual do servidor.
  };

  channel default_stderr {
      stderr;                             // Escreve para "stderr"
      severity info;                      // Envia somente informações prioritárias
                                          // e superiores
  };

  channel null {
      null;                               // Descarta tudo enviado para
                                          // esse canal
  };
};
EOF

Crie um arquivo de zona com o seguinte conteúdo:

cat > /srv/named/etc/named/pz/127.0.0 << "EOF"
$TTL 3D
@     IN      SOA     ns.local.domain. hostmaster.local.domain. (
                        1       ; Serial
                        8H      ; Refresh
                        2H      ; Retry
                        4W      ; Expire
                        1D)     ; Minimum TTL
                NS      ns.local.domain.
1               PTR     localhost.
EOF

Crie o arquivo "root.hints" com os seguintes comandos:

[Nota]

Nota

Deve-se ter cuidado para garantir que não existam espaços iniciais neste arquivo.

cat > /srv/named/etc/named/root.hints << "EOF"
.                       6D  IN      NS      A.ROOT-SERVERS.NET.
.                       6D  IN      NS      B.ROOT-SERVERS.NET.
.                       6D  IN      NS      C.ROOT-SERVERS.NET.
.                       6D  IN      NS      D.ROOT-SERVERS.NET.
.                       6D  IN      NS      E.ROOT-SERVERS.NET.
.                       6D  IN      NS      F.ROOT-SERVERS.NET.
.                       6D  IN      NS      G.ROOT-SERVERS.NET.
.                       6D  IN      NS      H.ROOT-SERVERS.NET.
.                       6D  IN      NS      I.ROOT-SERVERS.NET.
.                       6D  IN      NS      J.ROOT-SERVERS.NET.
.                       6D  IN      NS      K.ROOT-SERVERS.NET.
.                       6D  IN      NS      L.ROOT-SERVERS.NET.
.                       6D  IN      NS      M.ROOT-SERVERS.NET.
A.ROOT-SERVERS.NET.     6D  IN      A       198.41.0.4
A.ROOT-SERVERS.NET.     6D  IN      AAAA    2001:503:ba3e::2:30
B.ROOT-SERVERS.NET.     6D  IN      A       170.247.170.2
B.ROOT-SERVERS.NET.     6D  IN      AAAA    2801:1b8:10::b
C.ROOT-SERVERS.NET.     6D  IN      A       192.33.4.12
C.ROOT-SERVERS.NET.     6D  IN      AAAA    2001:500:2::c
D.ROOT-SERVERS.NET.     6D  IN      A       199.7.91.13
D.ROOT-SERVERS.NET.     6D  IN      AAAA    2001:500:2d::d
E.ROOT-SERVERS.NET.     6D  IN      A       192.203.230.10
E.ROOT-SERVERS.NET.     6D  IN      AAAA    2001:500:a8::e
F.ROOT-SERVERS.NET.     6D  IN      A       192.5.5.241
F.ROOT-SERVERS.NET.     6D  IN      AAAA    2001:500:2f::f
G.ROOT-SERVERS.NET.     6D  IN      A       192.112.36.4
G.ROOT-SERVERS.NET.     6D  IN      AAAA    2001:500:12::d0d
H.ROOT-SERVERS.NET.     6D  IN      A       198.97.190.53
H.ROOT-SERVERS.NET.     6D  IN      AAAA    2001:500:1::53
I.ROOT-SERVERS.NET.     6D  IN      A       192.36.148.17
I.ROOT-SERVERS.NET.     6D  IN      AAAA    2001:7fe::53
J.ROOT-SERVERS.NET.     6D  IN      A       192.58.128.30
J.ROOT-SERVERS.NET.     6D  IN      AAAA    2001:503:c27::2:30
K.ROOT-SERVERS.NET.     6D  IN      A       193.0.14.129
K.ROOT-SERVERS.NET.     6D  IN      AAAA    2001:7fd::1
L.ROOT-SERVERS.NET.     6D  IN      A       199.7.83.42
L.ROOT-SERVERS.NET.     6D  IN      AAAA    2001:500:9f::42
M.ROOT-SERVERS.NET.     6D  IN      A       202.12.27.33
M.ROOT-SERVERS.NET.     6D  IN      AAAA    2001:dc3::35
EOF

O arquivo "root.hints" é uma lista de servidores raiz de nomes. Esse arquivo precisa ser atualizado periodicamente com o utilitário "dig". Uma cópia atual do "root.hints" pode ser obtida a partir de https://www.internic.net/domain/named.root. Para detalhes, consulte-se o "Manual de Referência do(a) Administrador(a) do BIND 9".

Crie ou modifique o "resolv.conf" para usar o novo servidor de nomes com os seguintes comandos:

[Nota]

Nota

Substitua <teudomínio.com> pelo teu próprio nome de domínio válido.

cp /etc/resolv.conf /etc/resolv.conf.bak &&
cat > /etc/resolv.conf << "EOF"
search <teudomínio.com>
nameserver 127.0.0.1
EOF

Configure as permissões relativas à jaula "chroot" com o seguinte comando:

chown -R named:named /srv/named

Unidade do systemd

Para iniciar o servidor "DNS" na inicialização, instale a unidade "named.service" inclusa no pacote "" "blfs-systemd-units-20251204":

make install-named

Agora inicie o "BIND" com o seguinte comando:

systemctl start named

Testando o BIND

Teste a nova instalação do "BIND" 9. Primeiro consulte o endereço local do dispositivo com o "dig":

dig -x 127.0.0.1

Agora tente uma pesquisa externa de nome, observando a diferença de velocidade em pesquisas repetidas devido ao cache. Execute o comando "dig" duas vezes relativo ao mesmo endereço:

dig www.linuxfromscratch.org &&
dig www.linuxfromscratch.org

Você pode ver resultados quase instantâneos com as pesquisas de cache do "named". Consulte-se o Manual de Referência do(a) Administrador(a) do "BIND" (veja-se abaixo) para mais opções de configuração.

Manual de Referência do(a) Administrador(a) (MRA)

A documentação ARM (não confunda com a arquitetura do processador) está incluída no pacote do fonte. A documentação está no formato .rst, o que significa que ela pode ser convertida em formatos legíveis por humanos se o sphinx-9.1.0 estiver instalado.

Quando o BIND estiver configurado, especialmente se ele for operar em um cenário da vida real, é altamente recomendado consultar a documentação ARM. O ISC fornece um conjunto atualizado de excelente documentação junto com cada lançamento, de forma que possa ser facilmente visualizada e (ou) baixada – então, não existe desculpa para não ler os documentos. Os formatos que o ISC fornece são epub e HTML em https://downloads.isc.org/isc/bind9/9.20.19/doc/arm/.

Conteúdo

Aplicativos Instalados: arpaname, ddns-confgen, delv, dig, dnssec-cds, dnssec-dsfromkey, dnssec-importkey, dnssec-keyfromlabel, dnssec-keygen, dnssec-ksr, dnssec-revoke, dnssec-settime, dnssec-signzone, dnssec-verify, host, mdig, named, named-checkconf, named-checkzone, named-compilezone, named-journalprint, named-nzd2nzf, named-rrchecker, nsec3hash, nslookup, nsupdate, rndc, rndc-confgen e tsig-keygen (link simbólico)
Bibliotecas Instaladas: libdns.so, libisc.so, libisccc.so, libisccfg.so e libns.so
Diretórios Instalados: /usr/include/{dns,dst,irs,isc,isccc,isccfg,ns}, /usr/lib/bind e /srv/named

Descrições Curtas

arpaname

traduz endereços "IP" para os nomes "ARPA" correspondentes

ddns-confgen

gera uma chave para uso pelo "nsupdate" e pelo "named"

delv

é uma nova ferramenta de depuração que é uma sucessora do "dig"

dig

interroga servidores "DNS"

dnssec-cds

muda os registros "DS" para uma zona filha baseado em "CDS"/"CDNSKEY"

dnssec-dsfromkey

gera o Registro de Recurso ("RR") do "Delegation Signer" ("DS")

dnssec-importkey

lê um registro público "DNSKEY" e gera um par de arquivos ".key"/".private"

dnssec-keyfromlabel

obtém chaves com o rótulo dado a partir de um dispositivo de "hardware" de criptografia e constrói arquivos de chave para "DNSSEC"

dnssec-keymgr

garante a cobertura correta "DNSKEY" baseada em uma política definida

dnssec-ksr

cria arquivos de resposta de chave assinada (SKR) para configurações KSK offline

dnssec-revoke

configura o bit "REVOKED" em uma chave "DNSSEC"

dnssec-settime

configura os metadados de hora da chave para uma chave "DNSSEC"

dnssec-signzone

gera versões assinadas de arquivos de zona

dnssec-verify

verifica se uma zona está totalmente assinada para cada algoritmo encontrado no conjunto "RR" do "DNSKEY" para a zona e se as cadeias "NSEC"/"NSEC3" estão completas

host

é um utilitário para pesquisas de "DNS"

mdig

é uma versão do "dig" que permite múltiplas consultas ao mesmo tempo

named

é o processo de segundo plano do servidor de nomes

named-checkconf

verifica a sintaxe dos arquivos "named.conf"

named-checkzone

verifica a validade do arquivo de zona

named-compilezone

é semelhante ao "named-checkzone", mas sempre despeja o conteúdo da zona em um arquivo especificado em um formato especificado

named-journalprint

imprime o diário da zona em formato legível por humanos(as)

named-rrchecker

lê um registro individual de recurso "DNS" a partir da entrada padrão e verifica se ele está sintaticamente correto

named-nzd2nzf

converte uma base de dados "NZD" para o formato de texto "NZF"

nsec3hash

gera um resumo "NSEC3" baseado em um conjunto de parâmetros "NSEC3"

nslookup

é um aplicativo usado para consultar servidores de nomes de domínio da Internet

nsupdate

é usado para submeter solicitações de atualização de "DNS"

rndc

controla a operação do "BIND"

rndc-confgen

gera arquivos "rndc.conf"

tsig-keygen

é um link simbólico para o "ddns-confgen"