gibt es Communities, die schon Erfahrungen mit Anycast DNS gemacht haben? Wenn ja, wie habt ihr das gemacht? Gab es Probleme und funktioniert es zuverlässig?
Mir fallen spontan zwei Lösungswege ein:
man überlässt batman-adv das Problem, so dass es effektiv eine Anycast MAC wird.
oder man bringt es dem auf den meisten Gateways/Supernodes laufenden Routingdaemons bei.
Schön wäre auch, wenn der DNS Server später problemlos in jeden Knoten integriert werden könnte. Daher finde ich die Option mit dem Routingdaemon geeigneter.
Wir nutzen bereits Anycast DNS für Rheinufer. Für V6 muss accept_dad für das Interface abgeschaltet werden. In V4 haben wir extra IPs nur für Anycast DNS.
Bei V6 nutzen wir die link-local Adresse der Gateways (fe80::1)
So wie ich es gerade sehe haben wir für V4 das Anycast gar nicht in Verwendung.
Kann sein das es nach Tests nicht so 1A lief. Für v6 gibt es aber keine Probleme.
Dazu sollte gesagt werden das V4 im FFRL als legacy behandelt wird und so nicht viel Beachtung geschenkt wird.
Ich würde es eher anders realiseren:
Man nehme eine IP-Adresse (die DNS service IP) außerhalb der Mesh-Wolke und lege diese auf der Supernode auf das Loopback interface. DNS Server auf der Supernode starten und fertig ist der Anycast DNS.
Wenn man das ganze getrennt haben will: OSPF, RIP oder BGP Session zwischen Supernode und einer beliebigen Maschine (die natürlich auch im Mesh sein kann) aufsetzen, service IP zur Supernode announcen und DNS Server starten.
Wenn ich recht überlege ginge das auch mit statischen Routen auf den Supernodes…
An so etwas hatte ich auch gedacht. Dabei würde jedoch der Server möglicherweise auch von selbst mal jene IP als Absender-IP verwenden (preferred_lft 0 könnte dagegen helfen) und der Host selber wäre nicht im traceroute zu sehen. Vielleicht bekommt man das mit Networknamespaces und veth-Paaren schöner hin.
Ich hab mich dazu gerade mal mit einem batman-adv Entwickler unterhalten. Vermutlich funktioniert das nicht gut und führt dazu, dass sich die Hosts permanent gegenseitig Roamingpakete für die MAC zuschicken.
Ich habe nun Anycast DNS über den Routingdaemon implementiert:
Auf den Gateways ist das Interface anycast-dns mit der IPv6 2001:67c:2d50:1::a82:7fe0/128 konfiguriert. anycast-dns ist ein dummy-Interface, das lediglich dazu dient dem Host die IP zuzuweisen.
Zusätzlich ist in der Routingconfig (bird6) eine statische Route über das Interface auf die IP definiert, damit die anycast Route über das IGP zwischen den Gateways und im Mesh verteilt wird.
protocol static anycast_dns {
route 2001:67c:2d50:1::a82:7fe0/128 via "anycast-dns";
}
Somit kann man einen der Gateways mittels ip link set down anycast-dns aus dem anycast Verbund entfernen und mit up wieder einfügen (Vorsicht: Auf Systemen mit systemd v219 aktiviert networkd das Interface sofort wieder!).
Die Routen sehen dann so aus (wenn auf allen Gateways anycast DNS aktiv ist):
[1] 23:12:25 [SUCCESS] holstentor.luebeck.freifunk.net
2001:67c:2d50:1::a82:7fe0/128 dev anycast-dns
via fe80::5054:ff:feee:5cd7 on freifunk-hl
[2] 23:12:25 [SUCCESS] huextertor.luebeck.freifunk.net
2001:67c:2d50:1::a82:7fe0/128 dev anycast-dns
via fe80::5054:ff:feee:5cd7 on freifunk-hl
[3] 23:12:25 [SUCCESS] burgtor.luebeck.freifunk.net
2001:67c:2d50:1::a82:7fe0/128 dev anycast-dns
via fe80::dcad:caff:fefe:461d on freifunk-hl
[4] 23:12:26 [SUCCESS] muehlentor.luebeck.freifunk.net
2001:67c:2d50:1::a82:7fe0/128 dev anycast-dns
via fe80::5054:ff:feee:5cd7 on freifunk-hl
Wenn man es testweise auf drei der vier Gateways deaktiviert, reagiert das Routing sofort:
[1] 23:14:05 [SUCCESS] burgtor.luebeck.freifunk.net
2001:67c:2d50:1::a82:7fe0/128 dev anycast-dns
[2] 23:14:05 [SUCCESS] huextertor.luebeck.freifunk.net
2001:67c:2d50:1::a82:7fe0/128 via fe80::5054:ff:feee:5cd7 on freifunk-hl
[3] 23:14:05 [SUCCESS] holstentor.luebeck.freifunk.net
2001:67c:2d50:1::a82:7fe0/128 via fe80::5054:ff:feee:5cd7 on freifunk-hl
[4] 23:14:06 [SUCCESS] muehlentor.luebeck.freifunk.net
2001:67c:2d50:1::a82:7fe0/128 via fe80::5054:ff:feee:5cd7 on freifunk-hl
Ein Client, der permanent Anfragen an die anycast Adresse sendet, bekommt davon nichts mit.
Wir haben außerdem (experimentelles) NAT64 laufen, das 2001:67c:2d50:1::10.130.64.0/114 auf 10.130.64.0/18 abbildet. Somit ist der anycast DNS auch unter 10.130.127.224 erreichbar.