使用HTTP方式代替DDNS 构建动态IP的GRE静态隧道

通过DDNSupdate记录虽然是直接更新到DNS同步,但是也会有数分钟的延迟。
即使是1.1.1.1也可能受到劫持缓存的影响
if(1.1.1.1没有受到劫持){cloudflare的DDNS记录是即时生效哒}

but 大陆网路环境复杂啊 60行撸个轮子吧

代码使用PHP+Redis方式缓存IP地址信息 TTL为600s 600s后没有提交一次update是会不见哒

接口地址
https://ddns.xline.app/index.php

Step1 获取Hash
PS:一个Hash对应一个动态IP,例如有3个路由只有其中1个是动态IP接入那么只需要一个Hash用于Update IP
访问 https://ddns.xline.app/index.php?job=newhash
获取一个Hash 并妥善保存它

Step2
使用Curl或什么鬼之类的提交GET
https://ddns.xline.app/index.php?job=xline_ddns_update&hash=你的Hash&address=你UPDATE的地址
会返回新更新的地址

Step3
使用Curl或什么鬼之类的提交GET
https://ddns.xline.app/index.php?job=xline_ddns_get&hash=你的Hash
会返回最新的地址

请确保600s内执行UPDATE一次 不然记录会超时喔

如下是RouterOS的示例脚本
UPDATE侧

:local DDNSHash "你的Hash"
:local DDNSInterface "接口名称"
:local DDNSIP 

:set DDNSIP [ /ip address get [/ip address find interface=$DDNSInterface ] address ] 
:set DDNSIP [ :pick $DDNSIP 0 [ :find $DDNSIP "/" ] ]
:local url "https://ddns.xline.app/index.php?job=xline_ddns_update&hash=$DDNSHash&address=$DDNSIP"
/tool fetch url="$url" mode=https dst-path=("DDNS_XlineAPP_$DDNSInterface")
:delay 1 
:local filestr [ /file get "DDNS_XlineAPP_$DDNSInterface" contents]; 
:local filename [ /file find name="DDNS_XlineAPP_$DDNSInterface.txt"]; 
:log info ("DDNS : 網路介面 " . $DDNSInterface . " 更新 IP 位址 " . $DDNSIP)

获取侧

:local DDNSHash "你的Hash"
:local GREInterface "接口名称"

:local url "https://ddns.xline.app/index.php?job=xline_ddns_get&hash=$DDNSHash"
/tool fetch url="$url" mode=https dst-path=("DDNS_XlineAPP_getaddress_to_$DDNSInterface") 
:delay 1 
:local DDNSIP [ /file get "DDNS_XlineAPP_getaddress_to_$DDNSInterface" contents]; 
:log info ("Get IP = "$DDNSIP)
:local GREIP [ /interface ipip get $GREInterface remote-address ]
:if ( $GREIP != $DDNSIP ) do={
    /interface ipip set $GREInterface remote-address=$DDNSIP
    :log warning ("GRE TUNNEL ADDRESS UPDATE TO " $DDNSIP)
} else={
    :log info ("GRE TUNNEL ADDRESS CHECK PASS")
}

PS: 这玩意不是更新到域名的

添加新评论