Esse script usa os bindings Python da Linode API para atualizar uma entrada de DNS. Criei esse script para manter atualizada uma entrada em DNS com o IP da minha conexão doméstica, permitindo assim fácil acesso remoto.
Download
O código fonte de linode-dyndns.py
é distribuído em domínio público.
Você é livre para utiliza-lo e modifica-lo como bem entender. Compartilhe suas
modificações, elas podem ser importantes para outras pessoas também.
Obtenha a versão mais atual no repositório mercurial oficial:
hg clone http://src.ultrav.com.br/linode-dyndns/
Pre-requisitos
O script utiliza o módulo linode-python e precisa de uma chave para API Linode. Você pode criar uma na sessão profile do painel Linode. Também é preciso as IDs do domínio e objeto que você pretende modificar. O pedaço de código abaixo lista todos os domínios e entradas registradas na sua conta Linode:
from linode import api
linode = api.Api('SUACHAVEAPI')
for domain in linode.domain_list():
print domain['DOMAINID'], domain['DOMAIN']
for record in linode.domain_resource_list(domainid=domain['DOMAINID']):
print record['TYPE'], record['NAME'], record['TARGET']
Por fim é necessário a URI de um web service que retorne seu IP em texto puro. No script eu inclui o meu web service, você pode usar algum outro ou hospedar o seu próprio com o script PHP abaixo:
<?php printf("%s", $_SERVER['REMOTE_ADDR']); ?>
Utilização
No painel de controle da Linode, crie uma entrada AAAA no seu domínio com qualquer IP fictício. Acesse seu profile e anote a chave para API Linode.
Utilize o código acima para obter os valores de DOMAIN_ID
e RESOURCE_ID
necessários. Edite o script alterando as variáveis e execute-o sem qualquer
parâmetro:
vinicius@ultrav:/usr/local/bin$ ./linode-dyndns.py
2013-07-07 22:48:23 INFO: Registered IP address is 1.2.3.4, setting to 123.192.131.65
2013-07-07 22:48:25 INFO: IP address successfully updated!
Para automatizar a atualização eu copiei o script para /usr/local/bin
e
criei uma entrada na crontab agendando execução a cada 6 horas:
0 */6 * * * /usr/local/bin/linode-dyndns.py &2>> /tmp/linode-dyndns.log