西部数码ddns更新ipv6,通过api实现
·
在西部数码(West.cn)上通过 API 实现 IPv6 的 DDNS(动态域名解析)更新,核心逻辑是:编写脚本获取当前服务器的 IPv6 地址,并调用西部数码的 DNS API 将该地址更新到指定的域名解析记录中。
了解西部数码 API 接口
西部数码主要使用 V2 API 进行 DNS 管理。你需要关注的两个关键接口是:
1. 查询当前解析记录 (GetRecord)
核心逻辑:
获取当前 IPv6
读取上次保存的 IPv6
相同 → 不更新
不同 → 调用西部数码 API
保存新 IPv6
下面是完整版。
import subprocess
import requests
import re
import os
# ==========================
# 配置
# ==========================
DOMAIN = "example.com"
# 完整子域名
HOSTNAME = "home.example.com"
# 西部数码 域名ApiKey
API_DOMAIN_KEY = "你的ApiKey"
# 网卡名称
INTERFACE = "enp2s0"
# 保存上次IP
LAST_IP_FILE = "/tmp/west_ddns_ipv6.txt"
# ==========================
# 获取IPv6
# ==========================
def get_ipv6():
cmd = ["ip", "-6", "addr", "show", INTERFACE]
output = subprocess.check_output(
cmd,
encoding="utf-8"
)
matches = re.findall(
r"inet6 ([0-9a-fA-F:]+)/64 scope global",
output
)
if not matches:
return None
for ip in matches:
# 排除本地链路地址
if ip.startswith("fe80"):
continue
return ip
return None
# ==========================
# 读取旧IP
# ==========================
def load_last_ip():
if not os.path.exists(LAST_IP_FILE):
return None
with open(LAST_IP_FILE, "r") as f:
return f.read().strip()
# ==========================
# 保存IP
# ==========================
def save_last_ip(ip):
with open(LAST_IP_FILE, "w") as f:
f.write(ip)
# ==========================
# 更新DNS
# ==========================
def update_ddns(ipv6):
url = "https://api.west.cn/API/v2/domain/dns/"
params = {
"act": "dnsrec.update",
"domain": DOMAIN,
"apidomainkey": API_DOMAIN_KEY,
"hostname": HOSTNAME,
"record_value": ipv6
}
response = requests.get(
url,
params=params,
timeout=20
)
print("状态码:", response.status_code)
print(response.text)
if response.status_code == 200:
save_last_ip(ipv6)
print("IPv6已保存")
# ==========================
# 主程序
# ==========================
if __name__ == "__main__":
ipv6 = get_ipv6()
if not ipv6:
print("未找到IPv6")
exit(1)
print("当前IPv6:", ipv6)
last_ip = load_last_ip()
print("上次IPv6:", last_ip)
# IP没变化
if ipv6 == last_ip:
print("IPv6未变化,无需更新")
exit(0)
print("IPv6已变化,开始更新DDNS")
update_ddns(ipv6)
- 开机自动运行(推荐)
最稳的是:
systemd
创建:
sudo nano /etc/systemd/system/ddns.service
内容:
[Unit]
Description=West DDNS IPv6
[Service]
ExecStart=/usr/bin/python3 /home/ubuntu/ddns/ddns.py
WorkingDirectory=/home/ubuntu/ddns
Restart=always
[Install]
WantedBy=multi-user.target
启动:
sudo systemctl daemon-reload
sudo systemctl enable ddns
sudo systemctl start ddns
查看:
systemctl status ddns
更多推荐
所有评论(0)