利用DnsPod简单实现域名DDNS

什么是DDNS?
DDNS(Dynamic Domain Name Server)是动态域名服务的缩写!DDNS是将用户的动态IP地址映射到一个固定的域名解析服务上,用户每次连接网络的时候客户端程序就会通过信息传递把该主机的动态IP地址传送给位于服务商主机上的服务器程序,服务项目器程序负责提供DNS服务并实现动态域名解析。

利用DnsPod简单实现域名DDNS

DDNS的作用:

1.目前ISP大多提供动态IP(如拨号上网),我们若想在网际网络上以[2] 自己的网域公布,DDNS提供了解决方案,它可以自动更新用户每次变化的浮动IP,然后将其与网域相对应,这样其他上网用户就可以透过网域来交流了。
2.DDNS可以让我们在自己的或家里架设WEB\MAIL\FTP等服务器,而不用花钱去付虚拟主机租金。
3.主机是自己的,空间可根据自己的需求来扩充,维护也比较方便。有了网域与空间架设网站,FTP 服务器、EMAIL服务器都不成问题。
4.如果您有对VPN的需求,有了DDNS就可以用普通上网方式方便地建立Tunnel。透过网域的方式连结,实现远端管理、远端存取、远端打印等功能。
好了下面小牛云站长来说说如何利用DnsPod来简单的实现域名DDNS的方法:
1.DNSpod免费版TTL最短时间是10分钟,配合宝塔的计划任务,挂个间隔10分钟的任务刚刚好。
效果图

利用DnsPod简单实现域名DDNS

2.计划任务

把脚本放到合适的路径,添加一个10分钟的计划任务
/usr/bin/php /www/wwwroot/dnspod/main.php

利用DnsPod简单实现域名DDNS

3.源代码

<?php
// Dnspod token,获取地址 https://console.dnspod.cn/account/token/token 
$token     = '235678,f485d8729df9397c719e0fe8f5802xxx';//填写你的token

// 需要解析的域名
$domain    = 'xxx.com';

// 解析记录
$record    = 'panel.nas';
$api       = 'https://dnsapi.cn/Record.List';
$post      = [
    'login_token' => $token,
    'format'      => 'json',
    'lang'        => 'cn',
    'domain'      => domain,
];
$record_id = null;
$res       = getCurl($api, ['post' => $post]);
$data      = json_decode($res, true);

// 获取记录ID
foreach ($data['records'] as $itm) {
    if ($record == $itm['name']) {
        $record_id = $itm['id'];
    }
}

if (empty($record_id)) {
    exit("记录 [$record] 未找到,请检查!\n");
}

// 获取公网IP
$ip = file_get_contents('https://www.bt.cn/Api/getIpAddress');
if (empty($ip)) {
    exit("公网IP获取失败 \n");
}

echo "当前公网IP:$ip \n";

// 修改域名A记录
$api  = 'https://dnsapi.cn/Record.Modify';
$post = [
    'login_token' => $token,
    'format'      => 'json',
    'lang'        => 'cn',
    'domain'      => $domain,
    'record_id'   => $record_id,
    'sub_domain'  => $record,
    'record_type' => 'A',
    'record_line' => '默认',
    'value'       => $ip,
    'mx'          => 20,
];
$res  = getCurl($api, ['post' => $post]);
$data = json_decode($res, true);
if ($data['status']['code']) {
    echo "修改成功:{$data['status']['message']} \n";
}

function getCurl($url, $opt = [])
{
    $cookie = '';
    if (is_array($opt['cookie'])) {
        foreach ($opt['cookie'] as $k => $v) {
            $cookie .= $k . '=' . $v . '; ';
        }
    }

    $cookie = (mb_substr($cookie, 0, mb_strlen($cookie) - 2));

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_COOKIE, $cookie);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_ENCODING, '');
    curl_setopt($ch, CURLOPT_HTTPHEADER, ["Expect:"]);
    curl_setopt($ch, CURLOPT_NOBODY, $opt['nobody']);
    curl_setopt($ch, CURLOPT_HEADER, $opt['header'] ?? false);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $opt['headers'] ?? []);
    curl_setopt($ch, CURLOPT_TIMEOUT_MS, $opt['rtime'] ?? 10000);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, $opt['ctime'] ?? 10000);
    curl_setopt($ch, CURLOPT_REFERER, $opt['refer'] ?? 'https://user.qzone.qq.com/');
    curl_setopt($ch, CURLOPT_USERAGENT,
        'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36');
    if (isset($opt['post'])) {
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, is_array($opt['post']) ? http_build_query($opt['post']) : $opt['post']);
    }
    if (isset($opt['proxy']) && is_array($opt['proxy'])) {
        curl_setopt($ch, CURLOPT_PROXY, $opt['proxy']['ip']);
        curl_setopt($ch, CURLOPT_PROXYPORT, $opt['proxy']['port']);
    }
    $res   = curl_exec($ch);
    $error = curl_error($ch);
    $code  = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    if ($opt['detail']) {
        return ['code' => $code, 'error' => $error, 'resp' => $res,];
    }

    return $res;
}
?>
未经允许不得转载:小牛资源网 » 利用DnsPod简单实现域名DDNS

 XnSay
 简介:热爱网络技术的一名草根站长-XnSay

  您阅读这篇文章共花了: 

发表评论

游客
送你一朵小花花~

帅人已评(0)