PHP Skript für DNS Update

Status
Für weitere Antworten geschlossen.

mexx81

Benutzer
Mitglied seit
17. Dez 2013
Beiträge
597
Punkte für Reaktionen
0
Punkte
42
Hallo,

ich habe eine DS1813+ mit DSM 6, fester IP und diverse Domains. Ich möchte ein bisschen "rumspielen" und habe für einer meiner festen Domains den Nameserver auf meinen DNS Server geändert. Funktioniert! Abfragen von Ressourceneinträgen zur Domain, werden von meinen DNS Server beantwortet.

Nun möchte ich gerne wissen, wie ich per PHP Skript A-Records für Subdomains setzten kann. Skript-Know-How und grundlegende Kennwtnisse in der Programmierung habe ich, jedoch nicht für PHP. Kann mir jemand helfen, ein einfaches Update Skript auf die Beine zu stellen, welches Ressourceneinträge erzeugt?

Vielen Dank,
mexx
 

dany

Benutzer
Mitglied seit
31. Mrz 2008
Beiträge
352
Punkte für Reaktionen
0
Punkte
22

mexx81

Benutzer
Mitglied seit
17. Dez 2013
Beiträge
597
Punkte für Reaktionen
0
Punkte
42
Ich versuche das PHP Skript und komme zu folgenden Ergebnis. Am ende füllt es eine temporäre Datei mit den Befehlen für nsupdate. Die Befehle werden am Ende ausgeführt und sehen so aus.

zone %meine_zone.de%
update delete %test_subdomain%.%meine_zone.de% A
update add %test_subdomain%.%meine_zone.de% 3600 A %WAN_IP%
send

Es wird kein Record gesetzt. Führe ich die Befehle per SSH manuall aus, erhalte ich nach den send die Fehlermeldung: update failed: REFUSED

Ich recheriere weiter, wieso es nicht geht, aber vielleicht hat jemand eine Idee.
 

dany

Benutzer
Mitglied seit
31. Mrz 2008
Beiträge
352
Punkte für Reaktionen
0
Punkte
22
Du musst 127.0.0.1 zur Erlaubtliste hinzufügen.
 

mexx81

Benutzer
Mitglied seit
17. Dez 2013
Beiträge
597
Punkte für Reaktionen
0
Punkte
42
Unter Zoneneinstellung als Zonentransferregel oder Quell-IP-Dienst?

In beiden Fällen erhalte ich nach wie vor "update failed: REFUSED". Bin per SSH SU drauf.
 

Anhänge

  • Unbenannt.JPG
    Unbenannt.JPG
    84,5 KB · Aufrufe: 40

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
du musst den Key haben, damit du nsupdate nutzen kannst, auch als localhost. Bei einem Standart-bind liegt dieser in der Datei /etc/bind/rndc.key
Wo Synology den hingepackt hat weiss ich ned, such mal mit
Code:
find / -type f -name rndc.key
das dort angegebene Secret musst du an die OPT Variable im Script verfüttern
Code:
TSIG_Key => 'YOUR TSIG KEY',
TSIG_Secret => 'YOUR TSIG SECRET',
 

mexx81

Benutzer
Mitglied seit
17. Dez 2013
Beiträge
597
Punkte für Reaktionen
0
Punkte
42
An diesen Punkt war ich ebenfalls uns versucht es damit.


ash-4.3# /volume1/@appstore/DNSServer/bin/nsupdate -k /volume1/@appstore/DNSServer/named/rndc.key
> key rndc-key %SECRET%
> zone %meine_zone.de%
> update delete %test_subdomain%.%meine_zone.de% A
> update add %test_subdomain%.%meine_zone.de% 3600 A %WAN_IP%
> send
update failed: REFUSED
 

mexx81

Benutzer
Mitglied seit
17. Dez 2013
Beiträge
597
Punkte für Reaktionen
0
Punkte
42
Ich habe unter /volume1/@appstore/DNSServer/named/etc/zone/data meine Konfigurationsdatei für meine Zone gefunden.

So sieht der Inhalt aus.



zone "%meine_zone.de%" {
type master;
file "/etc/zone/master/%meine_zone.de%";
allow-transfer {any;};
allow-query {any;};
allow-update {key "/volume1/@appstore/DNSServer/named/rndc.key";};
};

Dennoch lassen sich keine Records setzten. Auch wenn ich nsupdate mit der Key-File starte oder Key als Parameter angebe.
 

mexx81

Benutzer
Mitglied seit
17. Dez 2013
Beiträge
597
Punkte für Reaktionen
0
Punkte
42
Ich mache mal weiter mit meinen Erkentnissen. Vielleicht interessiert es ja jemanden.

Wenn ich allow-update auf meine feste IP setzte, die Zone deaktiviere und wieder aktiviere, erhalte ich im Log die Meldung security: zone '%meine_zone.de%' allows updates by IP address, which is insecure

Ein Add eines Records funktioniert! Er wird zwar in der GUI nicht angezeigt, aber ich kann den Record auflösen. Das ist schon mal ein Teilerfolg.

Wenn ich das allow update auf ein Key-File setzte, kommt im Log keine Warnung und beim Versuch ein Record zu setzten erscheint diese Meldung.

update-security: client %WAN_IP%#6926/key %KEY_NAME%: update '%meine_zone.de%/IN' denied
 

dany

Benutzer
Mitglied seit
31. Mrz 2008
Beiträge
352
Punkte für Reaktionen
0
Punkte
22
Zuletzt bearbeitet:

mexx81

Benutzer
Mitglied seit
17. Dez 2013
Beiträge
597
Punkte für Reaktionen
0
Punkte
42
So sieht jetzt die Zone Datei aus.


Rich (BBCode):
zone "%meine_zone.de%" {
    type master;
    file "/etc/zone/master/%meine_zone.de%";
    allow-transfer {any;};
    allow-query {any;};
    allow-update {key "rndc.key";};
};

Versuche ich nun per nsupdate diese Kommandos:

Rich (BBCode):
zone %meine_zone.de%
update delete %SUB%.%meine_zone.de% A
update add %SUB%.%meine_zone.de% 3600 A %WAN_IP%
send

Ich bekomme die Meldung: update failed: REFUSED

Im Log finde ich:
20-Apr-2016 16:55:31.544 update-security: client %WAN_IP%#44243/key rndc-key: update '%meine_zone.de%/IN' denied


Versuch per PHP:
20-Apr-2016 16:55:39.965 update-security: client 127.0.0.1#33253: update '%meine_zone.de%/IN' denied
 

dany

Benutzer
Mitglied seit
31. Mrz 2008
Beiträge
352
Punkte für Reaktionen
0
Punkte
22
Nicht der Pfad nehmen sondern den Namen, .z.b. meinkey oder rndc-key

key "meinkey" {
algorithm HMAC-SHA512;
secret "--irgendetwas--";
};
 

mexx81

Benutzer
Mitglied seit
17. Dez 2013
Beiträge
597
Punkte für Reaktionen
0
Punkte
42
NICE!! Thanks!!! Update per nsupdate funktioniert super, wenn ich als Parameter den Key samt secret angebe.

Nächster Schritt ist die Umsetzung im PHP Skript wie unter http://pablohoffman.com/dynamic-dns-updates-with-a-simple-php-script

Rich (BBCode):
<?php
# PHP script for very simple dynamic DNS updates 
#
# this script was published in http://pablohoffman.com/articles and 
# released to the public domain by Pablo Hoffman on 27 Aug 2006

# CONFIGURATION BEGINS -------------------------------------------------------
# define host and passwords here 
$hosts = array(
    'client' => 'secret',
    'host2'  => 'secret2',
);
$zone = "%MEINE_ZONE.DE%"; # the dynamic DNS zone
$dnsserver = "localhost"; # authorative DNS server for the zone above
# CONFIGURATION ENDS ---------------------------------------------------------


$ip = $_SERVER['REMOTE_ADDR'];
$host = $_GET['host'];
$pass = $_GET['pass'];


echo $host;
echo $pass;

$tmpfile = trim(`mktemp /tmp/nsupdate.XXXXXX`);

if ((!$host) or (!$pass) or (!($hosts[$host] == $pass))) { 
    echo "FAILED";
    exit; 
}

$oldip = trim(`host $host.$zone | cut -d ' ' -f 4`);
if ($ip == $oldip) {
    echo "UNCHANGED";
    exit;
}

echo "$ip - $oldip";

$nsucmd = "server $dnsserver
zone $zone
update delete $host.$zone A
update add $host.$zone 3600 A $ip
send
";

$fp = fopen($tmpfile, 'w');
fwrite($fp, $nsucmd);
fclose($fp);
`/volume1/@appstore/DNSServer/bin/nsupdate $tmpfile`;
unlink($tmpfile);
echo "OK";
?>

Ich verstehe den Aufruf nicht richtig. Rufe ich die URL wie folgt auf: http://%MEINE_DOMAIN%/update.php?host=peter&pass=%KEY_NAME% ofrt %KEY_SECRET% bekomme ich im Log die Meldung:

20-Apr-2016 17:32:16.640 update-security: client 127.0.0.1#54136: update '%MEINE_DOMAIN%/IN' denied

Ungeachtet dessen, wie wäre es denn am sinnvollsten umgesetzt, wenn ich die Maschinen, die mein DNS befüttern kontrollieren will? Ich möchte nicht, dass jeder DNS Einträge per PHP ausführen kann. Entweder per Zugangsdaten oder Besitz des KEYs sollte das Update erlaubt werden.
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat