Eigenen DynDNS Server: Unterschied zwischen den Versionen
Zeile 6: | Zeile 6: | ||
=== Datenbank erstellen === | === Datenbank erstellen === | ||
Um die Passwörter für die DDNS-Hosts über das SQL-Web-Frontend [[PhpMyAdmin (Ubuntu)|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: | |||
<pre> | <pre> | ||
Zeile 11: | Zeile 16: | ||
grant all on ddns.* to 'powerdns'@'localhost'; | grant all on ddns.* to 'powerdns'@'localhost'; | ||
</pre> | </pre> | ||
Die Tabelle ''ddns_hosts'' enthält 2 Spalten für ''hostname'' und ''password'': | |||
<pre> | <pre> | ||
Zeile 20: | Zeile 27: | ||
); | ); | ||
</pre> | </pre> | ||
Zum Testen noch einen Testeintrag: | |||
<pre> | <pre> |
Version vom 2. Februar 2020, 16:35 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 $mysqli = new mysqli("127.0.0.1", "powerdns", "M7kWxyTCct", "ddns"); /* check connection */ if (mysqli_connect_errno()) { die("Verbindung fehlgeschlagen: " . 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("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("Falsches Passwort oder unbekannter Host"); } ?>
http://ddns1.kirner.or.at/?host=zuhause&pass=abc123
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