Actualización de GoDaddy DNS desde linux

Tengo la siguiente configuration:

  1. Un dominio registrado en GoDaddy
  2. Un equipo de enchufe que ejecuta ArchLinuxArm con un IP público dynamic
  3. Dominio actualizado en el Administrador de DNS de GoDaddy para señalar a IP pública del equipo de enchufe

Hasta aquí todo bien. Sin embargo, necesito actualizar automáticamente la IP (estilo DynDns) en GoDaddy DNS Manager si mi ISP decide cambiarlo.

¿Alguna idea de cómo hacerlo?

Actualmente, GoDaddy no proporciona DNS dynamic, y no tiene API para actualizar programáticamente DNS

Según el apoyo de GoDaddy :

… Las modificaciones de DNS a través de scripts no serían posibles con nuestros services de DNS. Estos cambios sólo se pueden realizar desde la interfaz del Administrador de DNS que se proporciona como parte de su count de cliente.

Por lo tanto, necesita un proveedor de 3-rd party para DNS dynamic y tiene las siguientes opciones:

  1. Mueva su dominio al service de alojamiento DNS que es compatible con DNS dynamic (como no-ip.com , mi propia net-me.net y muchos otros ). GoDaddy puede seguir siendo su registrador de dominios, pero utiliza DNS de terceros.

  2. (Más simple) Configuración de cualquier count de DNS dynamic, puede ser de tercer nivel de dominio como yourusername.some-dynamic-dns-provider.net, y configurar un logging DNS CNAME con GoDaddy que apuntará a su nombre de dominio dynamic. Por ejemplo, si tiene www.yourdomain.com CNAME yourusername.some-dynamic-dns-provider.net , todas las requestes de http://www.yourdomain.com serán networkingirigidas por DNS a su dirección IP dinámica. Aunque CNAME logging no se puede crear para el dominio desnudo (yourdomain.com, sin www.).

  3. También puede mover su dominio por completo a otro registrador de dominios, que es compatible con DNS dynamic. (Creo que namecheap.com lo hace.)

Checkout ddclient o INADYN si no pueden hacerlo, tal vez mejor con una solución escrita por usted mismo basada en la API de GoDaddy y aquí hay un enlace a un script que estoy usando para actualizar mi DNS: http://paste.org/ 49922

 #!/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 

Suponiendo que tiene un server que ejecuta Linux y está buscando actualizar un logging DNS A con la IP de su server principal, podría hacer lo siguiente en el server principal. Tenga en count que mi violar su EULA. ¡Asegúrese de seguir las reglas!

  1. Instale Python2.7 (probablemente ya esté instalado).

  2. Coloque el file siguiente en /config/scripts/godaddy_ddns.py . Es la parte que hace el trabajo real de la actualización de godaddy usando la biblioteca pygodaddy. Se actualizará todos los dominios asociados con su count de godaddy. Establecerá un logging A para el comodín de subdominio '@'. Puede editar esto, si desea especificar subdominios alternativos. También debes replace ' @USERNAME@ ' con tu nombre de usuario y ' @PASSWORD@ ' por tu contraseña.

     #!/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. Ejecutar sudo chown root /config/scripts/godaddy_ddns.py

  4. Ejecutar sudo chmod u+x /config/scripts/godaddy_ddns.py
  5. Coloque el file siguiente en /config/scripts/godaddy_ddns.sh . Se trata de una secuencia de commands wrapper que configura un virtualenv para aislar las bibliotecas utilizadas por el script python. A continuación, invoca el script python anterior.

     #!/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. Ejecutar sudo chown root /config/scripts/godaddy_ddns.sh

  7. Ejecutar sudo chmod u+x /config/scripts/godaddy_ddns.sh
  8. Coloque el siguiente file en /etc/cron.hourly/run_godaddy_ddns (sin extensión de file). Esto llamará al script godaddy_ddns.sh cada hora.

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

  10. Ejecutar sudo chmod u+x /etc/cron.hourly/run_godaddy_ddns
  11. Los loggings se escribirán en godaddy.log en el directory /var/local/godaddy_ddns . Este directory se puede cambiar editando el script run_godaddy_ddns.
  12. Coloque el siguiente file en /etc/logrotate.d/godaddy_ddns (sin extensión de file). Esto asegurará que su file de logging no llene su disco, girando el file de logging. Si ha cambiado la location de logging, deberá editar la location del file de logging.

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

Nota de security: probablemente debería editar la run_godaddy_ddns commands run_godaddy_ddns y su a un usuario distinto de root, de modo que la secuencia de commands se ejecute con permissions más limitados.