查看: 538|回复: 0

[Mikrotik Ros] RouterOS利用DNSPOD的API接口实现DDNS动态解析

[复制链接]

124

主题

0

回帖

508

积分

管理员

积分
508
发表于 2026-8-22 13:51:59 | 显示全部楼层 |阅读模式
本文主要讲解如何借助DNSPOD的API接口来实现RouterOS的DDNS动态解析。

一、创建Token添加域名
首先域名要在DNSPOD解析,然后在DNSPOD后台开启的API Token。
详细开通API Token教程:https://support.dnspod.cn/Kb/showarticle/tsid/227/

二、PHP制作DNSPOD API动态解析接口
以下是我制作好的php解析接口,支持SSL
解析接口地址:
查询接口:
链接自动生成接口:
HTTP请求方式:
  • POST/GET

请求参数:
  • token(必选)DNSPod Token,格式 "ID,Token",如“12345,3a13a4331549*******127c185368303”
  • domain(必选)域名(如:77bx.com)
  • record(必选)记录名(如:www)
  • record_id(必选)记录名id, 和record二选一
  • ip(可选,默认值为请求来源IPv4)DDNS的IP地址(或者CNAME、MX记录值)
  • line(可选,默认值为默认)线路设置,详细参数请看注1
  • type(可选,默认值为A记录)支持AAAA、CNAME、MX记录
  • format(可选,默认值为xml)xml和json,返回的数据格式

注1:
line参数说明:如&line=cmcc,那么线路就是移动线路,请按照下面的对照表来。
default  =>  默认
ctc  =>  电信
cucc  =>  联通
cernet  =>  教育网
cmcc  =>  移动
ctt  =>  铁通
home  =>  国内
abord  =>  国外
search  =>  搜索引擎
baidu  =>  百度
google  =>  谷歌
youdao  =>  有道
bing  =>  必应
soso  =>  搜搜
sogou  =>  搜狗
qihu  =>  奇虎

示例:

  1. curl -X POST http://api.77bx.com/dnspod -d 'token=id,token&domain=77bx.com&record=www&ip=1.1.1.1&line=ctc&type=A&format=json'
复制代码

返回参考:

  1. {
  2.     "code": "1",
  3.     "message": "Record created success, ip updated",
  4.     "time": "2019-03-08 09:28:34",
  5.     "info": "dnspod-api-php V1.4 By Star.Yu"
  6. }
复制代码

字段说明:
code:状态id编号,1是成功,0是失败,其他的数字请参考DNSPOD的API ID对应的报错
message:本php接口输出的信息
time:访问时间
info:本php接口的版本信息等

安全说明:
1、本接口未记录所有的解析token和解析记录,但是服务器的访问日志会有链接记录(按照政策要求需保存6个月的日志)。虽然有日志但是本接口不提供任何查询。
2、建议使用独立的DNSPOD账号来使用本接口,重要的域名请自建PHP服务器用来解析。由于使用本接口出现的任何安全问题,本人概不负责。这边只能保证本人不会去做任何后门行为。这边建议如果使用了本接口请勤换token
PS:因为有了token可以管理账号下的所有域名。

源代码:
dnspod-api-php Github:https://github.com/77bx/dnspod-api-php
dnspod-api-php Gitee:https://gitee.com/staryu/dnspod-api-php


2024-05-21

修复接口更新IP的时候,直接改变记录名的问题。(不知道官网接口搞什么突然不传sub_domain会默认为@)


ROS脚本:

  1. #PPPoE
  2. :local pppoe "pppoe-out1"

  3. #DDNS Token
  4. :local token "id,token"

  5. #DDNS域名
  6. :local record "www"
  7. :local domain "77bx.com"

  8. #以下不需要修改
  9. :global ipold
  10. :local ipnew [/ip address get [/ip address find interface=$pppoe] address]
  11. :set ipnew [:pick $ipnew 0 ([len $ipnew] -3)]
  12. :if ($ipnew != $ipold) do={
  13. :local url "http://api.77bx.com/dnspod/\?token=$token&ip=$ipnew&domain=$domain&record=$record"
  14. /tool fetch url=$url mode=http keep-result=no
  15. :set ipold $ipnew
  16. log info "DDNS: Sending UPDATE!"
  17. }
复制代码

以上脚本需要修改pppoe(宽带拨号的名称),token,record和domain

注意:ROS可以设置定时1分钟执行一次脚本,脚本中带有ip是否相同判断,相同就不执行;然后是我做的API接口后台中也有ip是否相同的判断,一般不会引起DNSPOD锁域名的情况。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注公众号

相关侵权、举报、投诉及建议等,请发 E-mail:admin@discuz.vip

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.|蜀ICP备17024538号-6

在本版发帖
关注公众号
QQ客服返回顶部