RouterOS 7.x 脚本实现 DNSPod DDNS:3步配置与1分钟定时任务详解

📅 2026/7/11 21:13:24 👁️ 阅读次数 📝 编程学习
RouterOS 7.x 脚本实现 DNSPod DDNS:3步配置与1分钟定时任务详解

RouterOS 7.x 极简DDNS配置:DNSPod API与定时任务实战指南

对于拥有动态公网IP的家庭用户和小型网络管理员来说,保持域名与最新IP地址的同步是个常见需求。RouterOS 7.x作为一款功能强大的路由操作系统,通过其灵活的脚本功能可以轻松实现这一目标。本文将详细介绍如何利用DNSPod的API接口,在RouterOS 7.x上配置高效的动态域名解析(DDNS)系统。

1. 准备工作与环境配置

在开始配置前,请确保您已具备以下条件:

  • 一台运行RouterOS 7.x的路由设备
  • 有效的腾讯云DNSPod账号
  • 已注册的域名并托管在DNSPod
  • 动态公网IP连接(PPPoE或DHCP)

首先,我们需要在DNSPod平台上创建API访问凭证:

  1. 登录腾讯云DNSPod控制台
  2. 进入"账号中心"→"API密钥"
  3. 点击"创建密钥",记录生成的ID和Token组合(格式为ID,Token

注意:Token仅在创建时显示一次,请妥善保存。如遗失需重新创建。

2. 创建DNSPod DDNS脚本

RouterOS的脚本功能是其强大灵活性的核心体现。我们将创建一个能够自动检测IP变化并更新DNSPod记录的脚本。

通过Winbox或WebFig登录RouterOS,按以下步骤操作:

  1. 导航至SystemScripts
  2. 点击"+"按钮添加新脚本
  3. 在"Name"字段输入dnspod-ddns
  4. 将以下脚本代码粘贴到内容区域:
# PPPoE接口名称(根据实际情况修改) :local pppoe "pppoe-out1" # DNSPod Token(替换为您的ID,Token组合) :local token "12345,abcdefghijklmnopqrstuvwxyz" # 域名配置 :local domain "example.com" :local subdomain "www" # 以下内容无需修改 :local dname ($subdomain.".".$domain) :local ipaddr [/ip address get [/ip address find interface=$pppoe] address] :set ipaddr [:pick $ipaddr 0 ([len $ipaddr] -3)] # 获取当前解析记录 :local record [/tool fetch url="https://dnsapi.cn/Record.List" \ http-data="login_token=$token&format=json&domain=$domain&sub_domain=$subdomain&record_type=A" \ as-value output=user] # 提取记录ID和IP :set record ($record->"data") :set record [:pick $record [:find $record "\"records\":"] [:len $record]] :local recordid [:pick $record ([:find $record "\"id\":\""]+6) [:find $record "\",\"ttl"]] :local recordip [:pick $record ([:find $record "\"value\":\""]+9) [:find $record "\",\"en"]] # 比较并更新IP :if ($recordip!=$ipaddr) do={ /tool fetch url="https://dnsapi.cn/Record.Ddns" \ http-data="login_token=$token&format=json&domain=$domain&sub_domain=$subdomain&record_id=$recordid&record_line_id=0&value=$ipaddr" :log info ("[".$dname."] IP已更新为: ".$ipaddr) } else={ :log info ("[".$dname."] IP未变化") }

脚本中的关键参数说明:

参数说明示例值
pppoe外网接口名称pppoe-out1
tokenDNSPod API凭证12345,abcdefghijklmnopqrstuvwxyz
domain主域名example.com
subdomain子域名前缀www或@(表示主域名)

3. 配置定时执行任务

为确保IP变更能被及时检测到,我们需要设置一个定时任务来定期执行上述脚本。

  1. 导航至SystemScheduler
  2. 点击"+"添加新任务
  3. 按以下参数配置:
    • Name:ddns-update
    • Interval:00:01:00(每分钟执行一次)
    • On Event:/system script run dnspod-ddns

提示:对于IP变化不频繁的环境,可将Interval调整为00:05:00(每5分钟)以减少API调用。

4. 验证与故障排除

配置完成后,可以通过以下方式验证DDNS是否正常工作:

  1. 查看脚本执行日志:

    /log print where message~"ddns"
  2. 手动执行脚本测试:

    /system script run dnspod-ddns

常见问题及解决方法:

  • API调用失败:检查Token是否正确,网络是否能访问DNSPod API(https://dnsapi.cn)
  • IP未更新:确认PPPoE接口名称与脚本中配置一致
  • 权限问题:确保脚本有足够权限执行网络请求

5. 高级配置与优化

对于需要更复杂配置的用户,可以考虑以下增强功能:

多域名支持:通过数组和循环实现对多个子域名的同时更新

:local domains {"www"; "home"; "vpn"} :foreach domain in=$domains do={ # 在此插入更新逻辑 }

IPv6支持:修改脚本同时更新AAAA记录

:local recordipv6 [/tool fetch url="https://dnsapi.cn/Record.List" \ http-data="login_token=$token&format=json&domain=$domain&sub_domain=$subdomain&record_type=AAAA" \ as-value output=user]

邮件通知:配置SMTP在IP变更时发送通知

/tool e-mail send to="admin@example.com" \ subject="DDNS更新通知" \ body="域名$dname已更新为$ipaddr"

通过以上步骤,您已经在RouterOS 7.x上建立了一个可靠、高效的动态DNS更新系统。这套方案在实际项目中表现稳定,即使面对网络波动也能确保域名解析的及时更新。