Pesquisar neste blog

terça-feira, 18 de outubro de 2011

Criando seu próprio DynDNS (Atualização Dinâmica de DNS) - (DNS Dynamic Updates)

Olá queridos leitores, ai vai uma dica super interessante e também muito útil, pois para que tem um servidor de DNS e não quer mais ficar perdendo tempo criando contas em vários servidores como no-ip.org, DynDNS, etc... vou demonstrar abaixo como montar seu próprio servidor de atualização automática de DNS dos clientes que usam endereço ip dinâmico.


Vamos aos passos:


1º Passo - Instalação e configuração do Bind

Primeiramente vamos precisar ter o Bind instalado, configurado e funcionando conforme dica já passada aqui no blog: <> 


2º Passo - Criação da Chave



Execute o comando abaixo, no seu servidor Bind, o comando dnssec-keygen faz parte do pacote bind.

# dnssec-keygen -a HMAC-MD5 -b 512 -n HOST servidorbind

Para quem se interessar em tirar dúvidas sobre os parâmetros do comando dnssec-keygen segue o link: <>

3º Passo - Copiar a chave

Kservidorbind.+157+10529.key
Kservidorbind.+157+10529.private

# cat Kservidorbind.+157+10529.key

servidorbind. IN KEY 512 3 157 Gnx6+MPkb94I1pQD740sPEopj4AWm8YgCGJwzKm6JQYQPXydFTrFLH39 IQle135rHybhCNroDyPTS1gVM2l2ww==

4º Passo - Configurar a chave no bind

Edite o arquivo named.conf e adicione o nome da chave conforme exemplo abaixo:
# vim /etc/named.conf

key servidorbind {
   algorithm hmac-md5;
   secret "IQle135rHybhCNroDyPTS1gVM2l2ww==";
};

5º Passo - Adicionar o nome da chave na zona

Agora vá até a zona e adicione o parâmetro allow-update conforme exemplo abaixo:

zone "meudominio.com.br" IN {
        type master;
        file " meudominio.com.br ";
        allow-update { key servidorbind;};
};


Agora os passos mais interessantes, iremos criar os scripts em php que irão receber as informações de endereçamento dos clientes.
6º Passo - Criar e Configurar o arquivo dyndns_rcv.php

No sexto passo, você irá precisar de um servidor rodando apache com suporte a php, caso você esteja rodando o CentOS ou Redhat apenas execute o seguinte comando :

# yum install httpd php -y

Agora vá até a pasta root do servidor apache e crie o seguinte arquivo:

# vim /var/www/html/dyndns_rcv.php

Copie e cole o seguinte conteúdo:
$ip_host       = $_REQUEST['ip_host'];
$nome_host     = $_REQUEST['nome_host'];

$cmd_update    = "/var/www/html/nsupdate.sh $ip_host $nome_host";
exec($cmd_update,$out);

?>



Salve e feche o arquivo.

7º Passo - Configurar o arquivo nsupdate.sh
 
No sétimo passo ainda dentro do servidor apache, iremos criar o arquivo chave de tudo, é o responsável pela recepção dos parâmetros e envio para atualização no servidor bind.

Execute o seguinte comando para criar o arquivo:
# vim /var/www/html/nsupdate.sh

Copie e cole o conteúdo abaixo, o arquivo é um shell script

#!/bin/bash

KEYNAME="servidorbind"
HASH="IQle135rHybhCNroDyPTS1gVM2l2ww=="
IP="$1"
SERVER="127.0.0.1"
ZONE="meudominio.com.br"
HOST="$2.meudominio.com.br"

# Definir comando de update
NSUPDATE="/usr/bin/nsupdate -y $KEYNAME:$HASH"

EXEC="server $SERVER\n
zone $ZONE\n
update delete $HOST A\n
update add $HOST 1440 A $IP\n
show\n
send"

# Executa a atualizacao
echo -e $EXEC | $NSUPDATE

Salve o arquivo e feche. Lembrando que o mesmo é um shell script e precisamos definir as permissões para execução do usuário apache, para isso execute os seguintes comando abaixo:

Definindo a permissão de execução:
# chmod 0750 /var/www/html/nsupdate.sh

Definindo as permissões para o usuário apache:
# chown apache.apache /var/www/html/nsupdate.sh

Agora temos o servidor que irá receber as informações via servidor web apache com php e enviá-las para o bind via shell script, não esqueça de iniciar o serviço do servidor apache, para isso utilize o seguinte comando:

# service httpd start

8º Passo - Criação do arquivo meuip
No oitavo passo ainda dentro do servidor web apache, iremos criar um arquivo chamado meuip_host.php, isso é para garantir que quando o host cliente for enviar a informação do ip público, essa informação seja confiável e também para não depender de serviço de sites de terceiros como meuip.com.br, etc... que possam estar fora do ar no momento de um envio de atualização do endereço ip  acabarmos ficando sem acesso ao host até que o serviço volte ao ar.


# vim /var/www/html/meuip_host.php

Copie e cole o seguinte conteúdo no arquivo acima: 

$ip=$_SERVER['REMOTE_ADDR'];
print $ip."\n";
?>

Salve o arquivo e feche. Tudo pronto na parte do server de recepção, agora vamos para o cliente.


9 º Passo - Configurar o script dyndns_host.sh no cliente

No nono passo iremos criar o arquivo escrito em shell script, ele é responsável por buscar a informação do endereço ip publico ao qual ele está rodando e enviar as informações de nome do host e ip para a atualização no servidor de dns. Para isso crie o seguinte arquivo conforme comando abaixo:

# vim /root/scripts/dyndns_host.sh

Copie e cole o conteúdo abaixo no arquivo acima.
#!/bin/sh

HOSTNAME="NOME_HOST"
LYNX=`/usr/bin/which lynx`
IP=`$LYNX -source http://www.meudominio.com.br/meuip_host.php`
 
$LYNX --dump "http://www.meudominio.com.br/dyndns_rcv.php?ip_host=$IP&nome_host=$HOSTNAME"
Personalize o nome do host de acordo com a sua necessidade, salve o arquivo e feche.

Para rodar o arquivo acima iremos precisar de um pacote adicional chamado lynx, para isso execute o seguinte comando:

# yum install lynx -y

Agora iremos definir as permissões de execução do arquivo:

# chmod 0755 /root/scripts/dyndns_host.sh

10º Passo - Configurar na crontab a execução do script

E por último, vamos colocar o script para rodar na crontab e nos enviar as informações de autualização de tempos em tempos, claro, de acordo com a sua necessidade:

a.  # vim /etc/crontab
b.  Inserir a seguinte linha: 
*/10 * * * * root /root/scripts/dyndns_host.sh
c.  Certificar que o serviço crond está rodando.
[root@host scripts]# service crond status
crond (pid 1165) is running...


Agora pronto, só testar!!

Grande abraço a todos e boa sorte, espero ter ajudado!

8 comentários:

edineim disse...

quando digito:
"dnssec-keygen -a HMAC-MD5 -b 512 -n HOST servidorbind"
aparece este erro::


////separa para não misturar///

dnssec-keygen: warning: dns_dnssec_findmatchingkeys: error reading key file Kservidorbind.+157+29680.private: bad key type

////////////////////////////

mesmo erro acima
"Kservidorbind.+157+04242.private:"
////////////////////////////

mesmo erro acima
Kservidorbind.+157+51454.private:
/////////////////////////////

Marcos Abadi disse...

Olá amigo,
reexecutei o mesmo comando conforme abaixo para teste:

# dnssec-keygen -a HMAC-MD5 -b 512 -n HOST servidorbind
Kservidorbind.+157+42593

e as chaves são geradas:

-rw------- 1 root root 121 Jan 11 11:38 Kservidorbind.+157+42593.key
-rw------- 1 root root 145 Jan 11 11:38 Kservidorbind.+157+42593.private


Procurei sobre esse erro e não encontrei nada referente ao dnssec-keygen.

Por favor, revise se todos os pacotes reverente ao bind se estão instalados.

edineim disse...

Olá Amigo consegui resolver, era simples!!!!

"dnssec-keygen -a hmac-md5 -b 512 -n host servidorbind" (eram as letras maiusculas)!
- - - - - - -

Tenho outro Problema!!

O Passo 7
Eu uso o XAMPP !!
O Caminho do xammp é o htdocs(onde esta o site)!

COMO MODIFICAR O CAMINHO PARA O XAMPP??

Esses caminhos " var/www/html/dyndns_rcv.php "

Posso altera-los para o htdocs do xammp???

Marcos Abadi disse...

Sim amigo, o script vc vai por na pasta root do seu servidor web, ou em qualquer outra pasta acima.

Abraço.

Fabiano disse...

Existe algum cliente para computadores windows?

Marcos Abadi disse...

Fabiano, o no-ip.com possui um cliente for windows.
Abs.

Fabiano disse...

Marcos, mas usar com dnsupdate em um bind proprio?

Marcos Abadi disse...

Não fabiano,
se vc quiser usar o seu próprio bind basta vc criar uma bat que rode o algum navegador dentro da sua maquina de tempos em tempos para atualizar o endereço ip.

Abraços.