Eigenen DynDNS Server: Unterschied zwischen den Versionen
(→Script) |
(→Script) |
||
| Zeile 39: | Zeile 39: | ||
<?php | <?php | ||
$ | /* ============================== Change according to your environment ================================== */ | ||
$SERVER = "127.0.0.1"; | |||
$USER = "powerdns"; | |||
$PASSWORD = "M7kWxyTCct"; | |||
$DATABASE_DDNS = "ddns"; | |||
$DATABASE_POWERDNS = "powerdns"; | |||
/* ========================================== Do not change ============================================== */ | |||
$mysqli = new mysqli($SERVER, $USER, $PASSWORD, $DATABASE_DDNS); | |||
/* check connection */ | /* check connection */ | ||
if (mysqli_connect_errno()) { | if (mysqli_connect_errno()) { | ||
die(" | die("Connection failed: " . mysqli_connect_error()); | ||
} | } | ||
| Zeile 68: | Zeile 78: | ||
} else { | } else { | ||
/* change db to powerdns_admin db */ | /* change db to powerdns_admin db */ | ||
$mysqli->select_db( | $mysqli->select_db($DATABASE_POWERDNS); | ||
if (!$ip=$_SERVER['HTTP_X_FORWARDED_FOR']) { | if (!$ip=$_SERVER['HTTP_X_FORWARDED_FOR']) { | ||
| Zeile 82: | Zeile 92: | ||
} | } | ||
//$result2=mysql_query("UPDATE records SET content='$ip' WHERE name='$domain2';"); | //$result2=mysql_query("UPDATE records SET content='$ip' WHERE name='$domain2';"); | ||
print("Success."); | print("Success."); | ||
} | } | ||
function invalidCredentials() { | function invalidCredentials() { | ||
die("Wrong password or unknown host!"); | die("Wrong password or unknown host!"); | ||
} | } | ||
?> | ?> | ||
Version vom 2. Februar 2020, 17:08 Uhr
Update über direkten Datenbankzugriff
Voraussetzungen
Dieses Tutorials setzt einen DNS-Server voraus, der seine Daten aus einem MySQL-Backend bezieht. In diesem Tutorial wurde PowerDNS verwendet.
Datenbank erstellen
Um die Passwörter für die DDNS-Hosts über das SQL-Web-Frontend PhpMyAdmin bearbeiten zu können, habe ich diese in eine Datenbank ausgelagert.
Dazu erstellen wir eine Datenbank ddns und verwenden der Einfachheit den selben Benutzer wie für die powerdns-Datenbank:
create database if not exists ddns; grant all on ddns.* to 'powerdns'@'localhost';
Die Tabelle ddns_hosts enthält 2 Spalten für hostname und password:
CREATE TABLE ddns_hosts ( id INT NOT NULL AUTO_INCREMENT, hostname VARCHAR(64) NOT NULL, password VARCHAR(64) NOT NULL, PRIMARY KEY (id) );
Zum Testen noch einen Testeintrag:
INSERT INTO ddns_hosts ( hostname, password ) VALUES ( 'zuhause', 'abc123' );
Script
<?php
/* ============================== Change according to your environment ================================== */
$SERVER = "127.0.0.1";
$USER = "powerdns";
$PASSWORD = "M7kWxyTCct";
$DATABASE_DDNS = "ddns";
$DATABASE_POWERDNS = "powerdns";
/* ========================================== Do not change ============================================== */
$mysqli = new mysqli($SERVER, $USER, $PASSWORD, $DATABASE_DDNS);
/* check connection */
if (mysqli_connect_errno()) {
die("Connection failed: " . mysqli_connect_error());
}
$host = mysqli_real_escape_string($mysqli, $_GET['host']);
$pass1 = mysqli_real_escape_string($mysqli, $_GET['pass']);
/* Select queries return a resultset */
if ($query = $mysqli->query("SELECT password FROM ddns_hosts WHERE hostname = '" . $host . "'")) {
if ($row = mysqli_fetch_assoc($query)) {
$pass2 = $row["password"];
} else {
invalidCredentials();
}
/* free result set */
$query->close();
} else {
printf("Invalid query: %s\n", mysqli_error($mysqli));
exit();
}
if ($pass1 != $pass2) {
invalidCredentials();
} else {
/* change db to powerdns_admin db */
$mysqli->select_db($DATABASE_POWERDNS);
if (!$ip=$_SERVER['HTTP_X_FORWARDED_FOR']) {
$ip=$_SERVER['REMOTE_ADDR'];
}
$domain=$host.".example.com";
//$domain2="*.".$domain;
if (!$result1 = $mysqli->query("UPDATE records SET content='$ip' WHERE name='$domain';")) {
printf("Invalid query: %s\n", mysqli_error($mysqli));
exit();
}
//$result2=mysql_query("UPDATE records SET content='$ip' WHERE name='$domain2';");
print("Success.");
}
function invalidCredentials() {
die("Wrong password or unknown host!");
}
?>
Testen
Zum Testen rufen wir das Script im Browser auf:
http://ddns1.kirner.or.at/?host=zuhause&pass=abc123
Bei erfolgreichen Update sollte Success. ausgegeben werden. Bei falschen Zugangsdaten Wrong password or unknown host!.
Links
https://www.debacher.de/wiki/Mein_eigenes_DynDNS
Update per nsupdate
Siehe auch PowerDNS nsupdate
Links
https://controlc.de/2013/09/10/debian-selbstgehosteter-dyndns-dienst/
https://controlc.de/2014/08/25/debian-selbstgehosteter-dyndns-dienst-der-client-teil/#more-2532)
Zurück zu Ubuntu