上(shàng)海(hǎi)專業(yè)光(guāng)纖熔接 小(xiǎo)區(qū)/公寓 OLT機(jī)房(fáng)搭建 FTTH光(guāng)纖入戶 歡迎緻電(diàn)!

  • 公司地(dì)址
    中國(guó),上(shàng)海(hǎi)
  • 聯系電(diàn)話(huà)
    021-59506060

ROS的(de)DNSPOD腳本更新項目

本項目完全免費(fèi)公開(kāi)腳本源碼。
ROS的(de)DNSPOD腳本更新:(2020/04/12更新)
1.可直接對(duì)接DNSPOD官方服務器(qì)進行更新。(無需借助任何第三方服務器(qì),再也不用擔心安全問(wèn)題了!)
2.一個(gè)腳本可以支持IPV4和(hé)IPV6的(de)DDNS更新,填補ROS目前IPV6的(de)DDNS解決方案的(de)空白。
3.檢測子(zǐ)域名不存在時(shí)自(zì)動創建
4.支持域名使用V4+V6雙棧,2個(gè)IP共用一個(gè)域名
5.增加日(rì)志(zhì)記錄流程
6.增加域名ID緩存功能,減少API交互次數
使用條件(jiàn):
1.将ROS系統版本升級到6.45.6或更高(gāo),安裝并啓用IPV6組件(jiàn)。
2.沒有(yǒu)IPV6的(de)環境,無需填寫V6的(de)域名。(mydomains4代表V4的(de)域名,mydomains6代表V6的(de)域名。可以是同一個(gè)域名開(kāi)啓雙棧。)
3.子(zǐ)域名請盡量全部大于3位,如果子(zǐ)域名列表裏同時(shí)存在1.x.com和(hé)11.x.com記錄時(shí)會出現(xiàn)誤判
4.使用V4V6同時(shí)更新的(de)域名,頂級域名必須一緻,否則會因為(wèi)緩存域名ID導緻後續更新失敗
5.不要多個(gè)撥号接口引用這(zhè)同一個(gè)PPP模闆
6.由于目前V6并沒有(yǒu)統一标準,環境不一定兼容,如發現(xiàn)異常可以與我聯系排查。


###程序執行完需要較長(cháng)時(shí)間(jiān),請耐心等待,不要反複執行,建議(yì)放(fàng)在PPP模闆裏ON-UP使用###  
###注意事(shì)項:子(zǐ)域名請盡量全部大于3位,如果子(zǐ)域名列表裏同時(shí)存在1.x.com和(hé)11.x.com記錄時(shí)會出現(xiàn)誤判###  
###注意事(shì)項:使用V4V6同時(shí)更新的(de)域名,頂級域名必須一緻,否則會因為(wèi)緩存域名ID導緻後續更新失敗###  
###定義必須變量#####  
###定義DNSPOD的(de)TOKEN###  
:global mytoken "xxxxx,xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"  
###定義自(zì)己的(de)需更新域名(不需要更新的(de)IP類型留空即可)###  
:global mydomains4 "abc4.123.com"  
:global mydomains6 "abc6.123.com"  
###定義自(zì)己的(de)需更新的(de)撥号接口###  
:global myint "pppoe-out1"  
###以下(xià)內(nèi)容無需修改###  
###預判斷域名是否為(wèi)雙棧###  
:global v4putex ""  
:global v6putex ""  
:if ($mydomains4 = $mydomains6) do={:log error "檢測到當前更新域名使用雙棧。";:global v4putex "&offset=0&length=1";:global v6putex "&offset=1&length=1";}  
:global domainid  
:if ([:len $domainid] =0) do={:global cached 0;:log error "未獲取到緩存的(de)域名ID,執行域名ID獲取步驟。";} else={:global cached 1;:log error "已獲取到緩存的(de)域名ID,跳(tiào)過域名ID獲取步驟。";}  
:if ([:len $mydomains4] >0) do={  
###開(kāi)始IPV4獲取工(gōng)作(zuò),可自(zì)行按需調整###  
:global mydomain41 [:pick $mydomains4 ([:find $mydomains4 "."] +1) [:len $mydomains4]]  
:global mydomain42 [:pick $mydomains4 0 [:find $mydomains4 "."]]  
:global myipv4 [/ip address get [find interface=$myint] address]  
:set myipv4 [:pick $myipv4 0 [:find $myipv4 "/"]]  
###開(kāi)始DNSPOD處理(lǐ)IPV4工(gōng)作(zuò),以下(xià)請勿修改###  
:log error "DNSPOD腳本執行IPV4更新開(kāi)始"  
:global cached  
:if ($cached !=1) do={  
:delay 2s  
:do [/tool fetch url="https://dnsapi.cn/Domain.List" http-data="login_token=$mytoken&format=json&keyword=$mydomain41"]  
:delay 5s  
:global dnspodf [/file get [find name="Domain.List"] contents]}  
:if (([:len [:find $dnspodf "u6210"]] >0) || ($cached != "")) do={  
:if ($cached !=1) do={  
:global mydomain41  
:global dnspodf  
:global fdend [:find $dnspodf $mydomain41]  
:global fdinfo [:pick $dnspodf 0 $fdend]  
:while ([:len [:find $fdinfo "{"]] > 0) do={  
:global fdinfo [:pick $fdinfo ([:find $fdinfo "{"] +1) [:len $fdinfo]]}  
:global fdinfo [:pick $fdinfo 5 [:len $fdinfo]]  
:global fdinfo [:pick $fdinfo 0 [:find $fdinfo ","]]  
:global domainid $fdinfo}  
/file remove [find name="Domain.List"]  
:global domainid  
:do [/tool fetch url="https://dnsapi.cn/Record.List" http-data="login_token=$mytoken&format=json&domain_id=$domainid&sub_domain=$mydomain42&$v4putex"]  
:delay 5s  
:global reprec [/file get [find name="Record.List"] contents]  
:if ([:len [:find $reprec "u7a7a"]] >0) do={  
/file remove [find name="Record.List"]  
:log error "DNSPOD因為(wèi)沒有(yǒu)對(duì)應子(zǐ)域名,嘗試自(zì)己NEW一個(gè)。"  
:global myipv4  
:do [/tool fetch url="https://dnsapi.cn/Record.Create" http-data="login_token=$mytoken&format=json&domain_id=$domainid&sub_domain=$mydomain42&value=$myipv4&record_type=A&record_line=%e9%bb%98%e8%ae%a4" keep-result=no]  
:delay 5s  
:do [/tool fetch url="https://dnsapi.cn/Record.List" http-data="login_token=$mytoken&format=json&domain_id=$domainid&sub_domain=$mydomain42"]  
:delay 5s  
:global reprec [/file get [find name="Record.List"] contents]  
}  
:if ([:len [:find $reprec "u6210"]] >0) do={  
:global dnspodf [/file get [find name="Record.List"] contents]  
:global fdend [:find $dnspodf ("\"".$mydomain42."\"")]  
:global fdinfo [:pick $dnspodf 0 $fdend]  
:while ([:len [:find $fdinfo "{"]] > 0) do={  
:global fdinfo [:pick $fdinfo ([:find $fdinfo "{"] +1) [:len $fdinfo]]}  
:global fdinfo [:pick $fdinfo 6 [:len $fdinfo]]  
:global fdinfo [:pick $fdinfo 0 [:find $fdinfo "\","]]  
:global recordid $fdinfo  
/file remove [find name="Record.List"]  
:global myipv4  
:if ([:len [:find $dnspodf $myipv4]] >0) do={  
:log error ("DNSPOD放(fàng)棄更新,IPV4沒有(yǒu)變化(huà)。")  
} else={  
:do [/tool fetch url="https://dnsapi.cn/Record.Modify" http-data="login_token=$mytoken&format=json&domain_id=$domainid&record_id=$recordid&sub_domain=$mydomain42&value=$myipv4&record_type=A&record_line=%e9%bb%98%e8%ae%a4"]  
:delay 5s  
:global reprec [/file get [find name="Record.Modify"] contents]  
/file remove [find name="Record.Modify"]  
:if ([:len [:find $reprec "u6210"]] >0) do={  
:log error ("DNSPOD更新IPV4成功。當前IPV4為(wèi):".myipv4)  
} else={  
:log error "DNSPOD更新IPV4失敗"  
}}}} else={  
:log error "DNSPOD更新IPV4失敗,檢查TOKEN,域名參數是否正确。"}  
:log error "DNSPOD執行腳本IPV4更新完畢"}  
:if ([:len $mydomains6] >0) do={  
###開(kāi)始IPV6獲取工(gōng)作(zuò),可自(zì)行按需調整###  
:global mydomain61 [:pick $mydomains6 ([:find $mydomains6 "."] +1) [:len $mydomains6]]  
:global mydomain62 [:pick $mydomains6 0 [:find $mydomains6 "."]]  
:global myipv6 [/ip address get [find interface=$myint] address]  
:set myipv6 [:pick $myipv6 0 [:find $myipv6 "/"]]  
###有(yǒu)的(de)朋友(yǒu)這(zhè)裏V6使用release會有(yǒu)問(wèn)題,可更換為(wèi)renew嘗試,和(hé)運營商有(yǒu)關###  
/ipv6 dhcp-client release [find interface=$myint]  
:delay 3s  
:global myipv6 [/ipv6 dhcp-client get [find interface=$myint status=bound] prefix]  
:set myipv6 [:pick $myipv6 0 [:find $myipv6 "/"]]  
###開(kāi)始DNSPOD處理(lǐ)IPV6工(gōng)作(zuò),以下(xià)請勿修改###  
:log error "DNSPOD腳本執行IPV6更新開(kāi)始"  
:global cached  
:if ($cached !=1) do={  
:do [/tool fetch url="https://dnsapi.cn/Domain.List" http-data="login_token=$mytoken&format=json&keyword=$mydomain61"]  
:delay 5s  
:global dnspodf [/file get [find name="Domain.List"] contents]}  
:if (([:len [:find $dnspodf "u6210"]] >0) || ($cached != "")) do={  
:if ($cached !=1) do={  
:global mydomain61  
:global dnspodf  
:global fdend [:find $dnspodf $mydomain61]  
:global fdinfo [:pick $dnspodf 0 $fdend]  
:while ([:len [:find $fdinfo "{"]] > 0) do={  
:global fdinfo [:pick $fdinfo ([:find $fdinfo "{"] +1) [:len $fdinfo]]}  
:global fdinfo [:pick $fdinfo 5 [:len $fdinfo]]  
:global fdinfo [:pick $fdinfo 0 [:find $fdinfo ","]]  
:global domainid $fdinfo}  
/file remove [find name="Domain.List"]  
:global domainid  
:do [/tool fetch url="https://dnsapi.cn/Record.List" http-data="login_token=$mytoken&format=json&domain_id=$domainid&sub_domain=$mydomain62&$v6putex"]  
:delay 5s  
:global reprec [/file get [find name="Record.List"] contents]  
:if ([:len [:find $reprec "u7a7a"]] >0) do={  
/file remove [find name="Record.List"]  
:log error "DNSPOD因為(wèi)沒有(yǒu)對(duì)應子(zǐ)域名,嘗試自(zì)己NEW一個(gè)。"  
:global myipv6  
:do [/tool fetch url="https://dnsapi.cn/Record.Create" http-data="login_token=$mytoken&format=json&domain_id=$domainid&sub_domain=$mydomain62&value=$myipv6&record_type=AAAA&record_line=%e9%bb%98%e8%ae%a4" keep-result=no]  
:delay 5s  
:do [/tool fetch url="https://dnsapi.cn/Record.List" http-data="login_token=$mytoken&format=json&domain_id=$domainid&sub_domain=$mydomain62"]  
:delay 5s  
:global reprec [/file get [find name="Record.List"] contents]}  
:if ([:len [:find $reprec "u6210"]] >0) do={  
:global dnspodf [/file get [find name="Record.List"] contents]  
:global fdend [:find $dnspodf ("\"".$mydomain62."\"")]  
:global fdinfo [:pick $dnspodf 0 $fdend]  
:while ([:len [:find $fdinfo "{"]] > 0) do={  
:global fdinfo [:pick $fdinfo ([:find $fdinfo "{"] +1) [:len $fdinfo]]}  
:global fdinfo [:pick $fdinfo 6 [:len $fdinfo]]  
:global fdinfo [:pick $fdinfo 0 [:find $fdinfo "\","]]  
:global recordid $fdinfo  
/file remove [find name="Record.List"]  
:global myipv6  
:if ([:len [:find $dnspodf $myipv6]] >0) do={  
:log error ("DNSPOD放(fàng)棄更新,IPV6沒有(yǒu)變化(huà)。")  
} else={  
:do [/tool fetch url="https://dnsapi.cn/Record.Modify" http-data="login_token=$mytoken&format=json&domain_id=$domainid&record_id=$recordid&sub_domain=$mydomain62&value=$myipv6&record_type=AAAA&record_line=%e9%bb%98%e8%ae%a4"]  
:delay 5s  
:global reprec [/file get [find name="Record.Modify"] contents]  
/file remove [find name="Record.Modify"]  
:if ([:len [:find $reprec "u6210"]] >0) do={  
:log error ("DNSPOD更新IPV6成功。當前IPV6為(wèi):".myipv6)  
} else={  
:log error "DNSPOD更新IPV6失敗"  
}}}} else={  
:log error "DNSPOD更新IPV6失敗,檢查TOKEN,域名參數是否正确。"}  
:log error "DNSPOD執行腳本IPV6更新完畢"}  


注意:無論是否使用IPV6,都(dōu)需要啓用改組件(jiàn)否則此代碼無法正确執行!