Portál AbcLinuxu, 5. listopadu 2025 08:32
<?php
//
// DynDNS function script
// Server update local file with IP address
// and when IP address is different then IP address in DNS
// we change it.
//
// v myip je moje IP v mtyp je druh zaznamu A AAAA a v hostname je celá doména něco.moje.cz
$rmt_ip = $_GET["myip"];
$typ = $_GET["mtyp"];
$domena = $_GET["hostname"];
$pole_domena = explode(".", $domena);
// Constants
$login = 'uživatelské jméno do WAPI';
$wpass = 'heslo do WAPI';
// If your DYNDNS host is moje.domena.cz, then $domain = domena.cz and $dyndns_domain = moje
$domain = 'domena.cz';
$dyndns_domain = $pole_domena[0];
$url = 'https://api.wedos.com/wapi/xml';
$timezone = 'Europe/Prague';
// Kontrola typu zaznamu lze upravovat pouze A a AAAA záznamy.
if (($typ != 'A') and ($typ != 'AAAA')) {
echo 'Špatný typ záznamu A či AAAA !';
die();
}
// Check if provided IP is ok
if(!filter_var($rmt_ip, FILTER_VALIDATE_IP)) {
echo "IP adresa není platná! ".$rmt_ip."!";
die();
}
// auth string
date_default_timezone_set($timezone);
$auth = sha1($login.sha1($wpass).date('H', time()));
// request for domain list
$request = '<?xml version="1.0" encoding="UTF-8"?>
<request>
<user>'.$login.'</user>
<auth>'.$auth.'</auth>
<command>dns-rows-list</command>
<data>
<domain>'.$domain.'</domain>
</data>
</request>';
$post = 'request='.urlencode($request);
// curl initialization
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_POST,true);
curl_setopt($ch,CURLOPT_POSTFIELDS,$post);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_TIMEOUT,100);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
$res = curl_exec($ch);
// výpis výsledku na výstup
//echo '<pre>'.htmlspecialchars(print_r($res, true)).'</pre>';
// xml parsing
$ip_addr = '';
$row_id = -1;
$ttl = -1;
$xml = simplexml_load_string(print_r($res, true));
foreach($xml->data->row as $node) {
if (($node->name != $dyndns_domain) or ($node->rdtype != $typ))
continue;
$ip_addr = $node->rdata;
$ttl = $node->ttl;
$row_id = $node->ID;
}
if ($rmt_ip == $ip_addr) {
echo 'IP je stejná nedělám nic.';
die();
}
if ($row_id < 0 || $ttl < 0) {
echo 'Špatné ID nebo DNS záznam či TTL!';
die();
}
// request for change IP address
$request = '<?xml version="1.0" encoding="UTF-8"?>
<request>
<user>'.$login.'</user>
<auth>'.$auth.'</auth>
<command>dns-row-update</command>
<data>
<domain>'.$domain.'</domain>
<row_id>'.$row_id.'</row_id>
<ttl>'.$ttl.'</ttl>
<rdata>'.$rmt_ip.'</rdata>
</data>
</request>';
$post = 'request='.urlencode($request);
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_POSTFIELDS,$post);
$res = curl_exec($ch);
// výpis výsledku na výstup
echo '<pre>'.htmlspecialchars(print_r($res, true)).'</pre>';
?>
A Jak se to používá, prostě si v DNS vytvoříme záznamy A a AAAA bez toho to nefunguje a pak je můžeme měnit pomocí routeru s OpenWRT kde do nastavení /etc/config/ddns dáme:
config ddns 'global' option date_format '%F %R' option log_lines '250' option allow_local_ip '0' config service 'ddns_router_ipv4' option interface 'wan' option use_syslog '2' option use_logfile '1' option username 'user' option password 'heslo' option enabled '1' option domain 'router.moje.cz' option update_url 'https://[USERNAME]:[PASSWORD]@www.server.cz/soukrome/ddns.php?hostname=[DOMAIN]&myip=[IP]&mtyp=A' option use_https '1' option cacert 'IGNORE' option ip_source 'network' option ip_network 'wan' option dns_server '217.31.204.130' config service 'ddns_router_ipv6' option use_ipv6 '1' option username 'user' option password 'heslo' option ip_source 'network' option interface 'wan6' option ip_network 'wan6' option use_syslog '2' option use_logfile '1' option enabled '1' option domain 'router.moje.cz' option update_url 'https://[USERNAME]:[PASSWORD]@www.server.cz/soukrome/ddns.php?hostname=[DOMAIN]&myip=[IP]&mtyp=AAAA' option use_https '1' option cacert 'IGNORE'
Samozřejmě skript můžeš volat odkudkoliv třeba pomocí wget.
wget -t 1 -O /tmp/ddns.html -o /tmp/ddns.err --no-check-certificate --no-proxy --user=user --password=heslo 'https://server.cz/soukrome/ddns.php?hostname=hostname.cz&mtyp=AAAA&myip='$ipv6
Proměnou $ipv6 naplníme před voláním IPv6 adresou kterou stroj dostal tak stejně můžeme po změně parametrů změnit i IPv4 adresu.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.