Atualizando o GoDaddy DNS do linux [closed]

3

Eu tenho a seguinte configuração:

  1. Um domínio registrado no GoDaddy
  2. Um computador conectado executando o ArchLinuxArm com um IP público dinâmico
  3. Atualizou o domínio no GoDaddy DNS Manager para apontar para o IP público do plug computer

Até aí tudo bem. No entanto, eu preciso atualizar automaticamente o IP (estilo DynDns) no GoDaddy DNS Manager se o meu ISP decidir alterá-lo.

Alguma ideia de como fazer isso?

    
por Alfero Chingono 31.05.2012 / 16:47

3 respostas

5

Atualmente, o GoDaddy não fornece DNS dinâmico e não possui API para atualizar programaticamente o DNS

De acordo com Suporte do GoDaddy :

... DNS modifications through scripts would not be possible with our DNS services. These changes can only be done from within the DNS Manager interface that is provided as part of your customer account.

Assim, você precisa de um provedor terceirizado para DNS dinâmico e tem as seguintes opções:

  1. Mova seu domínio para o serviço de hospedagem DNS que suporta DNS dinâmico (como no-ip.com , meu possui net-me.net , e muitos outros ). O GoDaddy pode continuar sendo o seu registrador de domínio , mas você usa hospedagem DNS de terceiros .

  2. (Mais simples) Configure qualquer conta de DNS dinâmico, pode ser um domínio de terceiro nível como yourusername.some-dynamic-dns-provider.net e configure um registro DNS de CNAME com o GoDaddy que apontará para seu nome de domínio dinâmico . Por exemplo, se você tiver www.yourdomain.com CNAME yourusername.some-dynamic-dns-provider.net , todas as solicitações para www.seudominio.com.br serão redirecionadas pelo DNS para seu endereço IP dinâmico. Embora o registro CNAME não possa ser criado para domínio sem cobertura (yourdomain.com, sem www.).

  3. Você também pode mover seu domínio completamente para outro registrador de domínio, que suporta DNS dinâmico. (Eu acho namecheap.com faz.)

por 31.05.2012 / 17:18
2

Faça o check-out do ddclient ou INADYN se eles não puderem fazer isso, talvez seja melhor com uma solução autogerada baseada na API do GoDaddy e aqui está um link para um script que estou usando para atualizar meu DNS: link

#!/bin/sh

hosts=( 'your.host.tld' )
user='username'
pass_enc='password using base64'
lastipfile='/tmp/lastip'
pass='echo $pass_enc | base64 -d'
myip='dig a myip.opendns.com @resolver1.opendns.com +short'
lastip='cat $lastipfile'

if [ "$myip" != "$lastip" ]; then
  for host in ${hosts[@]};
    do
      URL="https://dyndns.dns-stock.com/?hostname=$host&username;=$user&password;=$pass&myip;=$myip"
      wget -O /dev/null --quiet --no-check-certificate $URL
      echo $myip > $lastipfile
      touch $lastipfile
  done
else
  echo "IP did not change!" > /dev/null
fi
    
por 31.05.2012 / 16:58
2

Supondo que você tenha um servidor executando Linux e esteja procurando atualizar um registro DNS A com o IP do seu servidor doméstico, você pode fazer o seguinte no servidor doméstico. Note que ele viola seu EULA. Certifique-se de seguir as regras!

  1. Instale o Python2.7 (provavelmente já está instalado).

  2. Coloque o seguinte arquivo em /config/scripts/godaddy_ddns.py . É a parte que faz o trabalho real de atualizar godaddy usando a biblioteca pygodaddy. Ele atualizará todos os domínios associados à sua conta godaddy. Ele definirá um registro A para o caractere curinga de subdomínio '@'. Você pode editar isso, se quiser especificar subdomínios alternativos. Você também deve substituir ' @USERNAME@ ' pelo seu nome de usuário godaddy e ' @PASSWORD@ ' pela senha do seu godaddy.

    #!/usr/bin/env python
    
    import logging
    import pif
    import pygodaddy
    
    # Original Source:
    # https://saschpe.wordpress.com/2013/11/12/godaddy-dyndns-for-the-poor/
    # https://github.com/observerss/pygodaddy
    # 
    # Modified by Jeremy Sears (https://stackoverflow.com/users/1240482/jsears)
    
    
    logging.basicConfig(filename='godaddy.log', format='%(asctime)s %(message)s', level=logging.INFO)
    # the "requests" library logs noisily, so turn that off                                                       
    logging.getLogger("requests").setLevel(logging.WARNING)
    
    logging.debug("DEBUG:   Running godaddy_ddns.py");
    
    U="@USERNAME@"                        
    P="@PASSWORD@"                    
    client = pygodaddy.GoDaddyClient()                       
    success = client.login(U,P)                              
    if success:                                                                                      
            logging.debug("DEBUG:   Successfully logged in.")                                        
    else:                                                                                            
            logging.error("ERROR:   Failed to log in to godaddy.com with username: '{0}'.".format(U))
    
    for domain in client.find_domains():                                            
            logging.debug("DEBUG:   Looking up DNS Records for {0}.".format(domain))           
            dns_records = client.find_dns_records(domain)                                      
            public_ip = pif.get_public_ip()                                                    
            logging.debug("DEBUG:   Domain '{0}' DNS records: {1}".format(domain, dns_records))
            logging.debug("DEBUG:   Current Public IP '{0}'.".format(public_ip))
            if len(dns_records) == 0:                                                                  
                    logging.debug("DEBUG:   No existing DNS records found.")                           
            else:                                                                                      
                    logging.debug("DEBUG:   Existing IP in DNS is '{0}'.".format(dns_records[0].value))
    
            if len(dns_records) == 0 or public_ip != dns_records[0].value:                      
                    logging.debug("DEBUG:   Updating A record for domain '{0}'.".format(domain))                                  
                    success = client.update_dns_record("@."+domain, public_ip)                                                    
                    if success:                                                                                                   
                            logging.info("INFO:     Domain '{0}': Successfully set public IP to '{1}'.".format(domain, public_ip))
                    else:                                                                                                                                  
                            logging.error("ERROR:   Domain '{0}': Unable to update public IP to '{1}'.".format(domain, public_ip))                         
            else:                                                                                                                                          
                    logging.info("INFO:     Public IP A record DNS record for domain '{0}' is up to date, and does not need to be updated.".format(domain))
    
  3. Executar sudo chown root /config/scripts/godaddy_ddns.py

  4. Executar sudo chmod u+x /config/scripts/godaddy_ddns.py
  5. Coloque o seguinte arquivo em /config/scripts/godaddy_ddns.sh . Este é um script wrapper que configura um virtualenv para isolar as bibliotecas usadas pelo script python. Em seguida, ele invoca o script python acima.

    #!/bin/sh
    
    # Original Source:
    # https://saschpe.wordpress.com/2013/11/12/godaddy-dyndns-for-the-poor/
    # https://github.com/observerss/pygodaddy
    # 
    # Modified by Jeremy Sears (https://stackoverflow.com/users/1240482/jsears)
    
    OLD_PWD=$PWD
    ROOT_DIR=$(dirname $0)
    if [ -n "$1" ] ; then
        WORKING_DIR=$1
    else
        WORKING_DIR=$ROOT_DIR
    fi
    mkdir -p $WORKING_DIR
    cd $WORKING_DIR
    if [ ! -d .venv27 ] ; then
        curl -O https://pypi.python.org/packages/source/v/virtualenv/virtualenv-1.9.tar.gz
        tar xvfz virtualenv-1.9.tar.gz
        python virtualenv-1.9/virtualenv.py .venv27
    fi
    source .venv27/bin/activate
    pip install -q --upgrade pif pygodaddy
    $ROOT_DIR/godaddy_ddns.py
    deactivate
    cd $OLD_PWD
    
  6. Executar sudo chown root /config/scripts/godaddy_ddns.sh

  7. Executar sudo chmod u+x /config/scripts/godaddy_ddns.sh
  8. Coloque o seguinte arquivo em /etc/cron.hourly/run_godaddy_ddns (sem extensão de arquivo). Isso chamará o script godaddy_ddns.sh a cada hora.

    #!/bin/sh
    
    WORKING_DIR=/var/local/godaddy_ddns
    exec /config/scripts/godaddy_ddns.sh $WORKING_DIR     
    exit 0                                                
    
  9. Executar sudo chown root /etc/cron.hourly/run_godaddy_ddns

  10. Executar sudo chmod u+x /etc/cron.hourly/run_godaddy_ddns
  11. Os registros serão gravados em godaddy.log no diretório /var/local/godaddy_ddns . Esse diretório pode ser alterado editando o script run_godaddy_ddns.
  12. Coloque o seguinte arquivo em /etc/logrotate.d/godaddy_ddns (sem extensão de arquivo). Isso garantirá que seu arquivo de log não encha seu disco, girando o arquivo de log. Se você alterou o local de registro, precisará editar o local do arquivo de registro.

    /var/local/godaddy_ddns/godaddy.log {
        weekly
        missingok
        rotate 12
        compress
        delaycompress
        notifempty
        copytruncate 
        maxage 365                                                       
    }                                                                    
    

Observação de segurança: você provavelmente deve editar o script run_godaddy_ddns e su para um usuário diferente de root, para que o script seja executado com permissões mais limitadas.

    
por 04.03.2015 / 00:51