利用API自动更新腾讯dnspod子域名解析记录实现ddns
动态更新IP地址的方法
由于个人网络是动态IP地址,导致每次重启路由器都会更换IP地址,或者是租约到期也会更新IP地址。更换IP地址后每次都需要重新设置dnspod,假如设置不及时还可能会影响到个人搭建的某些服务。所以当时我就在想有没有办法实现定期查询本地IP地址与dnspod记录IP地址是否相同,相同则不进行任何操作,不同则自动上报更新IP地址。于是乎有了下面这个利用dnspod的API实现动态更新IP地址的方法。
优缺点
优点:
定期自动查询比对IP地址是否相同,相同则不做任何操作,不同则自动上报并修改。省去了人为修改不及时导致服务出现异常。
缺点:
需要有一台公网固定IP的服务器进行搭建API,增加了费用开支。如果有需求的话可以评论留言我提供给你API。(我之所以自己搭建是因为本地有一个4T的私人网盘,使用OOS、COS或VPS存储空间太贵)
使用方法
- 一台固定公网服务器搭建web服务,并把以下API代码部署到服务器。
- 需要到腾讯DNSPOD官网申请SecretKey、SecretId,调用API会用到。申请网址:https://console.cloud.tencent.com/cam/capi
- 去DNSPOD创建需要动态DDNS解析的子域名。
- 设置ddns.php里面的SecretId(line:22 or 54)、SecretKey(line:25 or 57)、主域名(line:89)、记录类型(line:91 默认为A记录)、token(line:16 可空,用来防止域名被恶意解析)。
API调用方法
API调用方法为 ddns.php?token=xxxxxxxxxx&subDomain=pan
ddns.php 代码
<?php
$Ip = getIP();
function getIP()
{
global $ip;
if (getenv("HTTP_CLIENT_IP"))
$ip = getenv("HTTP_CLIENT_IP");
else if(getenv("HTTP_X_FORWARDED_FOR"))
$ip = getenv("HTTP_X_FORWARDED_FOR");
else if(getenv("REMOTE_ADDR"))
$ip = getenv("REMOTE_ADDR");
else
$ip = "Unknow";
return $ip;
}
if ($_GET['token'] == "") {
function ddns($domain,$recordId,$subDomain,$Type,$Line,$Value,$recordValue){
$url = "https://cns.api.qcloud.com/v2/index.php";
$Action = "RecordModify";
$Nonce = rand(100000,500000);
$SecretId = "";
$SignatureMethod = "HmacSHA1";
$Timestamp = time();
$SecretKey = "";
//生成签名串
$srcStr = "GETcns.api.qcloud.com/v2/index.php?Action=$Action&Nonce=$Nonce&Region=&SecretId=$SecretId&SignatureMethod=$SignatureMethod&Timestamp=$Timestamp&domain=$domain&recordId=$recordId&recordLine=$Line&recordType=$Type&subDomain=$subDomain&value=$Value";
$signStr = urlencode(base64_encode(hash_hmac('sha1',$srcStr,$SecretKey,true)));
//修改域名解析记录
$url = "$url?Action=$Action&Nonce=$Nonce&Region=&SecretId=$SecretId&SignatureMethod=$SignatureMethod&Timestamp=$Timestamp&domain=$domain&recordId=$recordId&recordLine=$Line&recordType=$Type&subDomain=$subDomain&value=$Value&Signature=$signStr";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url); //设置访问的url地址
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
$result = curl_exec($ch); //域名转入成功后做json解析,解析请求结果并返回。
curl_close ($ch);
$result = json_decode($result,true);
$code = $result['code'];
if ($code == 0) {
echo "子域名:$subDomain.$domain"."IP地址更新成功:</br>原IP地址为:$recordValue</br>新IP地址为:$Value";
} else {
echo "错误码:".$result['code']."</br>";
echo "错误信息:".$result['message'];
}
}
function getRecordId($subDomain,$domain){
$url = "https://cns.api.qcloud.com/v2/index.php";
$Action_List = "RecordList";
$Nonce = rand(100000,500000);
$SecretId = "";
$Timestamp = time();
$SecretKey = "";
//生成签名串
$srcStr = "GETcns.api.qcloud.com/v2/index.php?Action=$Action_List&Nonce=$Nonce&SecretId=$SecretId&Timestamp=$Timestamp&domain=$domain";
$signStr = urlencode(base64_encode(hash_hmac('sha1',$srcStr,$SecretKey,true)));
//获取recordId
$url = "$url?Action=$Action_List&Nonce=$Nonce&SecretId=$SecretId&Timestamp=$Timestamp&Signature=$signStr&domain=$domain";
//修改域名解析记录
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url); //设置访问的url地址
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
$result = curl_exec($ch); //域名转入成功后做json解析,解析请求结果并返回。
curl_close ($ch);
$result = json_decode($result,true);
$Data = $result['data']['records'];
$num = count($Data);
for ($i = 0; $i < $num; $i++) {
if ($Data[$i]['name'] == $subDomain) {
$Id = $Data[$i]['id'];
$Name = $Data[$i]['name'];
$Value = $Data[$i]['value'];
}
}
return array($Id,$Name,$Value);
}
$domain = "mxin.co";
$subDomain = $_GET['subDomain'];
$Type = "A";
$Line = "默认";
$Value = $Ip;
getRecordId($subDomain,$domain);
list($recordId,$recordName,$recordValue) = getRecordId($subDomain,$domain);
if ($recordValue != $Value) {
ddns($domain,$recordId,$subDomain,$Type,$Line,$Value,$recordValue);
} else {
echo "子域名:$subDomain.$domain"."无需更新IP地址。</br>原IP地址为:$recordValue</br>新IP地址为:$Value";
}
} else {
header('content-type:text/html;charset=uft-8');
header('location:https://em.mxin.moe');
}
?>
铭心》原创,转载请保留文章出处。
本文链接:https://em.mxin.moe/dnspod_ddns.html
版权声明:若无特殊注明,本文为《正文到此结束
匿名