Letztens habe ich einen Blog Eintrag gefunden, in dem jemand sich ein Anycast DNS mit Infoblox gebaut hat. Die Idee fand ich richtig cool, deswegen habe ich es nachgemacht, allerdings etwas geändert.
Zuerst, die Blogeinträge, Part 1 mit viel Infos dazu warum Anycast DNS eine gute Idee ist. Und Part 2 mit der Umsetzung.
https://medium.com/@tom.bowles/anycast-dns-part-1-838033773af8
https://medium.com/@tom.bowles/anycast-dns-part-2-4acc51e4d64f
Mein Aufbau ist etwas anders als Tom es in seinem Blog gemacht hat, mein Netz sieht so aus:

Links seht ihr ein LAN mit zwei Switchen, zwei Infoblox, einem Linux Client und einem Windows Client. Rechts gibt es zwei identische „Standorte“, jeweils mit einer Infoblox und einem Windows Client.
Erstmal zum Netz und DHCP Konstrukt, die Verbindungen zwischen den Switchen sind geroutet, das könnt ihr an den /30er Netzen dazwischen erkennen. Die einzige geswitchte Verbindung ist zwischen SW1 und SW2. Alle Infoblox befinden sich in einem Grid, sie syncen sich also und werden über einen Master konfigruiert. Der Master ist in diesem Fall die Infoblox5, links oben. DHCP wird auch von den Infoblox lokal verteilt, die Switche haben jeweils im Clientnetz (in dem die Windows PC sind) einen IP Helper Eintrag konfiguriert der auf die jeweilige lokale Infoblox zeigt. Hier kann man, nach Abschluss der Konfig, auch die Anycast IP benutzen. So würden auch IPs per DHCP verteilt wenn die lokale Infoblox ausfällt. Durch die Synchronisation im Grid entstehen dadurch keine Probleme.
Die Anycast IP ist die 10.10.10.10/32, diese wird von allen Infoblox im Netz per OSPF verteilt. Ich habe mich dafür entschieden die Infoblox mit in die Area 0 aufzunehmen, so ist die Metrik dynamisch und der jeweilige Router kann sich den besten Weg zur Anycast IP auswählen. Die Infoblox unterstütz auch andere Area Typen, BFD & Authentication. Man könnte auch eine feste Metrik einstellen, dann als Routen-Typ E2 oder N2, je nach Area-Typ. Das hätte man mehrere gleiche Wege zur Anycast IP und könnte damit auch Loadsharing erreichen. Das wollte ich hier aber nicht so erzwingen. Im linken Teil des Netzes ist es aber so, da die beiden Infoblox im gleichen Netz stehen und beide per OSPF ihre 10.10.10.10/32 verteilen.
Wie wird die Infoblox konfiguriert? Ich möchte jetzt hier keine Screenshot-Orgie machen, daher verweise ich auf den Part 2 von Tom, oben habt ihr ja bereits die Links gesehen. Er hat es mit BGP gemacht, aber die Routing Konfiguration der Infoblox ist selbsterklärend.
Die Switche sprechen untereinander OSPF in Area 0, die Infoblox jeweils mit ihrem nächsten Switch. So ergibt sich die Routingtabelle wie folgt, als Beispiel die von Switch 4:
SW4#sh ip route
Codes: L - local, C - connected, S - static, R - RIP, M - mobile,
[...]
Gateway of last resort is not set
1.0.0.0/8 is variably subnetted, 5 subnets, 2 masks
O 1.1.1.0/30 [110/20] via 1.1.3.1, 00:16:20, Ethernet0/3
C 1.1.2.0/30 is directly connected, Ethernet0/2
L 1.1.2.2/32 is directly connected, Ethernet0/2
C 1.1.3.0/30 is directly connected, Ethernet0/3
L 1.1.3.2/32 is directly connected, Ethernet0/3
10.0.0.0/32 is subnetted, 1 subnets
O 10.10.10.10 [110/11] via 192.168.3.2, 00:12:06, Vlan40
O 192.168.1.0/24 [110/21] via 1.1.3.1, 00:15:54, Ethernet0/3
O 192.168.2.0/24 [110/11] via 1.1.3.1, 00:16:20, Ethernet0/3
192.168.3.0/24 is variably subnetted, 2 subnets, 2 masks
C 192.168.3.0/24 is directly connected, Vlan40
L 192.168.3.1/32 is directly connected, Vlan40
O 192.168.20.0/24 [110/22] via 1.1.3.1, 00:15:54, Ethernet0/3
O 192.168.30.0/24 [110/11] via 1.1.3.1, 00:16:20, Ethernet0/3
192.168.40.0/24 is variably subnetted, 2 subnets, 2 masks
C 192.168.40.0/24 is directly connected, Vlan41
L 192.168.40.1/32 is directly connected, Vlan41
SW4#
SW4#sh ip ospf neighbor
Neighbor ID Pri State Dead Time Address Interface
3.3.3.3 1 FULL/BDR 00:00:31 1.1.3.1 Ethernet0/3
192.168.3.2 0 FULL/DROTHER 00:00:34 192.168.3.2 Vlan40
2.2.2.2 1 FULL/BDR 00:00:33 1.1.2.1 Ethernet0/2
Zum weiteren Verständnis noch die interne OSPF Datenbank, hier sieht man von wem das Netz 10.10.10.10/32 verteilt wird (alle Infoblox):
SW4#sh ip ospf database internal
OSPF Router with ID (4.4.4.4) (Process ID 1) Stub Link States (Area 0)
Link ID ADV Router Age Seq# Checksum Mask
1.1.2.3 4.4.4.4 1137 0x0 0x00587B /30
1.1.3.3 4.4.4.4 1137 0x0 0x004D85 /30
10.10.10.10 192.168.1.2 783 0x0 0x004310 /32
10.10.10.10 192.168.1.3 856 0x0 0x003D15 /32
10.10.10.10 192.168.2.2 885 0x0 0x003C16 /32
10.10.10.10 192.168.3.2 868 0x0 0x00351C /32
192.168.1.255 1.1.1.1 1123 0x0 0x005524 /24
192.168.1.255 2.2.2.2 1123 0x0 0x00373E /24
192.168.2.255 3.3.3.3 1122 0x0 0x000E62 /24
192.168.3.255 4.4.4.4 1123 0x0 0x00E486 /24
192.168.20.255 2.2.2.2 1097 0x0 0x0065FC /24
192.168.30.255 3.3.3.3 889 0x0 0x00D87B /24
192.168.40.255 4.4.4.4 868 0x0 0x004CF9 /24
[...]
Die Switche nutzen ihre Nummer als Router-ID, also SW1 ist 1.1.1.1 und SW3 ist 3.3.3.3 usw., die Infobloxen nutzen ihre LAN0 IP, diese stehen auch oben im Screenshot.
Wenn nun eine Infoblox ausfällt, der DNS Dienst abgeschaltet wird oder auch nur neugestartet wird, fällt das Anycast Interface runter und die OSPF Nachbarschaft geht verloren. Somit wird automatisch die nächste beste Route zu einer anderen Infoblox gewählt.
In der Infoblox ist zwar nur für DNS das Anycast Interface extra konfiguriert, aber über diese IP kann man auch DHCP und NTP erreichen. Diese Dienste habe ich extra eingeschaltet und getestet. Man muss aber keine extra Netzwerk- bzw. Dienstkonfiguration machen, das funktioniert direkt.
Somit hat man jetzt eine redundanz von DHCP, NTP und DNS im Netzwerk per Infoblox Grid hinter einer einzelnen Anycast IP-Adresse.