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.
Bônus: Gambiarra pra liberar acesso ao meu IP dinâmico
Depois de ter meu domínio casa.acme.com funcionando redondo, surgiu a necessidade (ou seria luxuosidade?) de, por exemplo, liberar determinadas portas privilegiadas para meu IP dinâmico.
Situação: Liberar a porta 3306 do MySQL para meu host dinâmico.
Solução: Criar um script no servidor que de tempos em tempos renova suas regras de iptables baseando-se no IP resolvido pelo nome do host dinâmico (casa.acme.com).
# vim /root/regras.sh
#!/bin/bash
# caminho do iptables
IPT="/sbin/iptables"
# apaga as 3 primeiras regras do canal INPUT
$IPT -D INPUT 3
$IPT -D INPUT 2
$IPT -D INPUT 1
# 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
Deve existir solução mais bonita, mas funciona! :)
O que o script faz? Apaga e insere novamente 3 regras no início do canal INPUT do iptables:
Recusar (DROP) conexões na porta 3306;
Aceitar (ACCEPT) conexões na porta 3306 vindas de localhost (interface lo);
Aceitar (ACCEPT) conexões na porta 3306 vindas de casa.acme.com. Aqui o iptables resolve o nome para o IP atual de casa.acme.com.
O parâmetro "-I" do iptables adiciona a regra no início do canal, sendo assim as regras acima devem ser lidas de trás pra frente.
Por fim adicionei o script no cron para rodar a cada 5 minutos, uma vez que a qualquer momento o IP de casa.acme.com pode mudar, daí o tempo máximo de falta de acesso por IP diferente de hostname será esse.
# crontab -e
*/5 * * * * /root/regras.sh
Pessoalmente não gostei desse lance de apagar as rules por número, na verdade eu só queria atualizar (iptables -R = replace) a regra que libera a porta para o host dinâmico, o problema é que quando o host muda de IP a regra não é mais identificada usando os mesmos parâmetros, visto que o IP é diferente - não casa. Acredito que criando uma tabela pra essa regra resolva, mas já estou sem saco pra pesquisar isso, fica como dever de casa. :)
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.