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");
}
?>
Onderwerp: Dyndns mogelijk via DirectAdmin API bij Vimexx - Pagina 2
Hoi!
Waar vind ik ergens de server_host? Ik heb geen hosting pakket, enkel een domeinnaam bij Vimexx.
Dank!
Tom
Hallo mede gebruikers,
Helaas krijg ik het ook niet werkend. Ik plaats beide bestanden op een webserver die ik thuis heb draaien. Het eerste bestand is het php bestand met het script zoals hier in deze post gemeld met de specifieke gegevens voor toegang tot mijn domeinnaam. Het tweede bestand is httpsocket.php
Op het moment dat ik beide php bestanden op de webserver heb staan en dit benader via de webbrowser dan krijg ik de melding “"Cannot View Dns Record" ["details"]=> string(29) "Domain does not belong to you"". Helaas kan ik deze foutmelding niet herleiden.Is er iemand die het inmiddels wel werkend heeft met deze bestanden? Dit is hetzelfde probleem als Rien V heeft gemeld. Echter is hier geen reactie opgekomen.
Ik heb ook de bestanden van Github geprobeerd (inclusief het credentials.json bestand). Ook hier helaas dezelfde melding.
Is deze functionaliteit misschien geblokkeerd door Vimexx?
Wie o wie kan een helpende hand aanreiken?Groeten, Dion
Hallo allemaal, een nieuwe versie van dit script vind je op https://github.com/brechtwyns/DirectAdmin-DDNS. De code is aangepast zodat IPv4 gebruikt wordt i.p.v. IPv6, wat je toelaat om het A-record te blijven gebruiken.
Deze aanpassing liet mij toe om de DDNS oplossing op een Raspberry Pi te runnen met gebruik van één IP (v4) adres voor mijn thuisnetwerk. Dit overkomt mogelijke problemen met firewall instellingen voor IPv6 adressen (zoals o.a. bij Proximus / Mobile Vikings in België).
Hallo Brecht W, mooi dat het script aangepast is. Alleen krijg ik het niet aan de gang op een Raspberry.
Als afhankelijkheden heb ik geïnstalleerd:
- PHP
- Curl
- Apache
Zijn dit diegene die nodig zijn of missen er nog?Ik heb onderstaande bestanden in folder /opt/dyndns geplaatst (via script "git clone https://github.com/brechtwyns/DirectAdmin-DDNS /opt/dyndns"):
dyndns.php
httpsocket.php
README.md
Het credentials.json heb ik handmatig aangemaakt en dit bestand bevat de gegevens om in te kunnen loggen op DirectAdmin van Vimexx.
Vraag is of dit alle bestanden zijn die nodig zijn?
Welke regel heb jij gebruikt in de Cron job? Ik heb deze gebruikt: */30 * * * * /usr/bin/php /opt/dyndns/dyndns.php
Hoe kan ik controleren op de Raspberry of de Cron job heeft gelopen. Is ergens een log? Kun jij aangeven hoe jij dit monitort?Hopelijk kun je mij en mogelijk ook anderen gebruikers op weg helpen om dit werkend te krijgen. Zou zeer gewaardeerd worden.
Groeten, Dion
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).