terça-feira, 12 de agosto de 2008

Servidor DHCP com Dinamic DNS (DDNS)

Vou explicar os passos que segui, as configurações que utilizei, os problemas que enfrentei e as soluções dadas para esses problemas.
Foi realizada muitas pesquisas na internet, produtivas e não produtiva.
No final de tudo, percebi que o processo era simples porém requerer atenção em pequenos detalhes os quais fazem TOTAL diferença no funcinamento desta integração.

Then, let's go...!!!

Para montar o serivdor de DHCP juntamente com o servidor de DNS será preciso os seguintes passos:

1 - Configuração do dhcpd.conf
2 - Configuração do named.conf
3 - Configuração dos arquivos de zona do DNS
4 - Gerar uma chave de assinatura através do rndc-confgen.
5 - Acertando detalhes nas configurações.

1 => Configuração do dhcpd.conf
O arquivo dhcpd.conf responsável pela distribuição dos ips, em seu formato padrão é comumente conhecido porém para integrar-se ao DNS, algumas configurações devem ser adicinadas.
Vou postar o arquivo completo já com as alterações realizadas.

# dhcpd.conf
#
# Configuration file for ISC dhcpd (see 'man dhcpd.conf')
#

server-identifier ddns-dhcp.dominio.br;
ddns-update-style interim; # necessário para integracão entre os DNS
ddns-domainname "dominio.br";
ddns-rev-domainname "1.168.192.in-addr.arpa"; # arquivo de zona reversa do DNS
ddns-updates on;
# ddns-update-style ad-hoc;

# Para realizar os testes, diminui os tempos para 50 segundos =D
default-lease-time 50; # 600;
max-lease-time 50; # 7200;
authoritative;
log-facility local7;

# Esta parte da configuração é crucial
# 1 - O nome "chave-dominio.br", dado a chave gerada para autenticação deve ser o mesmo que está no arquivo named.conf,
# senão estiver um erro de "bad DNS key" vai aparecer.

key chave-dominio.br {
# algorithm HMAC-MD5.SIG-ALG.REG.INT;
algorithm hmac-md5;
secret "m3jfLjP/ygff7nze7WEZ8g==";
};

# Estas configurações de zona, devem estar identificas as criadas no named.conf, incluindo o nome identico da chave.
zone 1.168.192.in-addr.arpa. {
primary 127.0.0.1;
key chave-dominio.br; }

zone dominio.br {
primary 127.0.0.1;
key chave-dominio.br; }

# --------- Entrada de range de IPs ------- #
# Configuração padrão do dhcpd.conf #

subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.2 192.168.1.9;
option routers 192.168.1.1;
option domain-name-servers 192.168.1.1;
option broadcast-address 192.168.1.255;
option domain-name "ns1.dominio.br.";
option domain-name-servers 192.168.1.1;
option ip-forwarding on;

# configurações adicionadas
one-lease-per-client on;
use-host-decl-names on;

# Exemplo de configuração para IP fixo baseado no MAC
# host NOME_DO_EQUIPAMENTO {
# hardware ethernet 00:60:B0:43:B1:5A;
# fixed-address 192.168.1.223;
# }
}


2 => Configuração do named.conf
O arquivo named.conf tem sua configuração padrão com poucos detalhes adicionados.

// O nome da chave deve ser o mesmo em todas as configurações.
key "chave-dominio.br" {
algorithm hmac-md5;
secret "m3jfLjP/ygff7nze7WEZ8g==";
};
#
controls {
inet 127.0.0.1 port 953
allow { 127.0.0.1; }
keys { "chave-dominio.br"; };
};

options {
directory "/var/named";
// query-source address * port 53;
recursion yes;
allow-update { none; };
};
// A parte de logging me ajudou muito a identificar problemas mais detalhadamente.
logging {
channel seguranca {
file "/var/log/named.log" versions 6 size 50m;
print-time yes;
print-severity yes;
print-category yes;
};
category security { seguranca; };
category notify { seguranca; };
};

# Use with the following in named.conf, adjusting the allow list as needed:
// a caching only nameserver config

// Arquivos de zona padrão para cache. Não são obrigatórios para testes.
zone "." IN { type hint; file "caching-example/named.ca"; };
zone "localhost" IN { type master; file "caching-example/localhost.zone"; allow-update { none; }; };
zone "0.0.127.in-addr.arpa" IN { type master; file "caching-example/named.local"; allow-update { none; }; };

// Zona reversa. Repare que o nome da zona e da chave são os mesmo especificado no dhcpd.conf em ambas as configurações,
// NÃO deve ser diferentes.
// É importante manter allow-update restrito para evitar que qualquer origem faça atualizações no arquivo de zona.
zone "1.168.192.in-addr.arpa" IN {
type master;
file "local/192.168.1.zone";
allow-update { key chave-dominio.br; };
notify yes;
};
#
zone "dominio.br" IN {
type master;
file "local/dominio.br.zone";
allow-update { key chave-dominio.br; };
notify yes;
};


3 => Configuração dos arquivos de zona do DNS
Os arquivos de configuração de zona devem ser mantidos como padrão de uma configuração convencional.
Assim que o dhcp iniciar a integração com o dns, ele fará alterações nos arquivos de zona criando os arquivos de journal necessários para registrar e sincronizar informações.

Configuração das zonas, dominio.br.zone e 192.168.1.zone

# cat /var/named/local/dominio.br.zone
$TTL 86400 ; 1 day
dominio.br IN SOA www.dominio.br. root.dominio.br. (
2008072501 ; serial
10800 ; refresh (3 hours)
900 ; retry (15 minutes)
604800 ; expire (1 week)
86400 ; minimum (1 day)
)
NS ns1.dominio.br.

ddns-dhcp A 192.168.1.1
ns1 A 192.168.1.1
www A 192.168.1.1

# cat /var/named/local/192.168.1.zone
$TTL 86400 ; 1 day
1.168.192.in-addr.arpa IN SOA ns1.dominio.br. root.dominio.br. (
2008072501 ; serial
10800 ; refresh (3 hours)
900 ; retry (15 minutes)
604800 ; expire (1 week)
86400 ; minimum (1 day)
)
NS ns1.dominio.br.

1 PTR ns1.dominio.br.


4 => Gerar uma chave TSIG através do dnssec-keygen ou rndc-confgen.
A senha em formato MD5 pode ser gerada utilizando rndc-confgen ou dnssec-keygen.
Executei normalmente o rndc-confgen, copiei e colei as configurações como já é conhecido.

# rndc-confgen

A chave md5 foi gerada utilizando o rndc-confgen.
Sua saída é parecida com esta:

# Start of rndc.conf
key "rndc-key" {
algorithm hmac-md5;
secret "ZlWWb8VPzp+/9En8H9Zlsg==";
};

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-md5;
# secret "ZlWWb8VPzp+/9En8H9Zlsg==";
# };
#
# controls {
# inet 127.0.0.1 port 953
# allow { 127.0.0.1; } keys { "rndc-key"; };
# };
# End of named.conf

A parte superior do da saída deve ser copiada e colada dentro de um arquivo com o nome rndc.conf no diretório padrão /etc.
A parte inferior deve ser adicionada dentro do named.conf removendo os comentários.
A senha criptografada existente na linha "secret "ZlWWb8VPzp+/9En8H9Zlsg==";" deve ser a mesma adicionada nos arquivos de configuração do named e dhcpd incluindo o nome da chave (key) como mostrado nos exemplos acima.

Também é possível gerar a chave através do aplicativo "dnssec-keygen" porém não vou me aprofundar muito sobre isto não. Até mesmo por que eu não me aprofundei, achei o rndc-confgen mais simples.
Gere uma chave utilizando "dnssec-keygen", a saída será dois arquivos com a descriçào abaixo:
K++.key
K++.private

O comando para gerar essa chave é:
dnssec-keygen -a HMAC-MD5 -b 128 -n HOST _hostnamedoservidor.key
A palavra "HOST" é assim mesmo.

Copie a chave que está dentro do arquivo .key e cole nos arquivos named.conf e dhcpd.conf. Caso o nome das chaves sejam diferentes um mensagem de erro será exibida, algo como "bad DNS key", segue exemplo da mensagem logo abaixo.

O código gerado através do rndc-confgen também deve ser colocado igualmente dentro de todos os arquivos de configuração, named.conf e rndc.conf e, o nome das chaves nestes 2 arquivos devem ser as mesmas.
obs: fique à vontade para sugerir melhorias neste ponto.

5 => Acertando detalhes nas configurações.
Para refinar e realizar alguns ajustes nos arquivos de configuração do dhcp e named, será preciso ler e interpretar os arquivos de log, com as mensagens referente aos erros que irão aparecer.
Para acertar o named.conf é interessante verificar os arquivos de configuração através do "named-checkzone" e "named-checkconf".
A configuração de logging no named.conf é muito importante neste estágio pois, permite monitorar informações mais detalhadas do que nos arquivos normais syslog, messages e outros.

=> Algumas mensagens de ERRO
A mensagem de erro abaixo, significa que o nome das chaves nos arquivos de configuração estão diferentes. Acerte as mesmas e carregue o dhcp novamente.
==> /var/log/named.log <==
25-Jul-2008 15:41:48.270 security: error: client 127.0.0.1#32848: request has invalid signature: TSIG chave1-dominio.br: tsig verify failure (BADKEY)
==> /var/log/syslog <==
Jul 25 15:41:23 srv1 dhcpd: Unable to add forward map from cti-ar.dominio.br to 192.168.1.9: bad DNS key

Bom, espero ter sido mais claro possível neste artigo.
Estamos sempre abertos a correções no texto no artigo enfim. Fiquem a vontade para comentar dúvidas e sugestões.
Agradeço a ajuda do pessoal do lista MASOCH-L, que me esclareceram algumas dúvidas importantes.

Abraço e até a próxima.

Nenhum comentário: