ROS cloudflare DDNS相关脚本
ROS cloudflare DDNS相关脚本
内容大体摘自iok
一、 ROS 环境下Cloudflare API 更新动态IP地址脚本
Cloudflare是一家CDN,我的域名都托管在CF上,代理转发速度不算最快,但免费、功能强、可配置程度高,非常推荐使用!
脚本内需要用到CF上多个参数,需登录cloudflare网站获取。
登录cloudflare网站,获取到Zone ID 、 Global API Key 、 Record ID (需要使用前两者来获取)
登录到CF,在定义动态域名建立的A记录时,要关闭小云朵,(如开启小云朵,刚执行脚本B)在托管的域名首页(Overview)右下角找到 Zone ID 记录下来
通过验证身份后就会看到以下API KEY了,复制记录下来
要通过下面代码取得 Record ID
找一台Linux的机子命令行状态上执行以下指令,注意{}中的参数按你自己的实际情况填写,然后把{}去除。
curl -X GET “https://api.cloudflare.com/client/v4/zones/{ZONE_ID}/dns_records“
-H “x-auth-email:{YOUR_EMAIL@gmail.com}”
-H “x-auth-key:{YOUR_GLOBAL_API_KEY}”
-H “content-type: application/json”
得到数值中含有Record ID,如下:
{“result”:{“id”:”Record ID**”,”type”:”A”,”name”:”www…….}
以下脚本直接复制到ROS -> ppp -> Scripts -> up on 框里,
:delay 30s
:global cfu do={
:local cfi “Zone ID”;
:local cfr “Record ID”;
:local cfe “CF Account Email”;
:local cfk “Global_API_KEY”;
:local cfd “用来解析公网IP的完整域名”;
:local currentIP [/ip address get [/ip address find interface=CT_dial ] address];
:local cfa [:pick $currentIP 0 [:find $currentIP “/“]];
/tool fetch mode=https
http-method=put
url=”https://api.cloudflare.com/client/v4/zones/$cfi/dns_records/$cfr"\
http-header-field=”content-type:application/json,X-Auth-Email:$cfe,X-Auth-Key:$cfk”
http-data=”{"type":"A","name":"$cfd","content":"$cfa"}”
output=none
}
$cfu
说明:
此脚本将在拨号成功后30秒执行一次,不会重复执行。
红字部分的参数在CF上提取并填入;这里特别说明cfe和cfr 的关系,cfr的值对应cfd ,即每个前缘的Record ID是不一样的,例如:abc.xxx.eu.org 和 123.xxx.eu.org 的cfr值是不一样的,这个要搞清楚。
确定是否开启CDN代理转发,开启CDN代理转发时,即开启小云朵,当访问”用来解析公网IP的完整域名”时候是经过CDN代理再转发到你本地的公网IP地址,即解析出来的IP地址是CDN代理的IP地址(使用脚本B);如关闭该选项,访问”用来解析公网IP的完整域名”时直接解析是你现时的公网IP地址,使用上面的脚本即可。
脚本B:
:delay 30s
:global cfu do={
:local cfi “Zone ID”;
:local cfr “Record ID”;
:local cfe “CF Account Email”;
:local cfk “Global_API_KEY”;
:local cfd “用来解析公网IP的完整域名”;
:local currentIP [/ip address get [/ip address find interface=CT_dial ] address];
:local cfa [:pick $currentIP 0 [:find $currentIP “/“]];
:local cfp true;
/tool fetch mode=https
http-method=put
url=”https://api.cloudflare.com/client/v4/zones/$cfi/dns_records/$cfr"\
http-header-field=”content-type:application/json,X-Auth-Email:$cfe,X-Auth-Key:$cfk”
http-data=”{"type":"A","name":"$cfd","content":"$cfa","proxied":$cfp}”
output=none
}
$cfu
二、ROS环境下changeip.com 更新动态IP地址脚本
以下脚本直接复制到ROS -> ppp -> Scripts -> up on 框里
:delay 30s
:global ddnsuser “username”
:global ddnspass “password”
:global ddnshost “Dynamic domain name”
:global ddnsinterface “PPP Interface name”
:global ddnssystem (“mt-“ . [/system package get [/system package find name=system] version] )
:global ddnsip [ /ip address get [/ip address find interface=$ddnsinterface] address ]
:global ddnslastip
:if ([:len [/interface find name=$ddnsinterface]] = 0 ) do={ :log info “DDNS: No interface named $ddnsinterface, please check configuration.” }
:if ([ :typeof $ddnslastip ] = “nothing” ) do={ :global ddnslastip 0.0.0.0/0 }
:if ([ :typeof $ddnsip ] = “nothing” ) do={
:log info (“DDNS: No ip address present on “ . $ddnsinterface . “, please check.”)
} else={
:if ($ddnsip != $ddnslastip) do={
:log info “DDNS: Sending UPDATE!”
:log info [ :put [/tool dns-update name=$ddnshost address=[:pick $ddnsip 0 [:find $ddnsip “/“] ] key-name=$ddnsuser key=$ddnspass ] ]
:global ddnslastip $ddnsip
} else={
:log info “DDNS: No changes necessary.”
}
}
说明:
PPP Interface name 这里是填入你pppoe拨号的名称,即你的宽带账号,非Interfaces 里WAN口的名称,填错了抓不到公网IP地址。
最后跟前面的教程一下把该本脚本定时执行即可!