Dyndns no linux - receita de bolo.

Iniciado por Leandr0, 30 de Dezembro de 2010, 16:03

tópico anterior - próximo tópico

Leandr0

Esse Tutorial  feito com modem Siemens 4100 e 4200 mas pode ser feitos em vários modelos.
Receita de Bolo :.

1) Escolhendo o provedor DDNS dyndns, entrei no site deles: http://www.dyndns.com e me cadastrei sob o domínio: seudominio.org

2)  Configurando DMZ

- Configuração -> Firewall -> DMZ

3) Configurando DNS

- Configuração -> DNS dinamico

Feito as configurações no modem agora e so configurar o Linux.
Vamos la ...

# aptitude install ddclient
/etc/init.d/ddclient
Precisei ainda configurar o arquivo /etc/ddclient/ddclient.conf usando meus dados de cadastro, por um exemplo veja no final deste artigo.
Para inicializar este script quanto a maquina liga, criei um  link symbólico da seguinte maneira:
#ln -s /etc/init.d/ddclient /etc/rc5.d/S99ddclient

Assim o serviço sera iniciado quanto a maquina inicia no run-level 5 (modo gráfico). Por um servidor será conselhável iniciar o serviço no run-level 3 (modo texto, prompt de comando) também:
#ln -s /etc/init.d/ddclient /etc/rc3.d/S99ddclient

Para resolver o problema de atualizar o IP somente quanto mudou, criei o script update.ddns.pl (em Perl), listado no final deste artigo e salvei-o em (por exemplo) /usr/local/sbin/update.ddns.pl. O script solicita o IP atual, compara com o IP obtido última vez que rodou. Se o IP mudou, o script atualiza o IP no DDNS executando o script de iniciação: '/etc/init.d/ddclient start'. Terminando, o script amazena para uso na próxima execução, o IP obtido no arquivo (por exemplo) /etc/ddclient/lastip.txt.

Para automatizar tudo, agora falta somente incluir update.ddns.pl usando crontab. Execute:

#crontab -e
e incluir ai uma linha da forma:
0,10,20,30,40,50 * * * * /usr/local/sbin/update.ddns.pl >> /tmp/update.ddns.log 2>&1
e salve (:w). Isto executara o script /usr/local/sbin/update.ddns.pl em dez a dez minutos e deixa seu output acumuladamente no arquivo /tmp/update.ddns.log.
E pronto! Agora se o modem muda de IP, depois uns dez minutos o script atualizara automaticamente.



Segue aqui o conteúdo do /etc/ddclient/ddclient.conf:
################### Start /etc/ddclient/ddclient.conf ##################
## ddclient configuration file
daemon=600 # check every 600 seconds
syslog=yes # log update msgs to syslog
mail-failure= ole@ipredes.com.br # Mail failed updates to user
pid=/var/run/ddclient.pid # record PID in file.

## Detect IP with our CheckIP server
use=web, web=checkip.dyndns.com/, web-skip='IP Address'

## DynDNS username and password here
login= seu login cadastrado aqui !!!
password= sua senha cadastrado aqui !!!

## Default options
protocol=dyndns2
server=members.dyndns.org

## Dynamic DNS hosts
seu dominio cadastrado aqui !!!
################### End /etc/ddclient/ddclient.conf ##################
E o script atualizando:
###################### Start update.ddns.pl ######################
#!/usr/bin/perl

use strict;

################# Automating DDNS update ########################
################# Only updatee if IP has changed ########################

#### Setup parameters #########
my $ip_page="www.whatismyip.com/automation/n09230945.asp";
my $lastip_file="/etc/ddclient/lastip.txt";
my $update="/etc/init.d/ddclient start";

#### Script start ##########



#Name of file wget puts nits ooutput into
my @comps=split(/[\\\/]/,$ip_page);
my $ip_fname=pop(@comps);


#Move to /tmp and clean old files
chdir("/tmp");
system("/bin/rm -f $ip_fname*");

#Call wget
system("/usr/bin/wget $ip_page >> /tmp/ddns.log 2>&1");

#Read output from wget
open(IN,"$ip_fname") || die("$ip_fname nao existe!");
my @lines=;
close(IN);

#Our current ip is in first line
my $ip=$lines[0];


#Read previous ip
my $lastip="";
if (-f $lastip_file)
{
    open(IN,$lastip_file) || die("$lastip nao existe");
    my @lines=;
    close(IN);
    $lastip=$lines[0];
}

#Report results
print localtime().": $lastip --> $ip ";

unless ($ip=~/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/)
{
   print "Invalid ip format: '$ip'\n";
   exit();
}

if ($ip ne $lastip)
{
   #Update ddns
   system("$update");

   #Write current ip to file
   open(OUT,">".$lastip_file) || die("Nao foi posivel rescrever $lastip_file");
   print OUT $ip;
   close(OUT);

   print "Updated\n";
}
else { print "Up-to-date\n"; }


1;
###################### End update.ddns.pl ######################

Obs:.
Não se esquecer de dar permissão de execução aos arquivos:.

# chmod +x /etc/ddclient/ddclient.conf ou
# chmod +x /etc/ddclient.conf e também no
# chmod +x  /usr/local/sbin/update.ddns.pl

Espero que este artigo pelo menos possa incentivar alguém utilizar este serviço extremamente útil, DDNS.
Créditos :.
http://www.slog.org.br/index.php?option=com_content&view=article&id=5:ddns-tutorial&catid=2:blog&Itemid=3
http://under-linux.org/f126604-resolvido-acesso-remoto-via-winbox-com-modem-roteado

Analisando e refeito por Fabio (bin_h4ck3r) e LEandr0