Wir betreiben für die Freifunk-Router auf allen Gateways NTP-Server und haben vor, auch die Firmware-Updates und Gluon-Pakete auf allen Gateways zur Verfügung zu stellen.
Um das wartungsfreundlich zu gestalten und bräuchten wir also pro Domäne DNS-Einträge wie diese hier:
ntp.ff-kurzname
firmware.ff-kurzname
packages.ff-kurzname
…die alle auf die Batman-IPv6 des Gateways zeigen, mit dem sich der Freifunk-Router gerade verbunden hat. (Die mehreren Namen braucht’s für die nginx-vhosts.)
das geht so erstmal nicht. Wir haben es damals nicht hinbekommen die lokale Domäne zentral über den DNS-Server zu verwalten, weil wir nicht verstanden haben, wie man je nach Quell-IP andere Einträge zurückgeben kann, bzw. ob Bind das kann.
Daher liegen die auf den Gateways.
Man könnte das konfigurierbar machen, PR würden wir annehmen. Aber lohnt das? Könnt ihr das nicht einfacher eine öffentliche Domäne reinpacken?
Meinst Du wirklich minutenaktuell die v6-IP des besten batman-Gateways? Weil: der Knoten verbindet sich ja nur per VPN mit Gateways, was sollten dann Mesh-only-Knoten für Einträge haben?
Die Frage nach dem »warum« sei hier gestellt: NTP kommt mit Latenzen klar, und Images sowie Packages auf jedes Gateway zu kopieren (nur dann wäre es ja theoretisch schneller als von zentral), ist doch ein wahnsinniger Overhead?
Anderer Lösungsansatz: Anycast, sprich: jedes Gateway hat auch z. B. die fdfd:fcfc:fbfb:fafa::1/128, durch die Defaultroute schickt der Knoten Pakete mit jenem Ziel zum ›nächsten‹ Gateway — Ziel erreicht?
Der Gedankengang war ein anderer:
Wenn wir Dienste (z.B. NTP, aber auch Webserver für Firmwareupgrades) zwecks Ausfallsicherheit und einer möglichst einfachen Serverlandschaft direkt auf jedem Gateway haben, dann wäre es auch sinnig, im DNS nicht nur ein einziges Gateway davon z.B. als ntp.foobar oder firmware.foobar einzutragen, sondern eben alle. Und dann eben möglichst das, mit dem der Router verbunden ist - das ist ja mit Sicherheit online.
Ich hab mittlerweile auch ein wenig mit Bind experimentiert: Es würde gehen, aber es würde die Bind-Konfiguration wirklich übermäßig kompliziert machen.
Einfacher und wohl robuster wäre DNS-Roundrobin, also einfach die IPs aller Server, die einen Dienst zur Verfügung stellen, mit dem gleichen Hostnamen in Bind einzutragen. Ist ein Dienst unter einer IP nicht zu erreichen, liegt es dann zwar am Client, die nächste IP zu versuchen, aber so wie es aussieht machen das die meisten Clients sowieso.
Falls sich das beim Autoupdater nicht geändert hat, probiert jener es 1x, das Manifest zu holen und dann ggf. 1x, das sysupgrade zu ziehen. DNS-Roundrobin kann da lustige Effekte haben, da die Resolver-Library ja für jede Anfrage eine andere IP zurückgibt, also ggf. auch die des nicht erreichbaren Servers. Jedenfalls hatten wir das Problem um 2015, seitdem steht der FW-Server ‚hinter‘ dem Default-GW und hat genau 1 IP.
Danke für den Hinweis. Hab’s grad ausprobiert: Der Autoupdater macht’s nach wie vor wie von dir beschrieben, man sollte also nicht zu viele Server abschalten, sonst geht die Wahrscheinlichkeit eines erfolgreichen Updates sehr schnell gegen 0.
Wget versucht auch nur eine IP und gibt dann auf. Ping dagegen funktioniert wie gewünscht, ntp auch.