无意中客服给我开了ipv4的公网,那就继续写个ipv4的,哈哈~~增加IPV4的A记录更新,可以同时更新A记录和AAAA记录
源码不放了,毛点积分哈哈,下载点这里 https://download.csdn.net/download/alinathz/86248707
=============================================================================================
最近在玩黑群晖,所以有段时间没更新了,黑裙真的没点知识的还真玩不起来。
昨晚在家里虚拟机测试了用sh脚本来搞DNSPod解析,今天在物理机上发现不能用~~~~wocao…仔细看了下记录,发现物理机里的wget版本过低,没法用TLSv1_2,尝试了用ipkg安装wget-ssl,发现也是没卵用,因为安装下来的版本还是没法用TLSv1_2,准备放弃的时候灵光一闪,直接用php来处理完事。
先简单说一下:php文件只支持腾讯云的DNSPod,也只支持IPv6,v4的就用群晖自带的吧。本帖最下面提供DNSPod.php文件下载和源码,积分有多的点下载给个1分,哈哈~,步骤如下:
1、如果你的域名在腾讯云,直接登录域名解析控制台,添加一个AAAA记录(ipv6)的子域名;
2、进入 API秘钥,创建秘钥,然后把ID和TOKEN记录下来。
3、下载 DNSPod.php,修改最上面的3个变量:
如API的ID为:123456
TOKEN为:fgd897dfg789sdgahu43jkfg89dj4332g
主域名:126.com
子域名:mail
填写如下:
$token = '123456,fgd897dfg789sdgahu43jkfg89dj4332g';
$domain = '126.com';
$sub_name = 'mail';
4、用黑群晖里面的File Station把修改好的DNSPod.php上传到 home 目录下,也可以上传到你自己的目录,自己能找到就行,随意!
5、打开 控制面板 =》信息中心 =》任务计划
6、新增 =》 计划的任务 =》用户定义的脚本
7、在计划选项卡中,设置运行频率:每5分钟,最后运行时间:23:55
8、在任务设置选项卡中设置脚本命令:php /volume1/homes/你的用户名/DNSPod.php
9、最后,最后当然是点确定啦!!然后如果想看结果,可以查看计划任务的日志,或者用SSH登录到群晖,直接运行php /volume1/homes/你的用户名/DNSPod.php查看结果。
SSH登录后运行的结果:
好了,不用在担心找不到你的nas了!!!
下载 :DNSPod.php
源码如下:
<?php
/**
*
* 只支持 腾讯云DNSPod,同时也只支持IPV6
*
* 将该php文件上传到群晖,然后添加到任务计划即可
* 详细使用方法和疑问,请访问:https://blog.csdn.net/alinathz/article/details/125602194
*
*
* 修改下面3个变量即可
* $token 为接口的 id,token(中间用英文逗号相连)
* $domain 为主域名
* $sub_name 为子域名前缀,如mail.126.com,则改为mail
*/
$token = '123456,fgd897dfg789sdgahu43jkfg89dj4332g';
$domain = '126.com';
$sub_name = 'mail';
$dns = new DdnsPod($token,$domain,$sub_name);
$dns->dnsCheck();
/**
* DDNSPOD 类
*/
class DdnsPod{
private $token, $domain, $sub_name;
public function __construct($token,$domain,$sub_name)
{
$this->token = $token;
$this->domain = $domain;
$this->sub_name = $sub_name;
}
/**
* [检查更新dns]
* @return [type] [description]
*/
public function dnsCheck(){
$localIp = $this->getIpv6();
$dnsInfo = $this->dnsInfo();
echo "###########################################################################".PHP_EOL;
echo '# 设备地址:'.$localIp.PHP_EOL;
echo '# 解析记录:'.$this->sub_name.'.'.$this->domain.' => '.$dnsInfo['ip'].PHP_EOL;
if ($localIp == $dnsInfo['ip']) {
echo '# 处理结果:当前设备地址与解析记录一致,无须更新...'.PHP_EOL;
}else{
$rs = $this->dnsUpdate($dnsInfo['id'], $localIp);
if ($rs['code'] == '1') {
echo '# 处理结果:更新成功...'.PHP_EOL;
echo '# 修改记录:'.$this->sub_name.'.'.$this->domain.' => '.$localIp.PHP_EOL;
}
}
echo "###########################################################################".PHP_EOL;
}
/**
* [更新dns]
* @return [type] [description]
*/
public function dnsUpdate($id, $ip){
$str = 'domain='.$this->domain.'&record_id='.$id.'&sub_domain='.$this->sub_name.'&record_type=AAAA&record_line=默认&value='.$ip;
list($httpCode, $response) = $this->apiPost('Record.Modify', $str);
$json = json_decode($response, true);
if ($json['status']['code'] == '1') {
return ['code' =>$json['status']['code'], 'msg'=>$json['record']['value']];
}else{
return ['code' =>$json['status']['code'], 'msg'=>$json['status']['message']];
}
}
/**
* [获取公网ipv6]
* @return [字符串] ipv6字符串
*/
public function getIpv6(){
exec("ifconfig", $out, $stats);
foreach($out as $value){
$tmp = explode('inet6 addr:',$value);
$tmp1 = explode(':',trim($tmp[1]));
if ($tmp1[0] != 'fe80' && !empty($tmp1[0])) {
list($ipv6) = explode('/', trim($tmp[1]));
return $ipv6;
}
}
}
/**
* [获取dns信息]
* @return [数组] id,type,ip,name
*/
public function dnsInfo(){
$str = 'domain='.$this->domain.'&sub_name_domain='.$this->sub_name.'&record_type=AAAA';
list($httpCode, $response) = $this->apiPost('Record.List', $str);
$json = json_decode($response, true);
if ($json['status']['code'] != '1') {
echo '错误:'.$json['status']['message'].PHP_EOL;
exit();
}else{
if (count($json['records']) > 0) {
$rs = '';
foreach($json['records'] as $key => $value){
if ($value['type'] == 'AAAA' && $value['name'] == $this->sub_name) {
$rs = ['id' => $value['id'], 'type'=>$value['type'], 'ip'=>$value['value'], 'name'=> $value['name']];
continue;
}
}
if (!empty($rs)) {
return $rs;
}else{
echo '错误:找不到域名 '.$this->sub_name.'.'.$this->domain.' 的AAAA记录...'.PHP_EOL;
exit();
}
}else{
echo '错误:找不到域名 '.$this->sub_name.'.'.$this->domain.' 的AAAA记录...'.PHP_EOL;
exit();
}
}
}
/**
* [apiPost description]
* @param [字符串] $handler [操作]
* @param [字符串] $parameter [参数]
* @return [数组]
*/
public function apiPost($handler, $parameter)
{
$url = 'https://dnsapi.cn/'.$handler;
$parameter = 'login_token='.$this->token.'&format=json&'.$parameter;
$ch = curl_init();
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $parameter);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
return array($httpCode, $response);
}
}
?>