Eigenen DynDNS Server: Unterschied zwischen den Versionen

Aus Tutorials
Zur Navigation springen Zur Suche springen
Zeile 87: Zeile 87:


function invalidCredentials() {
function invalidCredentials() {
   die("Falsches Passwort oder unbekannter Host");       
   die("Wrong password or unknown host!");       
}
}
?>
?>
</pre>
</pre>


=== Testen ===
Zum Testen rufen wir das Script im Browser auf:


<pre>
<pre>
http://ddns1.kirner.or.at/?host=zuhause&pass=abc123
http://ddns1.kirner.or.at/?host=zuhause&pass=abc123
</pre>
</pre>
Bei erfolgreichen Update sollte ''Success.'' ausgegeben werden. Bei falschen Zugangsdaten ''Wrong password or unknown host!''.


=== Links ===
=== Links ===

Version vom 2. Februar 2020, 17:39 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("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://klenzel.de/1575

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