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!
-
Instale o Python2.7 (provavelmente já está instalado).
-
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))
-
Executar sudo chown root /config/scripts/godaddy_ddns.py
- Executar
sudo chmod u+x /config/scripts/godaddy_ddns.py
-
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
-
Executar sudo chown root /config/scripts/godaddy_ddns.sh
- Executar
sudo chmod u+x /config/scripts/godaddy_ddns.sh
-
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
-
Executar sudo chown root /etc/cron.hourly/run_godaddy_ddns
- Executar
sudo chmod u+x /etc/cron.hourly/run_godaddy_ddns
- 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.
-
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.