So richten Sie einen einfachen selbst gehosteten dynamischen DNS-Server ein

8

Ich habe ein kleines internes Netzwerk von physischen Maschinen, auf denen Hypervisoren ausgeführt werden, auf denen wiederum mehrere virtuelle KVM-Ubuntu-Maschinen ausgeführt werden. Wie würde ich einen internen dynamischen DNS-Server einrichten, damit sich die VM beim Ausführen eines Skripts zum Erstellen einer neuen virtuellen Maschine automatisch auf dem DNS-Server registrieren kann?

Bind scheint der Standard-DNS-Server für Linux zu sein, scheint jedoch für ein viel "statischeres" DNS-Modell ausgelegt zu sein. Eine dynamische Aktualisierung würde ein kompliziertes Skript erfordern, das SSH in den DNS-Server einbinden, Konfigurationsdateien bearbeiten und dann den Server neu starten müsste. Dies scheint keine sehr elegante Lösung zu sein. Gibt es bessere Möglichkeiten?

Ich habe eine ähnliche Frage gesehen , obwohl sie nach einer Lösung für eine öffentliche Umgebung bei Amazon fragen. Meine Server sind vollständig privat und ich möchte mich nicht auf einen externen VM-Host oder einen dynamischen DNS-Anbieter verlassen.

Cerin
quelle
Wenn Sie nur Ihren DHCP-Server benötigen, um Ihre Zone zu aktualisieren, klicken Sie hier . Wenn Sie auch externe Computer benötigen, um deren dynamische IP zu aktualisieren, hat dies bei mir funktioniert .
Mivk
Überprüfen Sie dies - github.com/lordloh/dynDnsEP, wenn Sie noch eine Lösung benötigen.
Lord Loh.

Antworten:

8

Tatsächlich ist Bind in der Lage, dynamische DNS-Aktualisierungen über RFC 2136-Standardnachrichten durchzuführen. Verwendung des nsupdate-Tools und der richtigen Konfiguration (nicht besonders schwierig, aber auch nicht ganz trivial).

Sie haben die Möglichkeit, diese Aktualisierungsnachrichten zu authentifizieren: 1) Nur bestimmte IPs dürfen Aktualisierungsnachrichten senden. 2a) TSIG-symmetrische Verschlüsselung 2b) SIG (0) -basierte Kryptografie mit öffentlichem Schlüssel oder eine Kombination aus 1 und 2 *. Anweisungen finden Sie unter anderem hier

Bei der persönlichen Implementierung stellte ich fest, dass das größte Problem darin bestand, benannten ausreichend Schreibrechte in / var / named zu erteilen. Es muss in der Lage sein, Dateien im Verzeichnis zu erstellen und über Schreibberechtigungen für die Dateien für die dynamischen Zonen zu verfügen.

Sig (0) -Schlüssel werden mit dem Dienstprogramm dnssec-keygen mit dem Namenstyp HOST und dem Schlüsseltyp KEY generiert. Zum Beispiel (möglicherweise nicht genau) (RSAMD5 deckt fast jedes Bindungspaket ab):

dnssec-keygen -a RSAMD5 -b 1024 -n HOST -f Schlüssel host.domain.tld

Die resultierende .key-Datei wird Ihrer Zonendatei hinzugefügt, die .private-Datei wird in der Befehlszeile mit nsupdate angegeben.

CarbonLifeForm
quelle
4

Ich habe die Bindung mit dynamischen Updates über nsupdate eingerichtet (wie von CarbonLifeForm beschrieben) und dies mit einem einfachen Perl-Skript kombiniert, das über eine verschlüsselte HTTPS-REST-Anfrage aufgerufen wird, die Kombination aus Subdomain und Passwort überprüft und dann nsupdate mit der IP der Anfrage aufruft.

Beispiel Update-Call von einem beliebigen Client (der automatisch die entsprechende Subdomain auf die öffentliche IP dieses Clients setzt)

Besuchen Sie einfach einen beliebigen Browser (in diesem Beispiel wurde https über Port 12345 verfügbar gemacht):

https://ddns.YOURDOMAIN.net:12345/update-my-ip.pl?subdomain=***&password=***

oder über die Kommandozeile (zB für Updates alle 15 Minuten per Cronjob):

www-browser -dump 'https://ddns.YOURDOMAIN.net:12345/update-my-ip.pl?subdomain=***&password=***'

Hier ist das Perl-Skript update-my-ip.pl:

#!/usr/bin/perl
use strict;
use CGI;
use Digest::SHA1 qw(sha1_hex);

my %accounts = (
# create via: sha1sum, then type password, then press Ctrl-D to calculate checksum (echo     with pipe gives wrong result!)
# update via: www-browser -dump 'https://ddns.YOURDOMAIN.net:12345/update-my-ip.pl?    subdomain=***&password=***'
    'YOURSUBDOMAIN1' =>     '93485720985720394853452345235-fake-sha1-checksum1',
    'YOURSUBDOMAIN2' =>     '93485720985720394853452345235-fake-sha1-checksum2', 
    'YOURSUBDOMAIN3' =>     '93485720985720394853452345235-fake-sha1-checksum3',
);
my $cgi = new CGI;

print "Content-type: text/html\n\n";
my $subdomain = $cgi->param('subdomain');
my $password = $cgi->param('password');
if( !$password || !$subdomain || length($password) <= 3 || length($subdomain) <= 1)
{
    print "ERROR\n";
    exit 0;
}
my $sha1 = sha1_hex($password);
my $ip = $ENV{'REMOTE_ADDR'};
my $should_be_sha1 = $accounts{$subdomain};
if( $sha1 && length($sha1) > 10 && $sha1 eq $should_be_sha1)
{
    print "START: ddns.YOURDOMAIN.net DNS updating <a href=\"http://$subdomain.YOURDOMAIN.net\">http://$subdomain.YOURDOMAIN.net</a> (<a href=\"https://$subdomain.YOURDOMAIN.net\">SSL</a>) to IP <a href=\"http://$ip\">$ip</a>.<br/>\n";
    my $out = `echo "update delete $subdomain.YOURDOMAIN.net A\n\n" | nsupdate 2>&1`;
    print "STEP1 $out<br/>\n";
    $out = `echo "update add $subdomain.YOURDOMAIN.net 60 A $ip\n\n" | nsupdate 2>&1`;
    print "STEP2 $out<br/>\n";
    print "DONE<br/>\n";
}
else
{
    print "ERROR\n";
}
Jan Kechel
quelle
3

Da Ihre Server alle privat sind, gehe ich davon aus, dass Sie die IP-Adressen nicht im größeren Internet veröffentlichen möchten. Dies vereinfacht die Dinge tatsächlich.

Ich weiß, dass ich für meine kleinen Netzwerke Erfolg mit dnsmasq hatte , einem absolut einfachen DNS- und DHCP-Server. Es sollte Clients ermöglichen, sich dem DNS-Server hinzuzufügen, wenn sie eine DHCP-Lease erhalten.

Lesen Sie weiter: /superuser/312515/dnsmasq-without-altering-etc-hosts-file-manually

TheLQ
quelle
1

Wie werden Ihren VMs IP-Adressen zugewiesen? Unter der Annahme von DHCP können Sie es so konfigurieren, dass BIND dynamisch aktualisiert wird. Hier ist die Ubuntu-Dokumentation zum Setup von dhcpd.conf.

http://manpages.ubuntu.com/manpages/lucid/man5/dhcpd.conf.5.html#contenttoc14

Auf der BIND-Seite gibt named.conf die lokale Zone an, die dynamisch aktualisiert werden soll. Sie würden Schlüssel verwenden, wie von user115014 beschrieben.

cjc
quelle
0

Generisch (und Windows-zentriert):

  1. Installieren Sie einen DNS-Server, der Dynamic DNS unterstützt

  2. Konfigurieren Sie die entsprechende DNS-Zone auf dem Server

  3. Konfigurieren Sie den DNS-Server so, dass sichere und unsichere DNS-Updates für die Zone zulässig sind

  4. Konfigurieren Sie die DNS-Clients mit einem DNS-Suffix, das der DNS-Zone entspricht

  5. Konfigurieren Sie die DNS-Clients so, dass sie den DNS-Server für die Namensauflösung verwenden

  6. Konfigurieren Sie die DNS-Clients für die Registrierung in DNS

Joeqwerty
quelle