BIND9: configuração de raiz

Instalação do BIND9

O sistema onde este serviço BIND9 foi instalado é o mesmo que é descrito na página Instalação TinyCoreLinux.
Existe um pacote BIND9 para o TinyCore, mas tal como noutras ocasiões, a instalação é muito faça-você-mesmo1. Não temos isqueiros, nem sequer fósforos, é mesmo esfregar os pauzinhos um no outro até sair fumo.
Instalamos a extensão usando o browser tce-ab ou o directamente o instalador tce-load

1
tce-load -wi bind


bind.tcz.dep OK
libcap.tcz.dep OK
Downloading: gcc_libs.tcz
Connecting to repo.tinycorelinux.net (89.22.99.37:80)
saving to 'gcc_libs.tcz'
gcc_libs.tcz         100% |************************************************************************************| 1020k  0:00:00 ETA
'gcc_libs.tcz' saved
gcc_libs.tcz: OK
Downloading: attr.tcz
Connecting to repo.tinycorelinux.net (89.22.99.37:80)
saving to 'attr.tcz'
attr.tcz             100% |************************************************************************************| 24576  0:00:00 ETA
'attr.tcz' saved
attr.tcz: OK
Downloading: libcap.tcz
Connecting to repo.tinycorelinux.net (89.22.99.37:80)
saving to 'libcap.tcz'
libcap.tcz           100% |************************************************************************************| 24576  0:00:00 ETA
'libcap.tcz' saved
libcap.tcz: OK
Downloading: bind.tcz
Connecting to repo.tinycorelinux.net (89.22.99.37:80)
saving to 'bind.tcz'
bind.tcz             100% |************************************************************************************| 1864k  0:00:00 ETA
'bind.tcz' saved
bind.tcz: OK


Há algumas dependências que por alguma razão não são instaladas automaticamente, e que temos de instalar:

1
 tce-load -wi libuv.tcz

Downloading: libuv.tcz
Connecting to repo.tinycorelinux.net (89.22.99.37:80)
saving to 'libuv.tcz'
libuv.tcz            100% |************************************************************************************| 65536  0:00:00 ETA
'libuv.tcz' saved
libuv.tcz: OK

Configuração inicial

Para aproveitar o backup automático que temos configurado para a pasta /opt/, vamos colocar as configurações do bind em /opt/local/etc/bind em vez do usual /usr/local/etc/bind

1
2
3
mkdir /opt/local/
mkdir /opt/local/etc/
mkdir /opt/local/etc/bind

Temos de descarregar duas peças importantes de informação: a root zone e as bind keys

1
2
wget -O /opt/local/etc/bind/root.zone \
        http://www.internic.net/domain/root.zone

Connecting to www.internic.net (192.0.32.9:80)
saving to '/opt/local/etc/bind/root.zone'
root.zone            100% |************************************************************************************| 2113k  0:00:00 ETA
'/opt/local/etc/bind/root.zone' saved

1
2
wget -O /opt/local/etc/bind/bind.keys \
        https://downloads.isc.org/isc/bind9/keys/9.11/bind.keys.v9_11

Connecting to downloads.isc.org (151.101.2.217:443)
saving to '/opt/local/etc/bind/bind.keys'
bind.keys            100% |************************************************************************************|  3923  0:00:00 ETA
'/opt/local/etc/bind/bind.keys' saved

O ficheiro principal de configuração é o named.conf
Colocar o seguinte em /opt/local/etc/bind/named.conf:

acl tjs  {
        localnets;          
        localhost;
        172.24.130.0/23;    
        10.48.130.0/24;     
};

options {
        directory "/opt/local/etc/bind";
        forwarders { 1.1.1.1; 8.8.8.8; };
        allow-query { tjs; };
        dnssec-validation auto;
        bindkeys-file "/opt/local/etc/bind/bind.keys";
        auth-nxdomain no;
        listen-on-v6 { none; };
};

  • directory: pasta das configurações
  • forwarders: aquilo que o BIND não souber, pergunta a estes
  • allow-query: redes que podem pedir resolução de nomes, para as quais foi definida uma ACL

Neste ficheiro também se declaram as zonas. Em primeiro lugar a zona root:

zone "." in {
        type hint;
        file "root.zone";
};

Existem duas configurações para cada zona: a zona directa (forward zone), que converte nomes em IPs, e a zona reversa (reverse zone), que converte IPs em nomes)
Uma zona directa para o localhost2

zone "localhost" in {
        type master;
        file "localhost.zone";
};

Uma zona reversa para o localhost

zone "localhost" in {
        type master;
        file "localhost.zone";
};

E por razões de segurança, descritas no RFC1912, também devem ser criadas duas zonas acessórias:

zone "0.in-addr.arpa" in {
        type master;
        file "0.in-addr.arpa.zone";
};
zone "255.in-addr.arpa" in {
        type master;
        file "255.in-addr.arpa.zone";
};

Cada zona declarada no named.conf necessita de um ficheiro de zona.
O ficheiro da zona directa localhost é /opt/local/etc/bind/localhost.zone:

; BIND data for LOCALHOST zone FWD
;
$ORIGIN localhost.
$TTL 3D
@   IN  SOA     @   root (
        2020090600  ; serial
                8H  ; refresh
                2H  ; retry
                7D  ; expiry
                1D  ; minimum
       )

@       IN  NS      @
        IN  A       127.0.0.1

A zona reversa localhost é /opt/local/etc/bind/127.in-addr.arpa.zone:

; BIND data for LOCALHOST zone REV
;
$ORIGIN 127.in-addr.arpa.
$TTL    3D
@   IN  SOA localhost. admin.localhost. (
         2020090600 ; serial
                 8H ; refresh
                 2H ; retry
                 7D ; expire
                 1D ; negative caching TTL
         )

;NS
@           IN  NS  localhost.

;localhost
1           IN  PTR localhost.

No campo Serial decidi3 usar a data de alteração da zona, seguida de um número com dois dígitos que indica se há várias mudanças no mesmo dia. Se o Serial de um ficheiro de zona alterado não for um número maior que o da versão anterior, o ficheiro de zona não será carregado pelos servidores.
Os tempos SOA são próximos de 24h, 2h, 30d, 4d para servidores expostos à WAN, e 8h, 2h, 7d, 1d para servidores em LAN (fonte: RFC1912).
As zonas pedidas pelo RFC1912 só têm o bloco SOA e o NS:
/opt/local/etc/bind/0.in-addr.arpa.zone

; BIND RFC1912 data
;
$ORIGIN 0.in-addr.arpa.
$TTL    3D
@   IN  SOA localhost. admin.localhost. (
         2020090600 ; serial
                 8H ; refresh
                 2H ; retry
                 7D ; expire
                 1D ; negative caching TTL
         )

;NS
@           IN  NS  localhost.

A zona 255.in-addr.arpa é idêntica à anterior, basta copiar:

1
sudo cp -a /opt/local/etc/bind/0.in-addr.arpa.zone /opt/local/etc/bind/255.in-addr.arpa.zone

E neste último mudar $ORIGIN para 255.in-addr.arpa
Pode-se testar o funcionamento do bind com o comando:4

1
sudo /usr/local/sbin/named -4g -c /opt/local/etc/bind/named.conf

05-Sep-2020 19:47:25.186 starting BIND 9.16.3 (Stable Release) 
05-Sep-2020 19:47:25.186 running on Linux i686 5.4.3-tinycore #2020 SMP Tue Dec 17 17:00:50 UTC 2019
05-Sep-2020 19:47:25.186 built with '--prefix=/usr/local' '--sysconfdir=/usr/local/etc' '--libdir=/usr/local/lib' '--localstatedir=/var' '--enable-shared' '--disable-static' '--with-libtool' '--with-openssl=/usr/local' '--with-readline=-lreadline -lncursesw' '--enable-full-report' '--enable-linux-caps' 'CC=gcc -flto -fuse-linker-plugin -march=i486 -mtune=i686 -Os -pipe'
05-Sep-2020 19:47:25.186 running as: named -4g -c /opt/local/etc/bind/named.conf
05-Sep-2020 19:47:25.186 compiled by GCC 9.2.0
05-Sep-2020 19:47:25.186 compiled with OpenSSL version: OpenSSL 1.1.1f  31 Mar 2020
05-Sep-2020 19:47:25.186 linked to OpenSSL version: OpenSSL 1.1.1f  31 Mar 2020
05-Sep-2020 19:47:25.186 compiled with zlib version: 1.2.11
05-Sep-2020 19:47:25.186 linked to zlib version: 1.2.11
05-Sep-2020 19:47:25.186 ----------------------------------------------------
05-Sep-2020 19:47:25.186 BIND 9 is maintained by Internet Systems Consortium,
05-Sep-2020 19:47:25.186 Inc. (ISC), a non-profit 501(c)(3) public-benefit
05-Sep-2020 19:47:25.186 corporation.  Support and training for BIND 9 are
05-Sep-2020 19:47:25.186 available at https://www.isc.org/support
05-Sep-2020 19:47:25.186 ----------------------------------------------------
05-Sep-2020 19:47:25.186 adjusted limit on open files from 4096 to 1048576
05-Sep-2020 19:47:25.186 found 1 CPU, using 1 worker thread
05-Sep-2020 19:47:25.186 using 1 UDP listener per interface
05-Sep-2020 19:47:25.186 using up to 21000 sockets
05-Sep-2020 19:47:25.206 loading configuration from '/opt/local/etc/bind/named.conf'
05-Sep-2020 19:47:25.209 reading built-in trust anchors from file '/opt/local/etc/bind/bind.keys'
05-Sep-2020 19:47:25.209 /opt/local/etc/bind/bind.keys:22: option 'managed-keys' is deprecated
05-Sep-2020 19:47:25.209 using default UDP/IPv4 port range: [32768, 60999]
05-Sep-2020 19:47:25.216 listening on IPv4 interface lo, 127.0.0.1#53
05-Sep-2020 19:47:25.219 listening on IPv4 interface eth0, 10.123.130.6#53
05-Sep-2020 19:47:25.219 generating session key for dynamic DNS
05-Sep-2020 19:47:25.219 sizing zone task pool based on 5 zones
05-Sep-2020 19:47:26.176 extra data in root hints 'root.zone'
05-Sep-2020 19:47:26.176 none:98: 'max-cache-size 90%' - setting to 162MB (out of 180MB)
05-Sep-2020 19:47:26.183 obtaining root key for view _default from '/opt/local/etc/bind/bind.keys'
05-Sep-2020 19:47:26.183 dnssec-validation auto: WARNING: root zone key not found
05-Sep-2020 19:47:26.183 using built-in root key for view _default
05-Sep-2020 19:47:26.183 set up managed keys zone for view _default, file 'managed-keys.bind'
[...]
05-Sep-2020 19:47:26.236 configuring command channel from '/usr/local/etc/rndc.key'
05-Sep-2020 19:47:26.236 couldn't add command channel 127.0.0.1#953: file not found
05-Sep-2020 19:47:26.239 not using config file logging statement for logging due to -g option
05-Sep-2020 19:47:26.239 managed-keys-zone: loaded serial 3
05-Sep-2020 19:47:26.243 zone 0.in-addr.arpa/IN: loaded serial 2020090600
05-Sep-2020 19:47:26.269 zone 127.in-addr.arpa/IN: loaded serial 2020090600
05-Sep-2020 19:47:26.273 zone 255.in-addr.arpa/IN: loaded serial 2020090600
05-Sep-2020 19:47:26.279 zone localhost/IN: loaded serial 2020090600
05-Sep-2020 19:47:26.279 all zones loaded
05-Sep-2020 19:47:26.283 running

Colocar o serviço a arrancar com o sistema:

1
2
echo "/usr/local/sbin/named -4 -c /opt/local/etc/bind/named.conf &" >> \
        /opt/bootlocal.sh && filetool.sh -b

E é necessário mudar a configuração de rede para utilizar o serviço que foi instalado como servidor DNS do sistema. A alteração pode ser implementada imediatamente sem reiniciar, com o comando

1
sudo echo "nameserver 127.0.0.1" > /etc/resolv.conf

Mas caso se deseje que a configuração se mantenha depois de um reinício, há mais um passo a dar: edita-se o ficheiro /opt/eth0.sh, comentam-se as linhas echo existentes, e acrescenta-se a linha:

echo "nameserver 127.0.0.1" > /etc/resolv.conf

Como o ficheiro está protegido contra alterações, é necessário forçar a alteração usando o comando :w! no vim. No final, claro,

1
filetool.sh -b

Gestão do serviço

O TinyCore não tem nenhum processo de gestão de serviços pré-definido ou configurado, é tudo à unha. No limite, o BIND poderia ser desligado com sudo killall named e ligado de novo com o comando que temos usado até agora.
Mas podemos pôr uns pneus no carro, é mais confortável.
O serviço BIND, tal como o OpenSSH que instalámos no artigo sobre a instalação do TinyCoreLinux (link no topo do artigo), tem um script de gestão (neste caso, bind) que é instalado automaticamente pela extensão em /usr/local/etc/init.d/

1
/usr/local/etc/init.d/bind

usage /usr/local/etc/init.d/bind start|stop|reload|restart|status

Assim, não temos de escrever um script5 nem de adaptar o do OpenSSH.
Este script, devido à maneira como as extensões são montadas no sistema, não pode ser alterado; para lhe fazermos alterações (que são necessárias), precisamos de copiar o script para um local permanente onde tenhamos permissões de escrita.
O script está originalmente em /usr/local/etc/init.d/, por isso um local lógico será /opt/local/etc/init.d/

1
mkdir /opt/local/etc/init.d

E temos de copiar quebrando os symlinks dos ficheiros para o local onde o TinyCore os monta de facto, copiando o ficheiro real e não o symlink:

1
sudo cp -aL /usr/local/etc/init.d/bind /opt/local/etc/init.d/

Acrescentamos essa pasta à variável de sistema PATH, para não termos de escrever o caminho para o(s) script(s) quando os quisermos usar:

1
2
3
echo 'export PATH="$PATH:/opt/local/etc/init.d/" >> ~/.ashrc
sudo echo 'export PATH="$PATH:/opt/local/etc/init.d/" >> /root/.ashrc
filetool.sh -b

Agora podemos fazer alterações ao script, nomeadamente a variável NAMED_OPTIONS. Mas ainda antes disso, temos de criar o utilizador e o grupo que vão gerir o serviço, porque uma extensão TCZ é uma mera lista de ficheiros e não toca nos ficheiros de sistema.

Utilizador e grupo do serviço

O script vem configurado para utilizar um utilizador criado especificamente para correr o serviço, named. Para o criar, precisamos dos comandos6:

1
2
sudo addgroup named -g 2000
sudo adduser named -u 2000 -G named -DH -s /bin/false

Fazer backup do /etc/passwd e do /etc/group:

1
2
echo "etc/passwd" >> /opt/.filetool.lst
echo "etc/group" >> /opt/.filetool.lst && filetool.sh -b

E mudar as permissões dos ficheiros de configuração:

1
2
sudo chown -R named:named /opt/local/etc/bind
sudo chmod -R 660 /opt/local/etc/bind

Quando se utiliza o utilizador named, o bind vai tentar usar a pasta /var/run/named, que não existe. Temos de a criar e de a tornar persistente:

1
2
3
mkdir /var/run/named
sudo chown named:named /var/run/named
echo "var/run/named" >> /opt/.filetool.lst && filetool.sh -b

Na nossa linha de comando actual de invocação do serviço, as nossas opções eram -4 (só IPv4) e -c /opt/local/etc/bin/named.conf (caminho para o ficheiro de configuração); são esses argumentos (especificando também o utilizador named) que temos de acrescentar na variável NAMED_OPTIONS do script /opt/local/etc/init.d/bind:

NAMED_OPTIONS="-u named -4 -c /opt/local/etc/bind/named.conf"

Gravar e sair.

Configurar o RNDC para gerir o BIND

Mas o script de início do serviço também depende do utilitário de controlo rndc7, que não vem pronto a funcionar, ou não estaríamos no CoreLinux, estaríamos numa distribuição com água e saneamento básico:
Criamos a chave que autoriza o rndc a comunicar com o bind e damos-lhe permanência:

1
2
3
4
sudo rndc-confgen -a
sudo chown root:staff /usr/local/etc/rndc.key
sudo chmod 640 /usr/local/etc/rndc.key
echo "usr/local/etc/rndc.key" >> /opt/.filetool.lst && filetool.sh -b

E pedimos um exemplo da configuração necessária:

1
2
sudo rndc-confgen > /opt/local/etc/bind/rndc.out
sudo cat /opt/local/etc/bind/rndc.out

# Start of rndc.conf
key "rndc-key" {
        algorithm hmac-sha256;
        secret "qXe5NgimFUmfztOZXJG4XXjkZJX0AdUEcTgci3+m38s=";
};

options {
        default-key "rndc-key";
        default-server 127.0.0.1;
        default-port 953;
};
# End of rndc.conf

# Use with the following in named.conf, adjusting the allow list as needed:
# key "rndc-key" {
#       algorithm hmac-sha256;
#       secret "qXe5NgimFUmfztOZXJG4XXjkZJX0AdUEcTgci3+m38s=";
# };
#
# controls {
#       inet 127.0.0.1 port 953
#               allow { 127.0.0.1; } keys { "rndc-key"; };
# };
# End of named.conf

No /opt/local/etc/bind/named.conf, acrescentam-se as instruções necessárias para usar o rndc, como indicado nos comentários acima.
Primeiro, o conteúdo da rndc.key

1
sudo cat /usr/local/etc/rndc.key >> /opt/local/etc/bind/named.conf

E acrescentar o seguinte ao /opt/local/etc/bind/named.conf

controls {
      inet 127.0.0.1 port 953
      allow { 127.0.0.1; } keys { "rndc-key"; };
};

Para testar,

1
2
3
sudo killall named
/usr/local/sbin/named -u named -4 -c /opt/local/etc/bind/named.conf &
rndc status

version: BIND 9.16.3 (Stable Release) 
running on verynice: Linux i686 5.4.3-tinycore #2020 SMP Tue Dec 17 17:00:50 UTC 2019
boot time: Sun, 06 Sep 2020 00:54:14 GMT
last configured: Sun, 06 Sep 2020 00:54:16 GMT
configuration file: /opt/local/etc/bind/named.conf
CPUs found: 1
worker threads: 1
UDP listeners per interface: 1
number of zones: 106 (97 automatic)
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
recursive clients: 0/900/1000
tcp clients: 0/150
TCP high-water: 0
server is up and running

Agora podemos ir ao /opt/bootlocal.sh e mudar a linha de activação de comando para usar o script. Comenta-se a linha de activação anterior (/usr/local/sbin/named -4 -c /opt/local/etc/bind/named.conf &) e acrescenta-se:

/opt/local/etc/init.d/bind start

Gravar e sair.
sudo reboot, para confirmar que as nossas configurações sobrevivem ao reinício do sistema.
Depois de regressar, testar o serviço:

1
rndc status

[...]
server is up and running

1
nslookup www.google.com


Server:         127.0.0.1
Address:        127.0.0.1#53

Non-authoritative answer:
Name:   www.google.com
Address: 216.58.211.228
Name:   www.google.com
Address: 2a00:1450:4003:805::2004


Num cliente que esteja numa das redes autorizadas a fazer perguntas, mudar a configuração de DNS para apontar ao IP de verynice (tenho utilizado 10.123.130.6), e ver se a resolução DNS é efectuada:

Configuração de zonas DNS

As zonas são configuradas no ficheiro named.conf e a informação de cada zona reside em ficheiros de zona
Parece-me boa política separar os ficheiros de zona por “categoria”, na minha opinião, debaixo da pasta de configuração do BIND (neste caso, /opt/local/etc/bind/), dever-se-iam colocar os ficheiros de zona nas pastas:

/opt/local/etc/bind/forward
/opt/local/etc/bind/reverse
/opt/local/etc/bind/slave
/opt/local/etc/bind/stub

Neste caso não o farei porque temos muito poucas zonas, mas mesmo assim vamos fazer uma pasta para os ficheiros de zona, para não ficarem misturados com as configurações do BIND propriamente dito:

1
sudo mkdir /opt/local/etc/bind/zones

Os ficheiros de zona podem ter nomes totalmente arbitrários, mas algumas convenções podem ser usadas; vou usar o termo definido entre aspas no named.conf terminado na extensão .zone; em Debian, os nomes costumam ser db.<nomedazona>, por exemplo.

Declaração das zonas no named.conf

Editamos o /opt/local/etc/bind/named.conf e acrescentamos o seguinte:
Zona directa da rede do servidor DNS

zone "dnstestes.wan" in {
        type master;
        file "zones/dnstestes.wan.zone";
        # allow-update { };
        # allow-transfer { };
        # notify yes;
};

Já a zona reversa é:

zone "130.123.10.in-addr.arpa" in {
        type master;
        file "zones/130.123.10.in-addr.arpa.zone";
        # allow-update { };
        # allow-transfer { };
        # notify yes;
};
As directivas allow-update, allow transfer e notify usam-se quando existem servidores DNS que são apenas seguidores para esta zona e devem ser actualizados por zone transfer quando há mudanças na zona.

Configuramos uma zona normal no /opt/local/etc/bind/named.conf da seguinte maneira:

zone "tjs.lan" in {
        type master;
        file "zones/tjs.lan.zone";
        # allow-update { };
        # allow-transfer { };
        # notify yes;
};

Esta rede é um /23 e precisa de duas zonas reversas para ser coberta (por as zonas reversas DNS serem classful, ou seja, só /8, /16, ou /24), por isso vou colocar as duas que julgo serem necessárias:

zone "130.24.172.in-addr.arpa" in {
        type master;
        file "zones/130.24.172.in-addr.arpa.zone";
        # allow-update { };
        # allow-transfer { };
        # notify yes;
};
zone "131.24.172.in-addr.arpa" in {
        type master;
        file "zones/131.24.172.in-addr.arpa.zone";
        # allow-update { };
        # allow-transfer { };
        # notify yes;
};

Reinicia-se o serviço e verificar o seu estado:

1
/opt/local/etc/init.d/bind restart

Stopping BIND:  /usr/local/sbin/rndc  stop
Using killall named on additional BIND processes...
Starting BIND:  /usr/local/sbin/named -u named -4 -c /opt/local/etc/bind/named.conf

1
rndc status

version: BIND 9.16.3 (Stable Release) 
running on verynice: Linux i686 5.4.3-tinycore #2020 SMP Tue Dec 17 17:00:50 UTC 2019
boot time: Sat, 19 Sep 2020 11:12:11 GMT
last configured: Sat, 19 Sep 2020 11:12:12 GMT
configuration file: /opt/local/etc/bind/named.conf
CPUs found: 1
worker threads: 1
UDP listeners per interface: 1
number of zones: 111 (97 automatic)
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
recursive clients: 0/900/1000
tcp clients: 0/150
TCP high-water: 0
server is up and running

1
tail -20 /var/log/messages | grep "named" | cut -d" " -f4-

verynice daemon.info named[1612]: none:98: 'max-cache-size 90%' - setting to 162MB (out of 180MB)
verynice daemon.notice named[1612]: command channel listening on 127.0.0.1#953
verynice daemon.info named[1612]: managed-keys-zone: loaded serial 58
verynice daemon.info named[1612]: zone 130.48.10.in-addr.arpa/IN: loaded serial 2020091600
verynice daemon.info named[1612]: zone 0.in-addr.arpa/IN: loaded serial 2020090600
verynice daemon.info named[1612]: zone 130.24.172.in-addr.arpa/IN: loaded serial 2020091710
verynice daemon.info named[1612]: zone dnstestes.wan/IN: loaded serial 2020091600
verynice daemon.info named[1612]: zone 127.in-addr.arpa/IN: loaded serial 2020090600
verynice daemon.info named[1612]: zone 131.24.172.in-addr.arpa/IN: loaded serial 2020091710
verynice daemon.info named[1612]: zone 255.in-addr.arpa/IN: loaded serial 2020090600
verynice daemon.info named[1612]: zone tjs.lan/IN: loaded serial 2020091710
verynice daemon.info named[1612]: zone localhost/IN: loaded serial 2020090600
verynice daemon.notice named[1612]: all zones loaded
verynice daemon.notice named[1612]: running
verynice daemon.info named[1612]: managed-keys-zone: Key 20326 for zone . is now trusted (acceptance timer complete)
verynice daemon.info named[1612]: resolver priming query complete

Para testar, pode-se usar o nslookup integrado ou instalar o dig. O nslookup necessita, no entanto, de uma dependência que não está instalada:

1
tce-load -wi readline.tcz

readline.tcz.dep OK
Downloading: readline.tcz
Connecting to repo.tinycorelinux.net (89.22.99.37:80)
saving to 'readline.tcz'
readline.tcz         100% |************************************************************************************|  128k  0:00:00 ETA
'readline.tcz' saved
readline.tcz: OK

Testaram-se as seguintes resoluções, baseadas em ficheiros de zona que deixo como exercício preencherem com base nos resultados apresentados na captura de ecrã (um ficheiro de zona para cada uma das zonas declaradas no /opt/local/etc/bind/named.conf), a colocar em /opt/local/etc/bind/zones de acordo com o modelo demonstrado nas zonas pedidas pelo RFC1912 (acima):

1
2
3
4
nslookup dasilvat.tjs.lan
nslookup tjspc.tjs.lan
nslookup gateway.dnstestes.wan
nslookup verynice.dnstestes.wan

Como na zona tjs.lan também se definiu um registo MX, testou-se a sua resolução (mude o ficheiro de zona com base no resultado apresentado na captura de ecrã abaixo):

1
nslookup -type=MX tjs.lan

Conclusão

Escolhi um TinyCore Linux para implementar este serviço porque o meu sistema host tinha muito pouca RAM para implementar o resto da topologia que ia usar; no entanto, o TinyCore Linux precisa de RAM para carregar a imagem de sistema e para as aplicações, por isso o mínimo de RAM que consegui usar foi 256MB, porque com 128MB o BIND9 não tinha memória suficiente para arrancar.
No entanto, um sistema Debian 10 (Minimal Install), que armazena o sistema em disco rígido e tem memória virtual, consegue configurar o serviço SSH, servidor NTP (este TinyCoreLinux era apenas um cliente) e BIND9 nos mesmos 256MB, por isso, a não ser que correr a partir de RAM e ser stateless (repor as configurações originais depois de um reboot) seja muito importante, recomendo que se use o Debian ou outro tipo de distro Linux mais mainstream


  1. (https://mivilisnet.wordpress.com/2019/06/11/microcore-linux-and-the-bind-server/#more-2666↩︎

  2. (https://wiki.samba.org/index.php/Setting_up_a_BIND_DNS_Server↩︎

  3. Porque é um dos métodos possíveis; existem outros. ↩︎

  4. -4 = só IPv4; -g = log no STDOUT em vez de STDERR ; -c <caminho_do_ficheiro_de_configuração> ↩︎

  5. (https://mivilisnet.wordpress.com/2020/05/05/how-i-wrote-my-shell-script-to-control-the-bind-daemon/↩︎

  6. -D não definir password; -H não criar home; -s shell (falsa para não poder fazer login↩︎

  7. https://www.ibm.com/support/pages/how-setup-rndc-bind-9
    https://tecadmin.net/configure-rndc-for-bind9 ↩︎