Giả sử bạn có máy chủ chạy Linux và bạn đang tìm cách cập nhật bản ghi DNS A với IP của máy chủ gia đình của bạn trên DNS được lưu trữ bởi GoDaddy, bạn có thể thực hiện các thao tác sau trên máy chủ gia đình. Lưu ý rằng nó vi phạm EULA của bạn. Hãy chắc chắn rằng bạn làm theo các quy tắc!
Cài đặt Python2.7 (có khả năng đã được cài đặt).
Đặt các tập tin sau tại /config/scripts/godaddy_ddns.py
. Đây là phần thực hiện công việc cập nhật godaddy bằng thư viện pygodaddy. Nó sẽ cập nhật tất cả các tên miền được liên kết với tài khoản godaddy của bạn. Nó sẽ thiết lập một bản ghi A cho ký tự đại diện tên miền phụ '@'. Bạn có thể chỉnh sửa điều này, nếu bạn muốn chỉ định tên miền phụ thay thế. Bạn cũng phải thay thế ' @USERNAME@
' bằng tên người dùng godaddy của bạn và ' @PASSWORD@
' bằng mật khẩu godaddy của bạn.
#!/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))
Chạy sudo chown root /config/scripts/godaddy_ddns.py
- Chạy
sudo chmod u+x /config/scripts/godaddy_ddns.py
Đặt các tập tin sau tại /config/scripts/godaddy_ddns.sh
. Đây là một tập lệnh bao bọc thiết lập một virtualenv để cô lập các thư viện được sử dụng bởi tập lệnh python. Sau đó, nó gọi kịch bản python ở trên.
#!/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
Chạy sudo chown root /config/scripts/godaddy_ddns.sh
- Chạy
sudo chmod u+x /config/scripts/godaddy_ddns.sh
Đặt tệp sau tại /etc/cron.hourly/run_godaddy_ddns
(không có phần mở rộng tệp). Điều này sẽ gọi kịch bản godaddy_ddns.sh mỗi giờ.
#!/bin/sh
WORKING_DIR=/var/local/godaddy_ddns
exec /config/scripts/godaddy_ddns.sh $WORKING_DIR
exit 0
Chạy sudo chown root /etc/cron.hourly/run_godaddy_ddns
- Chạy
sudo chmod u+x /etc/cron.hourly/run_godaddy_ddns
- Nhật ký sẽ được ghi
godaddy.log
vào /var/local/godaddy_ddns
thư mục. Thư mục này có thể được thay đổi bằng cách chỉnh sửa tập lệnh run_godaddy_ddns.
Đặt tệp sau tại /etc/logrotate.d/godaddy_ddns
(không có phần mở rộng tệp). Điều này sẽ đảm bảo rằng tệp nhật ký của bạn không lấp đầy đĩa của bạn, bằng cách xoay tệp nhật ký. Nếu bạn thay đổi vị trí ghi nhật ký, bạn sẽ cần chỉnh sửa vị trí tệp nhật ký.
/var/local/godaddy_ddns/godaddy.log {
weekly
missingok
rotate 12
compress
delaycompress
notifempty
copytruncate
maxage 365
}
Bạn cũng sẽ cần thêm bản ghi CNAME trong trình quản lý miền GoDaddy để trỏ ' www
' đến ' @
'