https://notes.bosschat.de/s/eyKcpxlYU83m 教程地址
VPS 使用 Duck DNS 配置 DDNS,并设置开机自启动
本文以 Ubuntu/Debian 系统为例,使用 Duck DNS 免费 DDNS 服务,并通过 systemd timer 实现开机自启动和每 10 分钟自动刷新一次 IP。
1. 准备 Duck DNS 域名和 Token
访问:
https://www.duckdns.org/
登录后创建一个子域名,例如:
myvps.duckdns.org
然后记下页面上的 token。
后面命令中需要替换:
你的子域名:myvps
你的 Token:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
注意:Duck DNS 的 domains 参数只填写子域名前缀,不需要写 .duckdns.org。
2. 安装 curl
sudo apt update
sudo apt install -y curl
3. 创建 Duck DNS 更新脚本
创建目录:
sudo mkdir -p /opt/duckdns
sudo mkdir -p /var/log/duckdns
创建脚本:
sudo nano /opt/duckdns/duckdns.sh
写入以下内容:
#!/bin/bash
DOMAIN="myvps"
TOKEN="你的DuckDNS_TOKEN"
curl -fsS "https://www.duckdns.org/update?domains=${DOMAIN}&token=${TOKEN}&ip=" \
-o /var/log/duckdns/duckdns.log
保存后添加执行权限:
sudo chmod 700 /opt/duckdns/duckdns.sh
手动测试一次:
sudo /opt/duckdns/duckdns.sh
cat /var/log/duckdns/duckdns.log
如果输出:
OK
说明更新成功。
4. 创建 systemd Service
创建服务文件:
sudo nano /etc/systemd/system/duckdns.service
写入:
[Unit]
Description=Update Duck DNS DDNS record
After=network-online.target
Wants=network-online.target
[Service]
Type=oneshot
ExecStart=/opt/duckdns/duckdns.sh
5. 创建 systemd Timer,每 10 分钟刷新一次
创建定时器文件:
sudo nano /etc/systemd/system/duckdns.timer
写入:
[Unit]
Description=Run Duck DNS update every 10 minutes
[Timer]
OnBootSec=2min
OnUnitActiveSec=10min
Persistent=true
[Install]
WantedBy=timers.target
说明:
OnBootSec=2min 开机 2 分钟后执行第一次更新
OnUnitActiveSec=10min 每次执行后间隔 10 分钟再次执行
Persistent=true 如果系统关机期间错过任务,开机后会补跑
6. 启用并启动定时器
重新加载 systemd:
sudo systemctl daemon-reload
启用开机自启动并立即启动:
sudo systemctl enable --now duckdns.timer
查看定时器状态:
systemctl status duckdns.timer
查看下一次执行时间:
systemctl list-timers | grep duckdns
手动执行一次服务:
sudo systemctl start duckdns.service
查看执行日志:
journalctl -u duckdns.service -n 50 --no-pager
7. 验证域名解析
可以使用:
ping myvps.duckdns.org
或者:
dig myvps.duckdns.org
如果解析出的 IP 是当前 VPS 的公网 IP,说明 DDNS 已经配置成功。
8. 安全提醒
TOKEN 等同于 Duck DNS 的更新密钥,不要公开。
脚本权限建议保持为:
sudo chmod 700 /opt/duckdns/duckdns.sh
这样普通用户无法直接读取脚本中的 Token。
佬可以试试ddns-go