Mais um atualizador DDNS Cloudflare

Para entender este texto você precisa estar familiarizado pelo menos com o que expliquei neste outro.

A proposta de Scott Helme é uma solução mista de código aberto, que funciona no Windows e no Linux, mas requer que você tenha um servidor na internet com suporte a php.

São dois scripts. Um php rodando no servidor na internet e outro “batch” rodando na rede cujo ddns você quer manter atualizado. Todo o trabalho é feito pelo script php e o batch apenas serve para que o script php possa determinar qual seu atual endereço IP.

Se você usa Windows, ignore o script .sh fornecido e use os seguintes criados por mim (só funciona nas versões do Windows com suporte a Powershell – Windows 7 SP1 em diante):

cloudflare.bat

Esse arquivo .bat vai executar o script a seguir a cada 120s.

cloudflare_updater.ps1

Notas:

  • O que vem depois de “auth=” é uma senha/token que você pode definir como você quiser mas que precia ser igual ao que você definiu no script php. Por esse token é que o script vai saber ao mesmo tempo que você tem autorização e qual host você quer atualizar.
  • Você tem que mudar o URL indicado (https://ryan.com.br/atualizar_ddns_cloudflare.php) para o endereço onde está hospedado o seu script php.
  • Se o script .ps1 acusar um erro relacionado com o Internet Explorer, certifique-se de ter executado o IE na máquina ao menos uma vez para se livrar daquela pergunta que ele faz.
  • A senha é necessária para evitar que alguém que descubra o endereço do seu script até mesmo por acidente (o mais provável é que seja maliciosamente) redirecione o ddns para si.
  • Você pode precisar mudar o SecurityProtocolType do script para o usado pelo seu servidor de hospedagem. Eu usei tls12 porque foi o que funcionou com o meu.

Para que alguma mudança feita por Scott não quebre a compatibilidade da minha contribuição, aqui está uma cópia do script php dele da forma como funciona hoje, com algumas coisas traduzidas e/ou explicadas por mim. Note que com o token dado no meu arquivo .ps1 o subdomínio que terá o DDNS atualizado é subdominio1.automalabs.com.br:

 

2 comentários
  • Daniel Plácido - 62 Comentários

    Eu já conhecia o dnsomatic.com mas ainda assim preferia usar minha solução, mas eu tenho tantos DDNS e vivia tendo que atualizar meu script de autenticação por conta de atualizações nas APIs que desisti e agora meu script atualiza somente no DNSOmatic que se encarrega de atualizar em todo o restante, a gama de servidores suportados é imensa.

    • Jefferson - 6.543 Comentários

      Ontem, enquanto escrevia este texto, eu dei uma olhada no dns-o-matic mas achei complicado demais para quem quer apenas atualizar uma meia dúzia de endereços no mesmo serviço (Cloudflare). O fato de eu ter que criar uma conta com eles, mesmo sendo gratuita, já me incomodou. Não quero depender de mais serviços. Meu setup já é confuso o bastante com hospedagem na Hostgator e DNS na Cloudflare.

Clique para comentar
(Prefira clicar em "Responder" se estiver comentando um comentário)

Deixe um comentário

Você pode usar estas tags HTML

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

  

  

  

:) :( ;) O_o B) :lol: :huh: :S :D :-P 8-O :yahoo: :rtfm: :dashhead1: :clapping: more »

DNS dinâmico: Como fazer um atualizador DDNS Cloudflare com um ESP8266

esp8266_esp01_automalabsO hardware completo consiste de:

  • Um ESP8266 qualquer (R$15 ou menos no ML);
  • Um regulador de 3.3V (Menos de R$1);
  • Um cabo para ligar a alguma fonte de energia USB que você tenha de bobeira pela casa.

 

Exemplo:

ESP-01_power_run_a

Esse é o mínimo para que funcione. Um projeto comercial requer mais componentes.

Sim, tendo o resto do material necessário para programação o atualizador sai por menos de R$20 e você ainda pode rodar outras coisas nele.

Se você já tiver um ESP8266 na sua casa ou escritório ocupado com outra tarefa mas com espaço em flash sobrando (HTTPS requer muito do bicho) pode acrescentar o código nele. Afinal o processo leva segundos e ocorre apenas a cada x minutos. E não requer nenhuma GPIO.

Os detalhes da programação eu publiquei no automalabs por sem bem mais apropriado do que aqui.

 

1 comentário
  • Jefferson - 6.543 Comentários

    Ao contrário do que eu disse, aproveitar espaço em outro ESP8266 para essa tarefa pode não ser boa idéia. O maior problema do SSL no ESP8266 não é espaço em flash: é RAM. E problemas de falta de RAM são de enlouquecer em um projeto com microcontrolador.

Clique para comentar
(Prefira clicar em "Responder" se estiver comentando um comentário)

Deixe um comentário

Você pode usar estas tags HTML

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

  

  

  

:) :( ;) O_o B) :lol: :huh: :S :D :-P 8-O :yahoo: :rtfm: :dashhead1: :clapping: more »

DNS dinâmico: Como usar a API da Cloudflare para DDNS

Este texto tem importância apenas para quem deseja fazer seu próprio script ou programa de atualização DDNS para Cloudflare.

Na primeira vez que tentei entender a documentação da API da Cloudflare há um ano eu falhei miseravelmente. Não entendi nada. Na segunda tentativa esta semana eu entendi em minutos. É engraçado como nosso cérebro funciona.

Aqui eu vou descrever apenas as partes necessárias para fazer atualizações DDNS. Vou usar como exemplo o cURL porque aí já aproveito os exemplos da documentação e apesar de ser uma ferramenta popular do Linux você também pode usar o cURL no Windows.  Mas eu recomendo usar o complemento POSTMAN do Chrome inserindo os headers indicados (toda linha precedida por “-H” é um header).

O serviço permite que você cadastre vários domínios, que são referenciados como “zonas”.
Para atualizar um host você primeiro precisa do ID do domínio/zona. Se não sabe o id (ele também aparece na sua conta Cloudflare), primeiro peça uma listagem de zonas:

A resposta é algo assim (este é o exemplo oficial. A resposta hoje é ligeiramente diferente):

Note que o nome de domínio é precedido por um “id”. É isso que você vai usar.

Para obter os registros DNS com o IP atual para um determinado domínio você usa os mesmos headers, mas muda o URL para algo assim:

https://api.cloudflare.com/client/v4/zones/id_do_dominio/dns_records

Exemplo de resposta (eu suprimi vários registros desnecessários para a explicação e editei informação confidencial):

 

Para se limitar a receber o dados de um host específico (é este o comando que finalmente traz o IP configurado para o host):

https://api.cloudflare.com/client/v4/zones/id_do_dominio/dns_records/id_do_host

Exemplo de resposta:

Para atualizar um host (preste atenção aos vários campos que você precisa modificar):

“name” precisa ter o nome completo e correto do host. Por alguma razão se o nome estiver errado e não bater com id_do_host a API acrescenta um novo host com esse nome, em vez de atualizar.

No Postman, escolha RAW, JSON e insira os dados de uma chave à outra.

Exemplo de resposta:

Tenha em mente que os IDs de domínio e host não mudam se você não apagar a definição do host. Então depois que você tem esses IDs só precisa usar dois comandos: o que verifica os dados do host (se quiser saber o IP que está lá) e o PUT que faz a atualização.

Pronto. Esse é o básico necessário da API para atualização DDNS. Queria ter achado algo assim no ano passado.

 

2 comentários
  • Jefferson - 6.543 Comentários

    Fiz diversas expansões e esclarecimentos no texto.

  • Jefferson - 6.543 Comentários

    Se ao usar o Postman para isso você receber uma mensagem de erro dizendo que o Content-Type está errado mas você está vendo que colocou “application/json”, clique em Preview para ver o que o Postman efetivamente vai mandar. Se você ver duas definições de Content-Type, selecione POST e nas opções clique em RAW. Volte para GET e clique em Preview. A definição extra de Content-Type deverá ter sumido.

Clique para comentar
(Prefira clicar em "Responder" se estiver comentando um comentário)

Deixe um comentário

Você pode usar estas tags HTML

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

  

  

  

:) :( ;) O_o B) :lol: :huh: :S :D :-P 8-O :yahoo: :rtfm: :dashhead1: :clapping: more »

DNS Dinâmico: Quem tem um domínio pode usar o DDNS gratuito da Cloudflare

Daniel Plácido deu a dica em novembro de 2015. Eu testei em setembro de 2016 e só agora estou tendo tempo de escrever sobre isso. É, infelizmente desde eu saber de algo até escrever sobre o assunto no blog às vezes se passa um looooooongo tempo.

A Cloudflare difere de serviços “normais” de DDNS como o no-ip e o dyndns em aspectos muito importantes que podem ser vistos como problemas:

  • Você precisa configurar a Cloudflare como servidor de DNS de todo o seu domínio;
  • Não existe cliente oficial de atualização para Windows e não há nenhum suporte embutido em nenhum modem/roteador que eu conheça;

Mas tem vantagens expressivas:

  • Não há realmente limite definido no número de hosts. A no-ip hoje só permite três hosts gratuitos por conta;
  • Você vai poder criar ilimitados endereços no formato seuhost.seudominio.com.br. Nada do amadorismo de hostqueestavadisponivel.no-ip.com;

Como é o único serviço gratuito e sem frescuras disponível hoje, vale a pena passar por cima dos problemas. É o que vou tentar explicar aqui.

Primeiro você precisa ter configurado Cloudflare como o servidor DNS do domínio. Enquanto esse passo não estiver pronto não adianta prosseguir.

Faça login na sua conta Cloudflare;

Selecione o domínio. Se você tiver apenas um talvez esse passo não exista;

cloudflare_SelectWebsite_ryan.com.br

Clique em DNS;

cloudflare_dns_ryan.com.br

Você vai cair na página que lista todos os registros DNS, mas só nos interessa a parte que adiciona um novo registro.
cloudflare_AddRecord_ryan.com.br

  1. O tipo de registro que nos interessa para DDNS será sempre do tipo A;
  2. Aqui você coloca o nome de host que você escolheu. No caso o resultado seria batcaverna.automalabs.com.br;
  3. O IP inicial que você quer dar ao registro. Pode ser o seu atual endereço IP externo, o mesmo IP do resto do domínio ou qualquer IP externo que você queira. Você pode até apontar para IP do Google se quiser, embora isso faça você cair em uma mensagem de erro deles. Por outro lado apontar para o IP do UOL dá totalmente certo;
  4. Por quanto tempo você quer que seja válido, sem exigir nova consulta DNS. Durante testes é melhor colocar 2 minutos (o mínimo);
  5. Se você quer que a Cloudflare também faça o cache do conteúdo. A escolha pode variar dependendo do uso que você vai fazer, mas desligar o cache vai facilitar os testes. O default, que é ativar o cache, tem o benefício adicional de ocultar seu verdadeiro IP de quem saiba o seu endereço DDNS, porque sempre será visto o IP da Cloudflare;
  6. Clique em Add Record.

Hosts adicionados começam a responder segundos depois. Hosts modificados podem demorar bastante porque isso depende do TTL e da propagação. Para você ter uma idéia do problema, às vezes no prompt de comando o PING já resolve para o novo IP mas só minutos depois o Chrome se dá conta;

Como atualizar automaticamente

Seja lá qual for o meio que você encontrar de atualização, vai ter que usar no mínimo seu email cadastrado na Cloudflare e sua chave de API, que você pode obter seguindo os caminhos depois de fazer login na sua conta Cloudflare:

Overview – > Get Your API Key -> Global API Key -> View API key

ou

Clique no seu email no canto superior direito -> Settings -> Global API Key -> View API key

Como eu disse lá no início infelizmente dispositivos de rede como roteadores e modems não tem suporte a Cloudflare, o que é um tanto bizarro considerando que há muitos anos o serviço existe e os habituais serviços DDNS estão ficando menos acessíveis a cada ano que passa. Se você tiver algum box Linux na sua rede existem opções de script para fazer isso (não testei nenhuma) mas se você depender de um servidor Windows a melhor opção que conheço é o CloudFlare DDNS Updater, cujo uso não é nada intuitivo.

Execute CloudflareDDNS.exe

Clique em Tools -> Settings

CloudflareDDNSUpdater_settings_ryan.com.br

Em “Domain Name” tenho o cuidado de colocar o nome de domínio sem incluir host, como mostrado acima. Em “Auto Fetch Time” a periodicidade da atualização em minutos. O resto é auto explicativo. Clique em Apply.

Em seguida, e essa é a parte não intuitiva que cria problemas, você precisa clicar em Tools -> Fetch Records  e selecionar os hosts que você quer que sejam atualizados com seu IP externo.

CloudflareDDNSUpdater_FetchRecords_ryan.com.br

Em seguida clique em Tools -> Update Records. Está configurado.

Erro “Zone does not exist”: Você provavelmente grafou o “domain” errado lá em tools -> settings.

Para instalar o programa como um serviço e assim não ser necessário que haja um usuário logado para ele ser executado, abra um prompt de comando elevado o diretório dele e execute

Veja também:

5 comentários
  • Daniel - 29 Comentários

    Legal! Eu também estou montando um atualizador com um WEMOS ESP8266. Mas não é um verdadeiro DDNS… eu coloquei um script php no meu domínio que cria um redirecionamento de http://www.meudominio.com.br/novo_site para o IP do equipamento. No Browser quebra o galho, mas quando usa outros apps não tem como funcionar pois não tem como reconhecer http://www.meudominio.com.br/novo_site:8080.
    O problema foi uma webcam nova que só aceita DDNS que atualmente são pagos.
    Ainda vou tentar ver algum que ainda é gratuito e tentar atualizar direto pelo ESP8266 + site PHP.

  • Snow_man - 303 Comentários

    Jefferson, será que serve apenas para acesso mstsc?
    Um cliente usa um sistema em servidor 2008 R2 (sem domínio), e o desenvolvedor quer
    acessar via mstsc. O equipamento está na rede local e eu usava um ddns da dlink
    (nomedohost.dlinkddns.com) mas parou de funcionar.

    Vale a pena tentar pelo Cloudflare, para esse uso? Gostei do fato do endereço ficar no
    domínio da empresa.

  • vagnerdomingues - 1 Comentário

    perfeito bro, procurei muito na internet ate achar o que eu precisava…

    :dashhead1:

    eu queria algo que burlasse o URL frame (ou masking) pra esconder o meu ip e ainda sim ser bem rankeado nos mescanismo de SEO… e eu ja tinha criado uma conta e tentado arrumar isso pelo cloudflare mas eu não tava entendendo como poderia fazer isso.. os unicos redirects que eu vi eram pelo page rules eram 301 e 302 apenas… mudando a url para o ip que eu gostaria de esconder, bom graças a esse sistema de cachê vai ser possivel, obrigado!!

    :clapping:

  • Jefferson - 6.543 Comentários

    O programa Cloudflare DDNS Updater parou de funcionar há algumas semanas. Provavelmente usa a API antiga, que foi descontinuada.

Clique para comentar
(Prefira clicar em "Responder" se estiver comentando um comentário)

Deixe um comentário

Você pode usar estas tags HTML

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

  

  

  

:) :( ;) O_o B) :lol: :huh: :S :D :-P 8-O :yahoo: :rtfm: :dashhead1: :clapping: more »

DNS Dinâmico: criando seu próprio DDNS no cPanel – Parte 3: atualizadores.

Graças à modificação feita por Ethanpil no script cPanel original (parte 2 deste texto), os métodos que vou explicar  a seguir são compatíveis com a atualização de serviços como dyndns e no-ip. Ou seja: você pode usá-los também, com pequenas modificações, para atualizar seu IP dinâmico oferecido por esses serviços.

É interessante consultar também: DNS Dinâmico: Como ter no seu site a funcionalidade de whatismyip, check.dyndns ou icanhazip

Windows – arquivo batch híbrido com javascript

Uso

Edite as variáveis na zona javascript

E faça uma edição correspondente na zona batch

Salve o script com a extensão .cmd em uma máquina Windows qualquer que esteja na mesma rede cujo IP externo você quer atribuir ao host. Crie uma tarefa agendada que o execute a cada x minutos.  Se não for detectada nenhuma mudança no IP, o script que se conecta ao cPanel nem será chamado.

Testado apenas no Windows 8.1 x64. Não requer permissão de administrador para rodar.

Esse script não tem nenhuma checagem contra problemas de conectividade.

 

Windows – Powershell

 

 

Uso

  • Edite as variáveis no início do script
  • Salve como, por exemplo, ddns_updater.ps1
  • Use um batch como o seguinte para executá-lo, adaptando o caminho para o arquivo de acordo com sua situação:

  •  Crie uma tarefa agendada que execute esse batch a cada x minutos.  Se não for detectada nenhuma mudança no IP, o script que se conecta ao cPanel nem será chamado.

Testado apenas no Windows 8.1 x64. Não requer permissão de administrador para rodar.

Esse script não tem nenhuma checagem contra problemas de conectividade.

O arquivo batch intermediário é necessário porque, como o Windows é alvo de abusos e o Powershell é poderoso, a MS decidiu bloquear a execução de scripts Powershell por default. Aparentemente é possível agendar uma tarefa para rodar o script diretamente, mas ainda preciso confirmar isso.

 

Outro dia eu expandirei este texto com exemplos de:

 

  • Arduino
  • DD-WRT/OpenWRT

 

4 comentários
  • Jefferson - 6.543 Comentários

    Acrescentei um exemplo Powershell

  • VR5 - 397 Comentários

    Bom dia Jefferson e colegas. Não sei se podem me ajudar, mas queria uma dica de vocês: atualmente minha filha de 9 anos tem um tablete infantil (da Frozen…) e ele já está fraquinho/memória interna cheia. Pensei em comprar um novo, mas sinceramente as especificações de tablets infantis praticamente não evoluíram nada desde que comprei esse pra ela (cerca de 2 anos). E os tablets “adultos” são muito caros! Eu mesmo tenho um velho Samsung GalaxyTab 3 e eles já está “entregando os pontos” também (não em memória mas em processamento mesmo). O que me aconselhariam nesse caso?

Clique para comentar
(Prefira clicar em "Responder" se estiver comentando um comentário)

Deixe um comentário

Você pode usar estas tags HTML

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

  

  

  

:) :( ;) O_o B) :lol: :huh: :S :D :-P 8-O :yahoo: :rtfm: :dashhead1: :clapping: more »

DNS Dinâmico: Como ter no seu site a funcionalidade de whatismyip, check.dyndns ou icanhazip.

Eu coloquei “whatismyip” no título mais para fins de compreensão imediata da finalidade. Eu não pretendo duplicar a funcionalidade desse serviço específico porque ela cresceu além das necessidades do DNS dinâmico. O script a seguir duplica exatamente a funcionalidade e resposta de icanhazip.com e pode facilmente duplicar a resposta de check.dyndns.com com o mero acréscimo de algumas palavras.

A finalidade é não depender de terceiros. Se você tem um site, por que não usá-lo? Com o bônus de não ter nenhuma surpresa futura com o dono do domínio avacalhando tudo (direito dele) e obrigando você a mudar seus scripts, como aconteceu com whatismyip.com.

O script é decepcionante simples:

Basta salvar isso como, por exemplo, “meuip.php” no seu site e rodá-lo de qualquer lugar. O resultado é idêntico ao de icanhazip.com.

Há quem acredite que  o conteúdo da variável REMOTE_ADDR pode ser falsificado pelo usuário e induzir uma vulnerabilidade no script, e que por isso você deveria ao menos checar se o valor recebido é mesmo um valor IP, como neste exemplo:

 

Mas segundo o que é explicado aqui e pelo usuário Achernar aqui, essa preocupação não se justifica, porque REMOTE_ADDR é preenchida pelo servidor www (apache, por exemplo) com o valor na camada de rede, que só pode ser um IP mesmo. Ao contrário de outras variáveis como aquela que identifica o seu browser (HTTP_USER_AGENT) e que podem ter na realidade qualquer texto que o usuário remoto queira.

Então você pode usar o primeiro script sem medo.

 

Clique para comentar
(Prefira clicar em "Responder" se estiver comentando um comentário)

Deixe um comentário

Você pode usar estas tags HTML

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

  

  

  

:) :( ;) O_o B) :lol: :huh: :S :D :-P 8-O :yahoo: :rtfm: :dashhead1: :clapping: more »

Como descobrir qual é o seu IP externo e o que danado é isso?

Este texto é auxiliar da série de textos sobre DNS dinâmico.

O seu modem é sempre o primeiro a saber qual o seu IP externo e seria perfeito se existisse um mecanismo padronizado para que ele avisasse quando obtivesse um IP. Infelizmente esse mecanismo não existe e o meio mais “simples” de saber qual o seu IP externo acaba sendo, contra-intuitivamente, perguntar a terceiros!

Você pode nem saber o que é um IP externo mas cada site que você acessa sabe qual é o seu, porque essa informação é indispensável e faz parte do protocolo de conexão. Sendo assim, como a maioria dos meus leitores deve saber, há muito tempo sites vem oferecendo uma gambiarra para contornar essa deficiência dos protocolos de conexão à internet: basta abrir a página deles que eles respondem com o seu endereço IP. Entre eles estão:

  • http://whatismyip.com/ – Eu suponho que seja o mais conhecido de todos, mas as constantes mudanças no código fonte dificultam seu uso em projetos de automação e o constante entulhamento da interface dificulta até perguntar a alguém pelo telefone que número está aparecendo;
  • http://www.ipchicken.com/ – Faz DNS reverso automático, mostrando a você o nome DNS da sua conexão. Útil quando você quer saber se a linha é GVT ou Velox ou se é IP fixo ou dinâmico.
  • http://icanhazip.com/ – Serviço oferecido por Major Hayden. Embora esteja entre os mais feios, é o mais prático. A resposta é unicamente o endereço IP em texto puro, sem formatação. Perfeito para uso em automação. Neste outro texto explico como ter a mesma funcionalidade no seu site;
  • http://checkip.dyndns.com/

Mas o que danado é IP externo?

Como este texto foi criado primariamente para dar suporte aos meus textos sobre DNS dinâmico eu imagino que a maioria dos leitores não precise ser lembrado do que é isso. Porém muita gente pode cair aqui via Google, então aí vai uma explicação sucinta, que eu posso ou não expandir depois (não tenho tempo agora):

Uma das primeiras coisas a confundir os novatos é que cada dispositivo conectado à internet através de um roteador (que pode ser o modem) tem dois endereços IP:

  • O interno, que só vale dentro de sua própria rede e é você quem determina. Se você estiver de qualquer forma conectado a uma rede, você tem um endereço IP interno, mesmo que seja “inventado” pelo SO (endereços de auto configuração);
  • O externo, que é o IP atribuído pelo provedor de acesso à sua conexão e na maioria das conexões ADSL muda toda vez que você desconecta e reconecta. Esse endereço somente existe quando você está conectado à internet E geralmente só é importante se você deseja que alguém inicie uma conexão com você a partir da internet.

Como explicado acima, o IP externo não é uma informação “óbvia”, depende de você estar conectado ou não à internet e geralmente muda com freqüência. Não é algo que possa simplesmente ser memorizado. Se alguém pergunta a você “qual o seu IP externo?” geralmente está esperando que você verifique ou tenha verificado isso recentemente pelos meios indicados acima ou similares.

 

2 comentários
  • Sidmar - 1 Comentário

    Jefferson, acompanho seu blog desde os tempos do portal (hoje “https://ryan.com.br/dvd_portal.htm”) e adoro muito tanto o que escreve como a forma como escreve.
    Nunca achei necessário intervir antes pois a grande maioria dos temas são novidade ou fora da minha área de atuação mas neste caso acho que tenho algumas informações que podem, ou não, ser interessantes.
    Você pode editar este comentário a vontade, retirando o que não for pertinente, que não vou ficar incomodado. Muito pelo contrário, vou me sentir orgulhoso se passar pelo seu “filtro” pessoal.
    Com relação ao tema endereço IP não seria mais “correto” utilizar os termos público/privado ao invés de externo/interno?
    Em ambos os casos são endereços IP (um número de 32 bits) mas o que difere sua função seria a possibilidade dos endereços públicos serem roteáveis pelos equipamentos da Internet enquanto os privados não, embora todos eles são roteáveis de maneira geral mas os endereços privados são bloqueados pelos equipamentos da rede mundial.
    Você ainda me surpreendeu ao utilizar os termos externo/interno pois o que normalmente tenho visto por aí são válido/inválido. Tá, eu sei que externo/interno cabe bem melhor no contexto do tema do que válido/inválido e também sei que você é experto o suficiente para saber a diferença, mas porque não público/privado? Nem acho que seria necessário alterar a sua explicação para usar estes termos.
    De qualquer forma, muito obrigado pela oportunidade de me expressar a respeito do tema.

    Sidmar.

    • Jefferson - 6.543 Comentários

      Sidmar,

      Somente mais ou menos uma hora depois de publicar o texto eu me lembrei de que geralmente se usa o termo “ip público”. Eu escrevi externo porque na ocasião eu estava trabalhando com várias fontes que chamavam de “external” e nenhuma que chamava de “public”, daí fiquei “contaminado” pelo termo. Entretanto Eu fiquei matutando se deveria mudar o texto e fiquei em dúvida, porque o IP externo nem sempre é literalmente “público”. “Válido/Inválido” no contexto da minha explicação soa ainda pior. Eu ainda não decidi o que fazer a respeito.

      Mas obrigado pela contribuição.

Clique para comentar
(Prefira clicar em "Responder" se estiver comentando um comentário)

Deixe um comentário

Você pode usar estas tags HTML

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

  

  

  

:) :( ;) O_o B) :lol: :huh: :S :D :-P 8-O :yahoo: :rtfm: :dashhead1: :clapping: more »

DNS Dinâmico: criando seu próprio DDNS no cPanel – Parte 2: automatizando.

Na parte 1 deste texto eu expliquei como criar um “A RECORD” no seu domínio usando o cPanel que aponta para um IP qualquer na internet, imitando o funcionamento de um serviço de DNS dinâmico como o no-ip ou dyndns. Nesta segunda parte eu começo a explicar como automatizar a atualização desse registro. A automação do processo é dividida em duas partes para facilitar a implementação em dispositivos mais simples, como roteadores. E também facilita a implementação e o diagnóstico.

AVISO: O script que apresentarei a seguir tem problemas de segurança que você deve conhecer. Preste atenção a tudo o que é explicado antes de usá-lo.

Origem

A automação do processo de atualização da zona DNS no cPanel foi elaborada por Mitchel Haan e publicada em seu site [link morto] em abril de 2013. O site de Mitchel foi apagado em algum momento entre 5 e 23 de fevereiro de 2015 mas por sorte ainda existe uma cópia na Wayback Machine. De qualquer forma a versão que apresento a seguir é uma adaptação feita por Ethanpil.

Uso

A primeira coisa a fazer é preencher toda a seção de variáveis. As duas primeiras podem ser o que você quiser porque servem apenas para identificar você ao executar o script, evitando que terceiros possam remotamente executar o seu script indicando um IP sob controle deles.

As outras variáveis são relacionadas ao seu domínio e sua conta cPanel:

Note o “.” inicial na última variável. Não é erro de digitação. Sem ele o script não funciona.

Parâmetros do script

  • hostname – indispensável. É o nome do host cujo IP você quer atualizar;
  • myip – Endereço IP que você quer atribuir ao host indicado por hostname. Se você omitir, o script usará o IP que consta no cabeçalho da conexão http (o IP de quem executou o script).

Parâmetros são separados pelo caractere “&”. Cada valor é separado do respectivo parâmetro pelo caractere “=”. Estas são convenções universais e não do script.

Salve o script no servidor www. Digamos que tenha sido na raiz do domínio exemplo.com.br e o nome do arquivo seja atualiza.php.

Rode o script colocando em qualquer browser, exceto Internet Explorer:

http://nome_de_usuario:senha@exemplo.com.br/atualiza.php?hostname=teste&myip=189.70.37.12

Isso atualizará o host teste.exemplo.com.br para apontar para o IP 189.70.37.12

Se tudo estiver OK a resposta do script, no browser, será algo assim:

Na terceira parte desta série de textos eu vou abordar as maneiras de você enviar esse comando para o script automaticamente. Mas é importante que o que expliquei até aqui já esteja funcionando corretamente. Se não está, não adianta procurar a solução na Parte 3.

Para quem nunca viu um URL como o acima:

A sintaxe http://usuario:senha@dominio é uma forma muito antiga e conveniente de passar credenciais de autenticação HTTP básica no URL, permitindo até mesmo gravar a autenticação nos favoritos. O IE deixou de suportar isso a partir da versão 7 porque começou a ser usado para fins maliciosos

Problemas de segurança

1 – Isso não é jeito de tratar credenciais cPanel

O script foi criado com a intenção de rodar no mesmo servidor onde roda o domínio a atualizar. Entretanto isso é preocupante porque como você pode ver, as credenciais cPanel são escancaradas no script:

Qualquer invasor que tenha acesso meramente de leitura ao seu diretório www (e existem infindáveis meios de se conseguir isso) poderá eventualmente esbarrar nesse script e aí… “perdeu playboy”. Com as credenciais cPanel o invasor tem o controle de toda a conta, com todos os seus domínios, www, email, bancos de dados… No meu caso isso seria uma catástrofe.

Uma forma de minimizar esse problema é rodar esse script fora do domínio que ele atualiza. Por exemplo, se você já tem um servidor local rodando 24h, que não oferece nenhum serviço para a internet (menos vulnerável), você pode rodar o script nele. Uma “gambiarra” para conseguir isso em uma máquina Windows sem precisar fazer qualquer modificação no script é instalar o XAMPP.

Eu simulei isso no meu desktop e funcionou. Mas tenha o cuidado de manter o uso de https na variável $dyndnsCpanel. Dessa forma será bem mais difícil capturar as suas credenciais do cPanel interceptando a conexão entre seu servidor local e o seu domínio:

Se você usar http (nem estou certo de que o cPanel permita) as credenciais cPanel poderão ser interceptadas.

Outra forma de tentar minimizar o problema é obfuscar o código PHP. Obfuscação não vai impedir um invasor determinado a descobrir do que se trata, mas dificulta bastante. Se você der um nome ao script que não denuncie seu propósito e obfuscar o suficiente o conteúdo, aumenta muito as chances de que o invasor ache que não vale a pena perder tempo com isso. Deixando escancarado qualquer script kiddie vai ter um orgasmo. Como fazer essa obfuscação precisará ser tema para outro texto.

 2 – A conexão com o script pode ser interceptada

Estando o script em uma máquina remota, as credenciais de acesso ao mesmo podem ser interceptadas com relativa facilidade, porque são transmitidas claramente no URL:

http://nome_de_usuario:senha@exemplo.com.br/atualiza.php?hostname=teste&myip=189.70.37.12

Isso não é problema se no lugar de HTTP o seu domínio usa HTTPS, porque nesse caso até o URL é criptografado.

Mas se você não usa HTTPS qualquer pessoa observando o seu tráfego, como o operador do seu provedor de acesso via rádio, poderá assumir o controle de para onde aponta esse hostname. Dependendo do quanto ele seja esperto ele pode conseguir induzir você a fornecer senhas de acesso extras simulando em máquina controlada por ele o dispositivo que você quer acessar, entre outras coisas.  Se você rodar o script fora do seu domínio como explicado no item anterior pode minimizar esse problema também.

Nota: na primeira revisão deste texto eu afirmei que os serviços de DDNS gratuitos como o no-ip e dyndns também são vulneráveis a interceptação. Isso está parcialmente correto. O no-ip, por exemplo, suporta http e https, mas o simples fato de suportar os dois já é motivo para preocupação porque só Deus sabe que protocolo está usando o danado do roteador, modem ou dvr onde nós colocamos nossas credenciais. Somente interceptando nós mesmos a atualização para termos certeza.

7 comentários
  • Luciano - 476 Comentários

    Jefferson, eu uso um esquema diferente. Eu lembro quando postaram sobre este script na PICLISTBR, mas fiquei bastante receoso com o fato de deixar as credenciais do cPanel de certa forma vulneráveis.

    O que uso, embora dependa também de confiança de terceiros, pelo menos no tempo que uso e dado o tempo que o serviço existe, eu dei meu voto de confiança. Se não conhece, apresento-lhe o site: http://www.afraid.org/

    Ele oferece o serviço de DDNS, você pode escolher entre os que pertencem ao administrador do site ou algum dos inúmeros disponibilizados por terceiros (ai vai da confiança…). Registrei alguns sub-domínios usando um dos disponibilizados pelo admim e uso um dos clientes pra windows também disponibilizados por lá. Nos dispositivos que precisei usar, tenho o DDWRT que suporta url custom.

    Em um dos meus domínios, fui no cPanel e criei um sub-domínio meu, que redireciona para um dos que criei no afraid.

    Assim, caso amanhã um daqueles dominios do admim expirem, eu posso trocar por outro ou até mesmo registrar um meu, e apenas altero o meu redirecionamento, sem precisar mexer em uma vírgula do que já está configurado em meus dispositivos.

    Utilizo a pelo menos uns 5 anos e não tive qualquer problema até agora.

    • Jefferson - 6.543 Comentários

      Discutimos isso em agosto de 2014. O problema para mim, conforme eu disse na época:

      “Eu até pensei em usar o serviço de afraid.org, mas a “gambiarra” (apontar para meu domínio, que aponta para afraid.org, que aponta para o dispositivo) me incomoda.”

      Não estou dizendo que sua solução seja ruim. Você pelo menos a vem usando há cinco anos. Só por isso já é muito melhor que a que eu venho usando: nenhuma.

      Eu vou terminar esta série de textos sobre o uso do cPanel, mas pelo pouco que li até agora me parece que vou acabar usando a solução sugerida por Daniel Plácido: CloudFlare.

      • Luciano - 476 Comentários

        Pois é… o que fiz, que seja uma “gambiarra” eu não nego, mas pelo menos tá me atendendo bem e flexibilizou qualquer mudança, para que ela seja menos traumática, do ponto de ter que reconfigurar (aka, trocar a url) em vários dispositivos. E ainda assim, do jeito que está, se amanhã eu resolver usar este script, basta mudar a configuração deste sub-dominio para que ele não seja mais um redirecionamento e sim i A RECORD e os dispositivos nem vão notar a diferença.

        Quanto ao fato do tratamento das credencias cPanel, uma coisa que me passou pela cabeça que melhora um pouco a eminencia de um desastre, é se o seu host permitir a sub-locação de espaço. O DreamHost permite isso, que eu crie uma crie uma sub-conta dentro de minha conta, sendo que esta sub-conta pode ter seu próprio cPanel, com as configurações e serviços determinadas por mim.

        Neste caso é menos pior se puder usar uma sub-conta com o seu cPanel em separado da conta principal, desta forma se alguem interceptar as credenciais, terá acesso somente a esse sub-domínio, onde não terá nada de interessante pra vandalizar. No máximo ele “envenenaria” o IP.

        • Jefferson - 6.543 Comentários

          O Dreamhost permite isso em qualquer conta? O Hostgator só permite isso se eu comprar um “Reseller Plan” que custa no mínimo 25 dólares por mês (conta aluminium). Não está tão caro já que pago 12 dólares pela conta baby, mas ainda assim é o dobro.

          • Luciano - 476 Comentários

            Não sei te dizer exatamente, mas acredito que seja pra qualquer plano host. Não sei lhe dizer, porque eu na verdade o que uso do DreamHost é exatamente um reseller de um amigo que me fornece o espaço para o meu blog. Logo eu tenho acesso a um cPanel meu, separado desse meu amigo que me fornece o espaço.

            Diretamente da Wiki do DreamHost:

            http://wiki.dreamhost.com/Reselling

            Does DreamHost offer a resellers program?

            Reseller dh slice.jpg

            If you have an active account with a hosting plan, you can resell services to clients. There are a few things to consider if you are looking into becoming a reseller:
            You are solely responsible for managing your clients’ accounts yourself.
            There is no re-branding of DreamHost services allowed.
            DreamHost does not bill your clients for you, as you are in charge of billing them directly for the services provided.
            Customer and technical support for your clients must be provided by you.
            As long as you are willing to handle these items yourself for your clients, you can successfully use your DreamHost panel to resell services to your clients.

  • Jefferson - 6.543 Comentários

    Encontrei dois problemas no script.

    1 – A definição do parâmetro TTL na verdade não funciona. Não foi implementada. Por isso removi a checagem do parâmetro

    // Get and validate ttl
    $ttl = $_GET['ttl'];
    if (!is_numeric($ttl) || $ttl < 60)
    	$ttl = 300;
    

    2 – No XAMPP o script retorna um monte de avisos por causa da falta de inicialização da constante DYNDNS_ALLHOSTS, por isso eu acrescentei:

    define('DYNDNS_ALLHOSTS', "");
    
  • Gilberto Alves Rodrigues - 1 Comentário

    Existe uma solução dessas para zPanel?

Clique para comentar
(Prefira clicar em "Responder" se estiver comentando um comentário)

Deixe um comentário

Você pode usar estas tags HTML

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

  

  

  

:) :( ;) O_o B) :lol: :huh: :S :D :-P 8-O :yahoo: :rtfm: :dashhead1: :clapping: more »

DNS Dinâmico: criando seu próprio DDNS no cPanel – Parte 1.

O processo que explico aqui, é inteiramente manual e pouco prático, mas funciona.

Entre no cPanel

Em Domains, escolha Advanced DNS Zone Editor

cpanel_domains_Advanced-DNS-Zone-Editor_ryan.com.br

Digamos que você queira adicionar o host “teste” no domínio “ryan.com.br”:

cpanel_advanced_DNS_zone_editor_640_ryan.com.br

  1. Selecione o domínio. Muitas vezes você tem apenas um mesmo, mas uma conta cPanel pode administrar ilimitados domínios;
  2. Escreva o nome do host. Ao dar ENTER o cPanel preenche o resto;
  3. Preencha o TTL desejado. Recomendo que leia este outro post se estiver incerto quanto ao valor;
  4. O tipo de registro que você deve criar para DDNS é “A” (A RECORD);
  5. Coloque o IP atual do seu dispositivo. Geralmente esse é o IP externo da conexão de banda larga onde o dispositivo está instalado. Se for na conexão onde você está, você pode obter o IP visitando sites como WhatisMyIP.com;
  6. Clique em Add Record.

Imediatamente após adicionar você já pode testar. Um ping para teste.ryan.com.br deve retornar o IP que você colocou em Address.

cPanel_ddns_ping_ryan.com.br

Este processo não é prático porque toda vez que o IP mudar você tem que manualmente atualizar o Address no cPanel. Na segunda parte deste texto eu explico como automatizar isso.

5 comentários
  • Adriano - 1 Comentário

    Muito bom Ryan. Explicação mais que impecável. Aguardando segunda parte do tutorial. :D

  • Ygor Almeida - 136 Comentários

    … Nossa ficou melhor que a encomenda. Tb estou esperando a segunda parte, mas esse salvei já nos favoritos.
    Vai ajudar bastante a fazer umas coisas aqui. rsrsrs

  • Daniel Pácido - 62 Comentários

    Jefferson não sei se você conhece o CloudFlare, ele tem a API fácil de trabalhar você pode criar um script que fica hospedado no Hostgator no seu caso, que vai receber a ordem pra atualizar o IP de cada estação que quiser, e criar um script shell mesmo pra fazer esta consulta pra ver se o IP mudou a cada X minutos e se verificar que mudou envia o novo IP pra este script no seu servidor, já usei uma POG dessas e funcionava muito bem

    • Jefferson - 6.543 Comentários

      Daniel, a única coisa que sabia do cloudflare é que é usado pelo Muambator, Piratebay, entre outros. Como o que estou explicando nessa série de textos também é uma POG eu vou dar uma olhada no funcionamento do serviço free do cloudflare para ver como as gambiarras se comparam.

  • Jefferson - 6.543 Comentários

    Tenho certeza de que todo mundo aqui já notou, mas só para os comentários não ficarem fora de sincronismo com o texto, que eu já editei com o link, aqui está a segunda parte.

Clique para comentar
(Prefira clicar em "Responder" se estiver comentando um comentário)

Deixe um comentário

Você pode usar estas tags HTML

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

  

  

  

:) :( ;) O_o B) :lol: :huh: :S :D :-P 8-O :yahoo: :rtfm: :dashhead1: :clapping: more »

TTL e os serviços de DNS Dinâmico (DDNS)

Este texto foi escrito para dar suporte a outros textos que postarei mais tarde. Eu não estou ainda satisfeito com a minha explicação por isso o texto pode mudar bastante, mas a teoria que tento explicar até onde sei está correta.

Primeiro, vamos fazer uma breve resumo do que constitui um “domínio”…

  • Embora a maioria das pessoas veja um domínio como um servidor, na realidade cada domínio pode ser constituído por um número ilimitado de máquinas ou dispositivos. Cada uma dessas máquinas/dispositivos é chamada de “host” e cada host tem seu endereço IP. Normalmente esses hosts fazem parte da mesma rede particular, mas você também pode fazer com que eles apontem para um dispositivo do outro lado do mundo.

…E do que é DNS e como funciona:

  • A internet é uma rede baseada em IP e só entende números IP mesmo. O fato de você poder escrever “ryan.com.br” em seu browser e chegar ao meu site é resultado de uma série de “artifícios” para poder representar números IP por nomes e o serviço que se encarrega de fazer essa tradução é o DNS;
  • Como não faz sentido perder tempo perguntando repetidas vezes algo que você já sabe, mantemos uma memória (no jargão, “cache”) de que IP corresponde a que nome;
  • Mas como essa relação entre nome e IP pode mudar de uma hora para outra, essa memória precisa ter uma duração finita. Aí entra o TTL.

TTL, do inglês Time To Live (tempo de vida) é o parâmetro que determina a “validade” da resposta do servidor DNS e é parte integrante de todo registro DNS. Se o dispositivo recebe uma resposta do servidor DNS dizendo que o TTL é de x segundos, ele só vai consultar o servidor DNS novamente para aquele host se alguém acessá-lo novamente depois de passados x segundos. Esse parâmetro é praticamente irrelevante no dia a dia, mas você precisa estar atento a ele quando usa qualquer serviço de DDNS.

Serviços de DNS dinâmico como o no-ip costumam ter um TTL de 60 segundos. O valor padrão em um serviço de hospedagem como o Hostgator costuma ser 14400 (4 horas). Não é recomendado baixar para menos que 300 (5 minutos) porque o seu provedor pode não gostar do stress desnecessário no servidor DNS dele. E francamente ele tem razão.

Tenha em mente que entre você e o host que você quer acessar existem diversos servidores DNS ou “caches” secundários, inclusive em cada um dos seus roteadores. Quando você configura manualmente no seu PC ou dispositivo um servidor DNS você passa por cima de vários, mas no mínimo você deve contar com o cache no seu dispositivo, o do servidor DNS que você configurou e qualquer um depois dele.

Para um número “n” de caches TTL DNS no caminho, o tempo de propagação “x” é

TTL >= x <= n * TTL

Então, por exemplo, se existirem 3 caches e o TTL for de 4h, o tempo de propagação (o tempo que leva para o dispositivo que fez a consulta receber uma resposta atualizada) será qualquer coisa entre 4h e 12h.

Se por acaso você fizer seu primeiro teste de DDNS com TTL de 14400 e mudar o IP, mesmo que você baixe o TTL para 300 pode ter que esperar 4 horas ou mais até poder “ver” essa mudança ter efeito.

Confuso? Vamos tentar com um exemplo simples:

Servidor DNS configurado na sua máquina: Google (8.8.8.8)
host que você quer acessar: teste.ryan.com.br, que acaba de ser criado e foi configurado com TTL 14400 (default)

Na primeiríssima vez que você acessar teste.ryan.com.br, o Windows não sabe qual é o IP, mesmo que ele saiba o IP default de “ryan.com.br”, porque se trata de outro “host” e vai perguntar ao servidos DNS configurado (o da Google). O servidor da Google também não faz idéia de quem seja (o hostname acaba de ser criado), por isso vai consultar o servidor DNS que tem autoridade sobre o domínio ryan.com.br. A resposta dirá que o TTL é de 14400, assim o servidor da Google só vai perguntar quem é teste.ryan.com.br novamente em 4 horas. Ele repassa a informação para o Windows, que também vai ver esse TTL de 14400 e só vai perguntar novamente ao servidor da Google em 4 horas. Você pode esvaziar o cache DNS do Windows, forçando-o a perguntar mais cedo, mas o servidor da Google ainda acha que o TTL é de 4 horas e não adianta reduzir o TTL de teste.ryan.com.br para 300 nesse meio tempo, porque o servidor da Google só vai tomar conhecimento da redução do TTL quando o prazo expirar e ele fizer uma nova consulta a pedido de alguém.

Escolher qualquer outro servidor DNS nesse meio tempo, como o do OpenDNS (208.67.222.222 ou 208.67.220.220) ou um serviço de ping remoto (vai depender de que servidor DNS esse serviço usa) pode acelerar o processo de teste.

 

1 comentário
Clique para comentar
(Prefira clicar em "Responder" se estiver comentando um comentário)

Deixe um comentário

Você pode usar estas tags HTML

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

  

  

  

:) :( ;) O_o B) :lol: :huh: :S :D :-P 8-O :yahoo: :rtfm: :dashhead1: :clapping: more »