Att sätta den dynamiska IP adressen i vårt system är enkelt. Allt som behövs är ett http anrop:
http://dynamic.name-services.com/interface.asp?command=SetDNSHost&zone=domän&DomainPassword=lösenord
zone: Det namn ni vill ändra IP adress på. Låt säga att ert domännamn är foo.com, då kan ni ange t.ex. hemma.foo.com så sätts den.
DomainPassword: Lösenordet ni har satt för Dynamisk DNS i vår kontrollpanel.
Med hjälp av denna information kan ni prova er fram hur ni kan konfigurera er router så att det fungerar.zone: Det namn ni vill ändra IP adress på. Låt säga att ert domännamn är foo.com, då kan ni ange t.ex. hemma.foo.com så sätts den.
DomainPassword: Lösenordet ni har satt för Dynamisk DNS i vår kontrollpanel.
Kommandot SetDNSHost har också argumentet Address. Med denna kan man sätta en explicit adress, t.ex. Address=192.168.32.11, och då sätts den. Det finurliga med SetDNSHost är att man inte behöver ange Adress om man inte vill. SetDNSHost listar då ut från vilken IP adress anropet kommer och sätter då den adressen.
Manual SetDNSHOST
Exempel i php
Enkelt exempel ni kan utgå från. Scriptet är basalt med i princip inga felkontroller. Scriptet är också skrivet för Linux/Unix, men kan enkelt ändras till att fungera på Windows. Det enda som behöver ändras är vägarna till filerna. Detta skript kan inte användas för sin egen router, detta skall användas om man vill mappa namn mot redan befintliga domännamn.
<?php
# domain:ip
$datafile = "/etc/dyndns-info";
$logfile = "/var/log/dyndns.log";
$newdata = array();
$tarr = file($datafile);
foreach ($tarr as $line) {
list($name,$ip) = split(":",trim($line));
$olddata[$name] = $ip;
$newdata[$name] = $ip;
}
$data = array(
'hkse1.domain.com' => 'hk1.extnet.net',
'hkse3.domain.com' => 'hk1.extnet.net',
'hkse2.domain.com' => 'hk1.extnet.net',
'hknl1.domain.com' => 'hk1.extnet.net',
'hkg1nl2.domain.com' => 'g1.extnet.net',
'hk1.domain2.com' => 'hk1.extnet.net',
'hk1se1.domain2.com' => 'hk1.extnet.net',
'hk1se2.domain2.com' => 'hk1.extnet.net',
'hk1nl1.domain2.com' => 'hk1.extnet.net'
);
$doupdate = false;
foreach ($data as $zone => $name) {
if (checkip($name,$zone)) {
$doupdate = true;
echo "Update zone $zone\n";
}
}
if ($doupdate) {
$fp = fopen($datafile, 'w') or die();
foreach ($newdata as $name => $ip) {
fwrite($fp,"$name:$ip\n");
}
}
function updatezone($zone,$ip) {
global $logfile;
file_put_contents($logfile,
date("c") . "\n" . "Update zone: $zone => $ip\n"
,FILE_APPEND);
$result = file_get_contents("http://dynamic.name-services.com/interface.asp?command=SetDNSHost&zone=$zone&DomainPassword=XXXXXXXXX&Address=$ip");
file_put_contents($logfile,
$result . "\n" .
"===========================================================================\n"
,FILE_APPEND);
}
function checkip ($name,$zone) {
global $olddata;
global $newdata;
$newip = trim(gethostbyname($name));
if (!preg_match("/^[1-9]+/",$newip)) {return false;}
if ($newip != $olddata[$name]) {
$newdata[$name] = $newip;
updatezone($zone,$newip);
return true;
}
return false;
}
?>
