logo NodeSeekbeta

VPS 使用 Duck DNS 配置 DDNS,并设置开机自启动

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。

  • xhj003 佬可以试试ddns-go

你好啊,陌生人!

我的朋友,看起来你是新来的,如果想参与到讨论中,点击下面的按钮!

📈用户数目📈

目前论坛共有63478位seeker

🎉欢迎新用户🎉