Habe jetzt das leidige Thema mit DynDNS in Kombination FritzBox und Synology DSM 7.0 endlich im Griff und zwar mit IPv4 und IPv6.
Die Fritzbox hat eine andere IPv6 Range als das man vom Provider als Präfix bekommt und somit auch die Endgeräte hinter der FB - zumidest ist das bei mir so. Über DynDNS kommt man deswegen immer auf die Fritzbox, wenn der Client eine IPv6 Adresse haben will / soll. Das Problem beschreibt im Übrigen AVM auch auf seiner Homepage.
https://avm.de/service/wissensdaten...f-auf-HTTPS-Server-im-Heimnetz-nicht-moglich/
Vielleicht hat AVM auch Angst, dass man evtl. gar nicht mehr auf die Fritzbox kommt, wenn man beide Ports weiterleitet.
BTW: Nutz man DynDNS auf der Fritzbox, dann ändert sich das selfsigned Zertifikat, welches aber scheinbar fehlerhaft ist und mit FireFox (neuere Version) nicht mehr umgangen werden kann. FF verweigert schlicht den Zugriff und verweist auf entsprechende RfCs. Mit Chrome und Edge hat das bis Weilen noch funktioniert. Schaltet man DynDNS auf der FB wieder aus und löscht anschließend den Cache im FF, funktioniert der Zugriff wieder.
Ich habe meine Domain bei ALL-INKL.com, das mir erlaubt sowohl IPv4 und IPv6 zu aktualisieren.
Synology unterstütz IPv6 von Haus aus aber nur, wenn man die Synology Domain benutzt. Der DDNS Updater 2 funktioniert leider ab DSM 7.0 nicht mehr. Und die Docker Variante unterstützt ALL-INKL nicht, außerdem finde ich das ein wenig Oversized.
Will man seine eigene Domain benutzen, bleibt einem nur, ein weiteres DDNS Module hinzuzufügen. Was aber an sich kein großes Hexenwerk ist.
In der GUI kann man leider den Modul Path für den Customized Provider nicht anpassen - warum auch immer. Deswegen muss man in der Datei
/etc/ddns_provider.conf die folgenden Zeilen mit einem Editor hinzufügen:
Code:
[USER_all-inkl.com]
modulepath=/usr/syno/bin/ddns/all-inkl.php
queryurl=https://dyndns.kasserver.com
die QueryURL ist nicht sonderlich wichtig, kann aber auch nicht weggelassen werden.
Anschließend legt man das Script an und verpasst ihr Root und Execute Rechte:
Bash:
sudo -i touch /usr/syno/bin/ddns/all-inkl.php
sudo -i chmod 755 /usr/syno/bin/ddns/all-inkl.php
Der Inhalt ist wie folgt:
PHP:
#!/usr/local/bin/php74 -d open_basedir=/usr/syno/bin/ddns
<?php
function getHostPublicIPv6($host) {
$records = array();
$records = dns_get_record($host, DNS_AAAA);
foreach ($records as $record) {
$result = filter_var(
$record['ipv6'],
FILTER_VALIDATE_IP,
FILTER_FLAG_IPV6 + FILTER_FLAG_NO_PRIV_RANGE + FILTER_FLAG_NO_RES_RANGE
);
if (!empty($result)) { return $result; }
}
}
//if ($argc !== 5) { echo 'badparam'; exit(); }
$verbose = false;
$username = (string)$argv[1];
$password = (string)$argv[2];
$hostname = (string)$argv[3];
$ipv4 = (string)$argv[4];
$ipv6 = getHostPublicIPv6(gethostname());
if ($verbose) {
print "host: $hostname \n";
print "IPv4: $ipv4 \n";
print "IPv6: $ipv6 \n";
}
$url = "https://dyndns.kasserver.com/?myip=$ipv4&myip6=$ipv6";
$handle = curl_init();
curl_setopt($handle, CURLOPT_URL, $url);
//curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
curl_setopt($handle, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($handle, CURLOPT_USERPWD, "$username:$password");
curl_setopt($handle, CURLOPT_USERAGENT, "SynoDDNS ALL-INKL customized by ZW 2021-12");
$result = curl_exec($handle);
if ($verbose) { print curl_error($handle); print "\n"; }
curl_close($handle);
Am Ende legt man in der GUI unter Control Panel > External Access > DDNS einen neuen Eintrag ein und füllt diese mit den eigenen Werten. Speichern und Update Now sollte dann wie gewünscht funktionieren. Falls nicht, dann habt Ihr etwas falsch gemacht ;-)
Als positiven Nebeneffekt konnte ich Port 80 und 443 auf der FB wieder schließen. Selbst Let's Encrypt funktioniert damit. Mit ACME und DNS-Challenge konnte ich mir für meine Domäne ein Wildcard Zertifikat erstellen und auf die Synology, QNAP und Fritzbox verteilen. ACME unterstützt auch ALL-INKL als DNS Provider, autom. Renew über den Task Scheduler und fügt sich sauber in die GUI von DSM ein.
Ein Problem hatte ich anfänglich, als ich für den DDNS Hostnamen ein Zertifikat anlegen wollte. ALL-INKL benutzt für den DDNS Namen einen anderen DNS Server, nämlich: dyndns.kasserver.com. Für den DNS-Challenge von LE muss aber eine TXT Record auf dem zuständigen DNS Server der Domäne anlegen können. Beide sind aber nicht identisch.
Ich bin mir ziemlich sicher, dass die hier genannten Probleme mit FF bzw. nicht Erreichbarkeit der NAS von außen, sich so beheben lassen ...