Adacor - Hosting

DNS-Check mit Anycast leichtgemacht

8. September 2014 von Simon Roehl

DNS-Check mit Anycast leichtgemachtAnycast beschreibt ein Adressierungsschema in Netzwerken. Mit Anycast können eine große Anzahl Server global verteilt die gleiche IP-Adresse besitzen.
Dies ermöglicht eine Reduzierung der Antwortzeiten für Anfragen aus dem Internet, da idealerweise der geografisch nächstgelegene Server angesprochen wird.

Um nun Anycast zu ermöglichen, ist es wichtig, dass die Anycast IP-Adresse an dem jeweiligen Standort nur verwendet wird, wenn der zugrunde liegende Service auch verfügbar ist.

Sollte dem nicht so sein, würde der Traffic zwar in Richtung des Servers fließen aber nicht beantwortet werden, dass würde einen – wenn auch regional begrenzten – Ausfall bedeuten.

Cloud Journey für den Mittelstand

Die Grundlagen einer erfolgreichen Cloud Journey

  • Antworten auf Ihre wichtigsten Fragen der Cloud Migration.
  • Handfeste Beispiele für unterschiedliche Szenarien
  • In drei Stufen ein digital erfolgreiches Unternehmen werden


Jetzt mehr wissen

Hier kommt nun ExaBGP zum Einsatz.

Durch einbaubare Checkscripte wird sichergestellt, dass die Anycast IP-Adresse des Service Hosts nur zum Router propagiert wird, wenn der Service auch verfügbar ist. Sollte dem nicht so sein, gibt es im internen Routerverbund Netzwerkpfade, die weiterhin sicherstellen, dass die Anfrage beantwortet wird. In diesem Fall erhöht sich jedoch die Latenz.

Code-Beispiel für einen DNS check

#!/usr/bin/env bash

STATE="down"

while true; do

  DIG_STATE=$(dig adacor.com @ns1.adacor.net 2> /dev/null | grep
195.137.170.149 | awk '{print $5}')

  if [[ $DIG_STATE == '195.137.170.149' ]]; then

    if [[ "$STATE" != "up" ]]; then

    echo $STATE

     echo "announce route 198.51.100.11 next-hop 192.0.2.11"

      STATE="up"

    fi

  else

    if [[ "$STATE" != "down" ]]; then

        echo $STATE

      echo "withdraw route 198.51.100.11 next-hop 192.0.2.11"

      STATE="down"

    fi

  fi

  sleep 2

done

Mithilfe dieses kleinen Bash Scriptes (exabgp kann auch perl, python …) wird geprüft, ob der auf diesem Server laufende DNS Daemon die richtige IP an diesem STandort terminiert.

Wenn dem so ist, wird via BGP die IP Adresse 198.51.100.11 an die Router dieses Standortes propagiert. Damit ist sichergestellt, dass der gesamte Traffic für diese IP an diesem Standort terminiert.

Sollte das Bash Script nicht den Wert „195.137.170.149“ aus der DNS-Abfrage lesen können, wird die Route verworfen und der Traffic wird innerhalb des Provider-Netzwerks an einen anderen Standort weitergeleitet.

Verwandte Artikel