Linode Dynamic DNS

English Version

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:

1
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:

1
2
3
4
5
6
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:

1
<?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:

1
2
3
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:

1
0 */6 * * *  /usr/local/bin/linode-dyndns.py &2>> /tmp/linode-dyndns.log