RouterOS DDNS 配置 (Cloudflare)

最近注册了一个新域名,开始用Cloudflare的DNS了,在网上找到了一个DDNS脚本。

脚本为了防止频繁调用,会在本地记录上一次的IP地址,但是我有多个接口需要做DDNS,而原脚本中的在本地记录上一次IP地址的文件名是写死的

而且每次运行脚本都会产生log,由于我设置的一分钟运行一次,不一会便被log刷屏了

所以我稍微修改了一下 把文件名修改为一个可配置的变量 并且改成了只有更新了IP地址才会记录log 避免了log刷屏

脚本在RouterOS 7.15测试通过

原脚本来自: https://www.51it.wang/ll/1921

################# CloudFlare 变量 #################
# 是否开启debug调试模式
:local CFDebug "false"
# 是否开启CFcloud功能
:local CFcloud "false"

# 修改为有公网IP的接口名称
:global WANInterface "修改成你需要做DDNS的接口"

# 修改为你要ddns的域名,若是二级域名,这里填写完整的二级域名
:local CFdomain "修改成你的域名 如114514.abc.xyz"

# CloudFlare 全局密钥token或者有权限操作解析域名的token
:local CFtkn "这里请新建一个有权限操作域名的token"


# 域名zoneId
:local CFzoneid "Cloudflare面板里面有"
# 要ddns的域名记录id
:local CFid "Cloudflare面板里面F12,下面有教程"

# 记录类型 一般无需修改
:local CFrecordType ""
:set CFrecordType "A"

# 记录ttl值,一般无需修改
:local CFrecordTTL ""
:set CFrecordTTL "120"

# 若你有多个IP需要做DDNS 请为每个脚本修改记录IP的文件名
:local ddnsFileName "ddns1.tmp.txt"

#########################################################################
########################  下面的内容请勿修改 ############################
#########################################################################

################# 内部变量 variables #################
:local previousIP ""
:global WANip ""

################# 构建 CF API Url (v4) #################
:local CFurl "https://api.cloudflare.com/client/v4/zones/"
:set CFurl ($CFurl . "$CFzoneid/dns_records/$CFid");
 
################# 获取或设置以前的ip变量 #################
:if ($CFcloud = "true") do={
    :set WANip [/ip cloud get public-address]
};

:if ($CFcloud = "false") do={
    :local currentIP [/ip address get [/ip address find interface=$WANInterface ] address];
    :set WANip [:pick $currentIP 0 [:find $currentIP "/"]];
};

:if ([/file find name=$ddnsFileName] = "") do={
    :log error "没有找到记录前一个公网IP地址的文件, 自动创建..."
    :set previousIP $WANip;
    :execute script=":put $WANip" file=$ddnsFileName;
    :log info ("CF: 开始更新解析记录, 设置 $CFDomain = $WANip")
    /tool fetch http-method=put mode=https output=none url="$CFurl" http-header-field="Authorization:Bearer $CFtkn,content-type:application/json" http-data="{\"type\":\"$CFrecordType\",\"name\":\"$CFdomain\",\"ttl\":$CFrecordTTL,\"content\":\"$WANip\"}"
    :error message="没有找到前一个公网IP地址的文件."
} else={
    :if ( [/file get [/file find name=$ddnsFileName] size] > 0 ) do={ 
    :global content [/file get [/file find name="$ddnsFileName"] contents] ;
    :global contentLen [ :len $content ] ;  
    :global lineEnd 0;
    :global line "";
    :global lastEnd 0;   
            :set lineEnd [:find $content "\n" $lastEnd ] ;
            :set line [:pick $content $lastEnd $lineEnd] ;
            :set lastEnd ( $lineEnd + 1 ) ;   
            :if ( [:pick $line 0 1] != "#" ) do={   
                #:local previousIP [:pick $line 0 $lineEnd ]
                :set previousIP [:pick $line 0 $lineEnd ];
                :set previousIP [:pick $previousIP 0 [:find $previousIP "\r"]];
            }
    }
}

######## 将调试信息写入日志 #################
:if ($CFDebug = "true") do={
 :log info ("CF: 域名 = $CFdomain")
 :log info ("CF: 前一个解析IP地址 = $previousIP")
 :log info ("CF: 当前IP地址 = $currentIP")
 :log info ("CF: 公网IP = $WANip")
 :log info ("CF: 请求CFurl = $CFurl&content=$WANip")
 :log info ("CF: 执行命令 = \"/tool fetch http-method=put mode=https url=\"$CFurl\" http-header-field="Authorization:Bearer $CFtkn,content-type:application/json" output=none http-data=\"{\"type\":\"$CFrecordType\",\"name\":\"$CFdomain\",\"ttl\":$CFrecordTTL,\"content\":\"$WANip\"}\"")
};
  
######## 比较并更新记录 #####
:if ($previousIP != $WANip) do={
 :log info "开始更新解析记录 $CFDomain ..."
 :log info ("CF: 开始更新解析记录, 设置 $CFDomain = $WANip")
 /tool fetch http-method=put mode=https url="$CFurl" http-header-field="Authorization:Bearer $CFtkn,content-type:application/json" output=none http-data="{\"type\":\"$CFrecordType\",\"name\":\"$CFdomain\",\"ttl\":$CFrecordTTL,\"content\":\"$WANip\"}"
 /ip dns cache flush
    :if ( [/file get [/file find name=$ddnsFileName] size] > 0 ) do={
        /file remove $ddnsFileName
        :execute script=":put $WANip" file=$ddnsFileName
    }
}

获取Token

登录后右上角 点击 我的个人资料

API令牌 -> 创建令牌 -> 编辑区域DNS

这里需要先选择你用来DDNS的域名 然后再继续

完成后直接创建令牌 就会直接生成 生成的API令牌只会显示一次 记得及时保存

然后是获取域名记录id的操作步骤

进入DNS记录界面后 右键点击编辑 并选择检查

aria-controls后面 -dns-edit-row前面 这一部分就是域名记录id


以上步骤完成后 就可以在Winbox里面打开Scheduler了

System -> Scheduler

Interval 我自己设置成了 00:01:00 你也可以根据你的实际需要修改

On Event 如下

/system script run "修改成你设置的脚本名字"
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇