用PHP搞掂黑群晖IPv6的DNSPod解析【7月23日更新,支持v4和v6】

3 篇文章 0 订阅
1 篇文章 0 订阅

无意中客服给我开了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);
	}
}
?>
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

୧⍢⃝୨ LonelyCoder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值