Adicionando suporte ao Amazon Route 53 no serviço de DNS Dinâmico do pfSense-2.0.1

Estou utilizando o pfSense 2.0.1 como firewall e multiwan router aqui em casa já a algumas semanas em substituição ao meu antigo Peplink 30, e como mencionei algum tempo atrás estou bastante satisfeito com o resultado.

A principal vantagem de utilizar um sistema Open Source é que, se você desejar, você pode customizá-lo, adicionando funcionalidades que ele não possui originalmente, e a parte mais legal de customizar um sistema open source é que você sempre pode disponibilizar suas alterações para os demais usuários do sistema 🙂

E é exatamente esse o objetivo deste post.

Ontem a noite eu decidi migrar o servidor de DNS do meu dominio pessoal (esse aqui do blog) da Dynamic Network Services para o serviço Amazon Route 53 , como podem imaginar o dyndns.com é um serviço de DNS bastante popular e portanto é suportado de forma nativa pelo pfSense, o que infelizmente não acontece com o serviço de DNS da Amazon AWS.

Como eu não encontrei nenhum addon para o pfSense que me permitisse utilizar o Route 53 como meu provedor do serviço de DNS Dinâmico , fiz valer o  velho ditado popular que diz que “a necessidade é a mãe da invenção” e criei o meu.

A versão atual do script, ao contrário da versão original, não faz uso de nenhum aplicativo externo e todas as tarefas envolvidas no processo de atualização são executadas por funções internas do próprio PHP.

Com este módulo você poderá associar qualquer interface do seu pfSense a um registro de DNS no Route 53, e o IP deste seu registro de DNS será atualizado sempre que o IP da interface a qual ele está associado  mudar.

Mas chega de enrolar e vamos ao que interessa.

Se você planeja utilizar este serviço de DNS no seu pfSense você precisará de alguns pré-requisitos:

  • Criar uma conta na Amazon AWS e anotar as suas credenciais de segurança (Access key ID e Secret Access key) ;
  • Habilitar o produto Amazon Route 53;
  • Criar o seu dominio no Route 53 utilizando o AWS Management Console , e anotar o “Hosted Zone ID”;
  • Migrar a delegação de autoridade do seu dominio (ou  subdominio) para os servidores do Route 53;

Instalação do Route53Update

Como o plugin não faz parte da arvore oficial do projeto do pfSense, o processo de instalação será manual.

O arquivo de instalação do plugin está disponivel no seguinte URL:

http://cdn.ebrandi.eti.br/downloads/pfsense_route53update-1.0f.tar.gz

O MD5 do arquivo acima é  78e4161e4c0e6dae7843e54b036b4a39

Para instalar o plugin basta transferir o arquivo acima para qualquer diretório do seu servidor pfSense, descompactá-lo e executar o install.sh que vem dentro do arquivo:

#./install.sh

O script de instação irá executar alguns procedimento simples:

  • Irá criar um backup dos seus diretórios /etc e /usr/local/www no diretório /root/backup_route53update
  • Irá aplicar um patch em alguns arquivos do /etc e do /usr/local/www
  • Irá criar uma entrada no crontab do usuário root para verificar a cada 5 minutos se ocorreu alguma mudança de IP
  • Irá instalar os pacotes ca_root_nss-3.12.4.tbz e php52-hash-5.2.13_3.tbz
  • Irá restartar o crond

Como podem ver não é nada que não pudessem fazer na mão, mas achei que um script para automatizar simplificaria o processo.

Antes de executar o comando acima a tela que você visualizava quando escolhia a opção “Dynamic DNS” dentro do menu “Services” era a seguinte:

Depois que o comando de instalação é executado, você irá notar que será criado uma nova tab com o nome de “Route 53”, como mostra a imagem abaixo:

O uso do plugin é bastante simples e não requer pratica e tão pouco habilidade 🙂 , para criar um registro de DNS no Route 53 basta clicar no icone com o sinal de “+” na tela acima, que você será direcionado para a tela abaixo:

Nesta tela você basicamente irá escolher a interface que deseja associar ao registro de DNS,  você deverá informar na sequência o dominio cadastrado no Route 53, bem como o nome de host (sem o dominio) que deseja atribuir a esta interface.

O próximo campo deve ser preenchido com o TTL desejado (em segundos), por estarmos falando de um registro dinâmico recomendo utilizar um valor baixo (60 ou 120 segundos). O campo seguinte deve ser preenchido com o Zone ID atribuido pelo Route 53 ao seu dominio.

Os próximos 2 campos devem ser preenchidos com as suas credenciais na Amazon AWS. O campo final é destinado a comentários e é opcional.

Uma vez preenchido este pequeno formulário basta clicar no botão SAVE para completar o processo. Ao salvar o registro você será redirecionado a tela anterior, a qual irá exibir o registro que você acabou de criar, como ilustrado abaixo:

Se você der refresh nesta pagina depois de alguns minutos, você irá observar que o campo “Waiting data…” agora exibe o IP atribuido no DNS ao registro que você criou.

O IP pode ser exibido em 2 cores, se ele estiver verde significa que o IP do registro de DNS no Route 53 associado a sua interface de rede é identico ao IP atual da interface.

Se o IP estiver diferente ele será exibido na cor vermelha.

Abaixo você pode ver um exemplo destas duas situações:

Caso o IP da sua interface tenha se alterado e você não queira (ou não possa esperar) pela atualização automatica através do cron, você pode forçar a atualização executando manualmente o comando /etc/rc.dyndns.update

ATENÇÃO: Quando você remove um registro no plugin ele NÃO remove o registro no Amazon Route 53, o seu host continuará existindo até que você faça a remoção do mesmo pelo AWS Management Console. Quando eu tiver tempo (ou necessidade) talvez eu altere a função de delete para remover o registro também no Route 53, se você implementar essa alteração compartilhe-a conosco 🙂

versão 1.0f que disponibilizei hoje (30/03/2012) traz os ajustes necessários para que o registro de DNS no Route 53 seja automaticamente excluído quando o usuário remover o hostname na interface web do pfSense 🙂

O fork do projeto pfSense no github que traz este patch aplicado está disponivel em:

https://github.com/ebrandi/pfsense

Você encontra informações adicionais sobre este patch nos posts que fiz nos forums oficiais do pfSense:

http://forum.pfsense.org/index.php/topic,47732.0.html

e

http://forum.pfsense.org/index.php/topic,47711.0.html

Por hoje era isso pessoal, espero que este plugin seja tão útil a vocês como ele é pra mim 🙂

[ ] ‘s Edson

-= UPDATE 31/03/2012 =-

O pull request que eu enviei para adicionar meu patch ao core to pfSense foi recusado, em resumo os mantenedores do sistema não concordam com a forma como eu implementei o serviço.

Eles não gostaram de eu ter criado um novo tab para o Route 53 dentro da pagina de “Dynamic DNS” , na opinião deles o Route 53 deve ser tratado como um provedor de DNS Dinâmico comum e mesmo necessitando de informações diferentes para ser atualizado não justifica ter uma tela apenas para ele.

Como a funcionalidade que me propus a implementar está 100% funcional para o que eu preciso, não sei se vou ter a paciência necessária para refazer o sistema uma 3.a vez. Posso dizer que é bem frustrante a sensação de “morrer na praia”…

Comments are closed.