Onderwerp: Dyndns mogelijk via DirectAdmin API bij Vimexx - Pagina 3

04-12-2018 19:36

Via de directadmin api kan iedere klant van vimex zijn a records updaten op het moment dat het public ip gewijzigd is. Zo kun je een domeinnaam veilig aan het ip van je (thuis) server hangen.

Link naar httpsocket: https://files.directadmin.com/services/all/httpsocket/

Script:

<?php

include 'httpsocket.php';

$server_login="username";
$server_pass="password";
$server_host="webXXXX.zxcs.nl"; //where the API connects to
$server_ssl="Y";
$server_port=2222;
$domains = ["domein1.nl", "domein2.nl", "domein3.nl", "domein4.nl", "domein5.nl", "domein6.nl"];

$url='http://ipecho.net/plain';
$ch=curl_init();
$timeout=5;

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);

$publicip=curl_exec($ch);

echo ("Public IPV4=".$publicip."\n");

curl_close($ch);

$data = json_decode(file_get_contents("directadminddns.dat"), true);
 
if ($data["publicip"] != $publicip)
{
    echo ("Public IP has changed to $publicip, updating dns...\n"); 

    foreach ($domains as $domain)
    {
 
    $sock = new HTTPSocket;
    if ($server_ssl == 'Y')
    {
        $sock->connect("ssl://".$server_host, $server_port);
    }
    else
    { 
        $sock->connect($server_host, $server_port);
    }
 
    $sock->set_login($server_login,$server_pass);
 
    $sock->query('/CMD_API_DNS_CONTROL',
        array(
            'domain' => $domain,
        ));

    $result = $sock->fetch_parsed_body();
    var_dump ($result);

    $sock->query('/CMD_API_DNS_CONTROL',
        array(
            'domain' => $domain,
            'action' => 'select',
            'arecs0' => 'name='.$domain.'.',
        ));

    $result = $sock->fetch_parsed_body();
    var_dump ($result);

    $sock->query('/CMD_API_DNS_CONTROL',
        array(
            'domain' => $domain,
            'action' => 'add',
            'type' => 'A', 
            'name' => $domain.'.',
            'value'    => $publicip,
        ));


    $result = $sock->fetch_parsed_body();

    }

        $data = array();
    $data["publicip"] = $publicip;
    file_put_contents("directadminddns.dat", json_encode($data));
}
else
{
    echo ("Public IP not changed, no update needed\n");
}
?>
 

 

22-11-2025 11:39
#5472

""ik heb het script nog wat verder aangepast zodat hij nu niet een record toevoegt maar netjes het bestaande record aanpast (of toevoegt als die niet bestaat). Verder heb ik de README nog wat verduidelijkt.
Ik heb geen pull request gedaan omdat ik ook de . achter de subdomain/ARecordName variable heb weggehaald omdat ik het zo netter vind (zie aangepaste ReadMe).

https://github.com/mannte/DirectAdmin-DDNS

""

ik gebruik dit script en wanneer ik deze manual uitvooer in de directory > /opt/dyndns > met de opdracht > php dyndns.php werkt het en krijg ik de uitvoer 

New IPV4: ***.**.170.59

Previous IPV4 is: ***.**.170.59

Public IP has not changed, no update needed

maar volgens mij genereert de cronjob >>  0 * * * * /usr/bin/php /opt/dyndns/dyndns.php

de volgende fout

No credentials.json found!

kan iemand dit verklaren en mij aangevven wat ik fout doe ?

- 5 van 5 sterren -