Rotina útil pra quem tem acesso à configuração do servidor DNS (bind) de seu provedor ou é o próprio administrador de tal. Aqui veremos como fazer para ter um subdomínio apontando de forma permanente para seu IP dinâmico ADSL. Enfim, vamos criar um dyndns ou no-ip da vida.
Segurança: preparando a chave de assinatura do servidor
Vamos começar preparando o servidor para receber as atualizações de DNS a partir de seu desktop. O pulo-do-gato dessa rotina está na opção "allow-update" que será incluída na configuração de zona do seu domínio.
Como estou falando de administrador para administrador, estou certo de que você sabe o que é uma zona né? Se não sabe, consulte alguma literatura sobre fundamentos de DNS aqui mesmo no site.
Mas aí você pergunta, ué... não é inseguro liberar meu servidor para receber updates de outras máquinas pela internet? Não, a segurança é feita a partir de chaves criptografadas de até 512 bits conhecidas como assinaturas de transação, ou TSIG (Transaction SIGnature).
De posse de um terminal no servidor, digite:
# cd /etc/bind
# dnssec-keygen -a HMAC-MD5 -b 512 -n HOST server
Acessamos o diretório de configuração do bind (/etc/bind no Debian) e criamos uma assinatura TSIG da seguinte forma:
-a HMAC-MD5: algoritmo utilizado para criação da chave;
-b 512: tamanho em bits da chave. Esse número varia de acordo com o algoritmos escolhido na opção anterior;
-n HOST: o tipo de dono da chave (case-sensitive);
server: o nome da chave em si.
Para maiores explicações sobre os parâmetros usados, digite:
$ man dnssec-keygen
Se tudo correu bem foram gerados 2 arquivos no seguinte formato:
NOTA: Por questões de didática "cortei" um bom pedaço do hash da chave gerada. O que vamos usar é neste artigo é o "FGbUIzPEbJgyEkDxEYccrxVTLQ==" e o nome da chave, "server".
Se você estiver em uma rede esse comando só vai retornar o IP interno... Além do mais que estava tentando utilizar essa solução no meu notebook, que posso estar conectado na internet de várias formas (LAN, WIFI, BlueTooth, Modem), então seria interessante que o script "checasse" qual(is) interface(s) está(ão) conectada(s) e pegasse o IP EXTERNO dessa interface ou simplesmente a solução mais rápida que eu achei foi pegar o IP através de um site...
Claro que não vou entrar no mérito da questão de abrir portas para esse DNS dinâmico, pois de nada adianta eu estar na rede do meu cliente com meu notebook e o modem dele estiver com o FIREWALL bloqueando todo e qualquer tipo de acesso...
[5] Comentário enviado por fabio em 03/07/2007 - 15:57h
Se sua interface de conexão for diferente de ppp0, basta mudar o valor da variável INTERFACE no script.
Bacana sua linha de comando do whatismyip, funciona melhor que a minha do script local, porém o sistema fica dependendo do site em questão. Se o site cair, mudar de domínio ou acabar, vc terá que mudar seu script, enquanto que localmente o processo nunca vai mudar.
[6] Comentário enviado por slaypher em 03/07/2007 - 16:05h
Olá,
Parabéns pelo artigo, mas tenho uma questão que surgiu no final:
# adiciona 3 regras no canal início do canal INPUT
$IPT -I INPUT -p tcp --dport 3306 -j DROP
$IPT -I INPUT -p tcp -i lo --dport 3306 -j ACCEPT
$IPT -I INPUT -p tcp -s casa.acme.com --dport 3306 -j ACCEPT
Ao adicionar essas regras ela não irá bloquear inclusive as conexões locais, pois a primeira regra para bloquear qualquer conexão independente de onde veio, se foi local ou não.
[7] Comentário enviado por fabio em 03/07/2007 - 16:08h
Olá slaypher, no artigo tem citado isso, a princípio parece isso, mas o parâmetro "-I" insere a regra no início da fila do canal. Sendo assim a regra que libera pro localhost fica antes da regra que bloqueia tudo. Se eu tivesse usado p "-i" (minúsculo) ou o "-A", aí sim ia dar problema.
[8] Comentário enviado por viniciuscordeiro em 03/07/2007 - 16:10h
Fabio, mas aqui quando utilizo sua linha ele só me retorna o IP INTERNO da rede... Se o DNS casa.acme.com estiver apontando para 192.168.0.1 por exemplo, os outros computadores que estiverem na mesma rede irão te encontrar por esse domínio?
[12] Comentário enviado por pankdo em 04/07/2007 - 12:09h
Show de bola Fabio
mas tenho uma duvida
eu poderia fazer algo semelhante para atualizar o IP do próprio servidor?
e o seguinte tenho uma maquina como gateway da rede com
2 ADSLs com IP dinâmico
e um link com IP estático
cada um ligado em uma placa de rede diferente
isso forma um unico link com load-balance para fornecer acesso de internet a rede interna o qual tambem hospeda um bind9
eu preciso saber o IP das interfaces ADSL
e relacionar com um nome(DNS)
depois eu faria um outro load-balance do tipo servidor sujo (como a google faz)
para desafogar o meu unico link com IP estático
pois este gateway também hospeda um site
a sempre que temos que acessa-lo de fora da rede somos obrigados a usar o unico link com IP estático ou entrar no gateway descobrir os IPs dos ADSLs e acessar utilizando o IP direto no navegador o que e um grande problema pois nem todo mundo tem permissão para entrar no gateway(na realidade so eu ai eu entro e tenho que pagar o IP e mandar pro pessoal)
sera que esse meu problema tem solucao ???
[14] Comentário enviado por zapp em 17/07/2007 - 16:53h
Otimo Artigo....
tem uns erros por causa do formato de data de cada servidor... em casa esta UTC em no meu server de DNS esta BR mas corrigi isso e deu certo..... depois deu eu erro de permissao, mas tb arrumei...
conclusao tudo funcionando..... Perfeito..
[15] Comentário enviado por leoberbert em 23/07/2007 - 08:57h
Fabio....
No Slackware vc saberia me informar os pacotes necessários? Outra coisa, é realmente necessário ter uma interface pppoe? Pois estou debaixo de um router tb, mas creio que não seja..... Fico no aguardo!!!
[16] Comentário enviado por fabio em 23/07/2007 - 09:04h
Leo,
Só é necessário o comando nsupdate, pesquisa em que pacote ele se encontra no Slackware. Se está debaixo de um router, o único sentido de usar isso é se você redirecionar alguma porta do router (IP real) pra sua máquina interna, como por exemplo a do SSH.
[18] Comentário enviado por lucasamorim em 09/11/2007 - 18:16h
Olá,
Uso Velox Residencial com IP dinâmico. Meu desktop Debian está conectado à saída RJ45 do meu modem roteado speedstream 5200. A saída de ifconfig para mim é bem diferente da do artigo, o que eu devo mudar no procedimento? veja:
eth0 Link encap:Ethernet HWaddr 00:1A:4D:A2:8C:77
inet addr:192.168.254.2 Bcast:192.168.254.255 Mask:255.255.255.0
inet6 addr: fe80::21a:4dff:fea2:8c77/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:208387 errors:0 dropped:0 overruns:0 frame:0
TX packets:196515 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:207925971 (198.2 MiB) TX bytes:16364967 (15.6 MiB)
Interrupt:18 Base address:0xc000
[19] Comentário enviado por abelardo em 20/12/2007 - 10:14h
bom dia fabio, seguinte estou com um problema aqui na minha rede, ela ta muito lenta e existem alguns nomes que eu nao estou conseguindo resolver, como o do www.vivaolinux.com.br, nao estou conseguindo nem pingar nele, mas em outros sites estou entrando normal, apenas alguns sites que estao assim,
[20] Comentário enviado por onlline em 26/12/2007 - 16:04h
Oi boa tarde, Eu consegui ate configurar o bind mas a parte do NSUPDATE fla que enviou a atualização mas nada de mandar o update no servidor bind.. eu uso o Debian teste no 3.1 r5 e no 4.0r1 , gostaria de saber se alguem poderia me mandar as configurações de dns e do nsupdate, pra ver se eu consigo!
[21] Comentário enviado por onlline em 26/12/2007 - 16:14h
Eu consegui um cliente tipo NSUPDATE para WINDOWS XP muito bom ,,
o nome dele é (DynSite) ele não é free! mas no meu caso não consegui funcionar nem com o NSUPDATE e Nem com Ele!
[25] Comentário enviado por nardin em 13/07/2008 - 11:08h
Estou com uma dúvida.
Pra fazer essas configurações o modem prescisa ser bridge ou router?
Quando uso meu modem bridge eu consigo uma interface ppp0 como a sua, mas com o router fica a eth0 com um ip interno.
Se for pra usar o bridge como ficaria os arquivos de Registros de Recursos? Por exemplo, de uma olhada como está configurado o meu.
$TTL 43200
@ IN SOA rockstar.leonardocostaborges.com. root.leonardocostaborges.com. (
1 ; Serial
3600 ; Refresh
900 ; Retry
1209600 ; Expire
43200 ) ; Negative Cache TTL
;
@ IN NS rockstar.leonardocostaborges.com.
@ IN A 192.168.1.64
rockstar IN A 192.168.1.64
www IN CNAME rockstar
[26] Comentário enviado por jef.ferregato em 07/02/2010 - 18:33h
olá alguem pode me ajudar estou a dias tentando resolver isso e ainda não consegui, sou iniciante na comunidade Linux e por enquanto utilizo o Suse e o RedHat.
O quadro é o seguinte:
tenho um DSL PPoe (ip dinamico), um router D-link WBR 1310 (ele que disca e faz a autenticação), e uma rede com o range de ip de 192.168.0.100 a 192.168.0.199.
nesta rede está um servidor ftp/ssh/web, cujo o ip é 192.168.0.157
como o router não tem o o cliente ddns interno optei por instalar um cliente ddns no própio servidor, a instalação foi bem facil e a configuração está feita sobre a interface eth0, que é a placa onde recebe dhcp do router citado.
No entanto o proposito do meu ddns é que o ele atualize o ip publico para que eu tenha este acesso de fora, mas ele está atualizando o ip inteno (192.168.0.157) o que eu faço para ele atualizar o ip externo sendo que na interface tenho que colocar eth0?
se alguem puder me ajudar ficarei imensamente grato.
[29] Comentário enviado por Alfredo_Silveira em 03/06/2013 - 12:38h
Caro Fábio,
Eu poderia utilizar como clientes, neste caso, modems 3G que permitissem apontar para o meu servidor DDNS (FreeBSD 9.1)?
Estou precisando montar um servidor DDNS, mas ele irá coletar os IPs dinâmicos de modems 3G. Só que nestes modems posso configurar um domínio no qual ele se conecta.
[30] Comentário enviado por mpbabilio em 27/03/2015 - 11:48h
Bom Dia Fabio,
Muito bom o artigo. Me ajudou muito. só tenho duas observações a fazer.
1- Quem usa o apparmor e o Bind com chroot, tem que apontar o caminho do chroot no arquivo /etc/apparmor.d/usr.bin.named com permissão de leitura e escrita.
2- em se tratando de ips dinâmicos, o ttl de 1440 é um pouco alto ainda, estou trabalhando com 30 segundos.
ps: estou trabalhando em um script para verificar periodicamente o IP e só atualizar o DNS quando houver uma mudança efetiva do IP, assim que estiver pronto publico aqui.
[31] Comentário enviado por fabio em 27/03/2015 - 13:45h
[30] Comentário enviado por mpbabilio em 27/03/2015 - 11:48h
Bom Dia Fabio,
Muito bom o artigo. Me ajudou muito. só tenho duas observações a fazer.
1- Quem usa o apparmor e o Bind com chroot, tem que apontar o caminho do chroot no arquivo /etc/apparmor.d/usr.bin.named com permissão de leitura e escrita.
2- em se tratando de ips dinâmicos, o ttl de 1440 é um pouco alto ainda, estou trabalhando com 30 segundos.
ps: estou trabalhando em um script para verificar periodicamente o IP e só atualizar o DNS quando houver uma mudança efetiva do IP, assim que estiver pronto publico aqui.