Monday, June 1, 2009

DDNS-client atrás de NAT

DDNS no Linux
O serviço DDNS, além de gratuito, é uma ótima alternativa para quem deseja ter um domínio, mas não dispõe de um IP fixo.
Grande parte dos usuários domésticos requisita um novo IP a cada nova conexão com seu ISP. Sendo assim, um serviço de DNS que permita ao cliente atualizar suas entradas no DNS sempre que uma nova conexão com a Internet é estabelecida é bastante legal. Eis que surge o DDNS.
O endereço do serviço no site do fabricante é http://www.winco.com.br/ddns/
Lá podem ser encontradas várias informações sobre o serviço, bem como os clientes para sistemas operacionais Windows e Linux.
Os clientes para Windows são ótimos e bem completos. No entanto, o mesmo não ocorre para os clientes em Linux.
Os clientes para Linux são textuais e bem pouco intuitivos. Além do mais, existem apenas 2 casos de uso no site que, ao meu ver, não cobrem o caso de grande parte dos usuários: Um computador com Linux (cliente) atrás de um NAT (realizado num router DSL, por exemplo).
Dessa forma, criei um tutorial, baseado naqueles disponíveis no site do fabricante, que ensina como modificar o cliente em Linux para o que eu chamo de caso 3.

Caso 3: Não possui endereço IP Fixo e ESTÁ atrás de um NAT.

Lembrando que o IP resolvido será o seu IP externo dinâmico, então, cuidado com as configurações do seu router DSL ;)
1) Os programas de DDNS devem ser instalados no diretório /usr/local/sbin. Se esse diretório não existir, ele deve ser criado. Após a criação do mesmo, execute o comando:

$cd /usr/local/sbin

$tar zxf ddns-linux-1.0.tgz

2) Edite o arquivo /usr/local/sbin/ddns.sh e configure as seguintes linhas:
DOMINIO="seudominio.winconnection.net" #Seu end. DDNS (ex.: meuendereco) ou "seudominio.ddns.com.br" #Seu end. DDNS
SENHA="xxxxxxxxxx" #A sua senha para o domínio
INTERFACE="ppp0" #Coloque aqui o endereco correto da interface de rede Ex.: ppp0, eth0, etc

ALTERAÇÃO SUGERIDA -> Procure as seguintes linhas no arquivo ddns.sh
#Vamos ver se o endereco mudou
${BINDIR}/getip $INTERFACE > ${TMPDIR}/ddns.ip.new

Apague ou comente a linha "${BINDIR}/getip $INTERFACE > ${TMPDIR}/ddns.ip.new". Para comentar a linha basta colocar um "#" antes do início da linha.

Adicione a seguinte linha no lugar da linha apagada ou abaixo da linha comentada.
html2text http://checkip.dyndns.org | cut -c21-35 | tail -1 > ${TMPDIR}/ddns.ip.new

O resultado deste trecho será algo assim:
#Vamos ver se o endereco mudou
#${BINDIR}/getip $INTERFACE > ${TMPDIR}/ddns.ip.new
html2text http://checkip.dyndns.org | cut -c21-35 | tail -1 > ${TMPDIR}/ddns.ip.new

Eu prefiro comentar as linhas que não usarei como forma de backup. Caso algo dê errado, é possível voltar ao estado anterior.

3) Crie as seguinte entradas no crontab do root (usando crontab -e ) da seguinte forma:

*/1 * * * * /usr/local/sbin/ddns.sh

0,30 * * * * /usr/local/sbin/ddns-refresh.sh

Pronto. O DDNS For Linux está pronto para ser usado.

Para verificar se tudo deu certo, execute em um terminal:
$ nslookup seudominio.ddns.com.br

Espero que seja útil.
Um abraço.

2 comments:

Christiano said...

Valeu Muito bom funcionou perfeitamente !!!!

#!/bin/bash


DOMINIO="eletronicocftv.ddns.com.br"
SENHA="2e89056c80c"
INTERFACE="eth0"
TMPDIR=/tmp

BINDIR=/usr/local/sbin
if [ ! -e ${TMPDIR}/ddns.ip ]
then
echo "0.0.0.0" > ${TMPDIR}/ddns.ip
fi

html2text http://checkip.dyndns.org | cut -c21-35 | tail -1 > ${TMPDIR}/ddns.ip.new





# Comparamos para ver se ele realmente mudou
if [ `cat ${TMPDIR}/ddns.ip.new` != `cat ${TMPDIR}/ddns.ip` ]; then
# Trocamos o arquivo base pelo novo IP
mv ${TMPDIR}/ddns.ip.new ${TMPDIR}/ddns.ip
NEWIP=`cat ${TMPDIR}/ddns.ip`
# Setamos o DDNS com o novo IP
${BINDIR}/setdns $SENHA $DOMINIO $NEWIP
if [ $? -ne 0 ]
then
echo "0.0.0.0" > ${TMPDIR}/ddns.ip #isso vai forcar refresh
fi
fi

Unknown said...

Valeu mesmo, vc é o cara. Esse artigo foi 10, me ajudou muito. Obrigado