ASN Based DNS Routing
Markus Brunsch / May 2022
DNS Basiertes Routing
Um seine Services und Dienste Carrier und ISP übergreifend mit der best möglichen Performance dem Endkunden anzubieten. Ist es unerlässlich, seine Server netzwerktechnisch so nah wie möglich an den Kunden heranzubringen.
Um trotz der vielen verteilten Knoten einen Zentralen anlaufpunkt zu behalten ist hier der Einsatz von DNS unerlässlich. Um nun herauszufinden, welcher Knoten dem Kunden am nächsten Gelegen ist, entscheidet der DNS Server beim Eingang einer DNS Anfrage aufgrund der Source IP. Anhand der IP-Adresse lassen sich Informationen wie Netzbetreiber, das Land und die ungefähre Lokation herausfinden.
Mithilfe diese Kriterien lassen sich Regeln definieren die als Entscheidungsgrundlage für die DNS Antwort dienen.
Konfiguration
Als DNS Server für diesen Aufbau dient der OpenSource GeoDNS Server.
Dieser DNS Server wird auf vom NTP Pool Projekt, für das Load Balancing der NTP Anfragen verwendet.
Für die Installation muss das Repository eingebunden werden:
deb [trusted=yes] https://repo.fury.io/ntppool/ /
Danach kann der GeoDNS Server installiert werden:
apt update && apt install geodns
Im Anschluss kann der GeoDNS Server konfiguriert werden. Die nötigen Konfigurationsdateien müssen manuell angelegt werden:
mkdir /etc/geodns
Die Konfigurationsdatei mit dem Standardinhalt unter /etc/geodns/geodns.conf
Anlegen.
; GeoDNS configuration file
;
; It is recommended to distribute the configuration file globally
; with your .json zone files.
[geoip]
;; Directory containing the GeoIP2 .mmdb database files; defaults
;; to looking through a list of common directories looking for one
;; of those that exists.
;directory=/usr/local/share/GeoIP/
[querylog]
;; directory to save query logs; disabled if not specified
path = log/queries.log
;; max size per file in megabytes before rotating (default 200)
; maxsize = 100
;; keep up to this many rotated log files (default 1)
; keep = 2
[http]
; require basic HTTP authentication; not encrypted or safe over the public internet
; user = stats
; password = Aeteereun8eoth4
[health]
; directory = dns/health
GeoIP Datenbanken
Um die eingehenden Source IPs nach Herkunft usw. klassifizieren werden die Datenbanken mit den entsprechenden Informationen benötigt.
Diese können hier heruntergeladen werden. https://github.com/P3TERX/GeoLite.mmdb/
Und entsprechend im Ordner /usr/local/share/GeoIP/
gespeichert werden.
DNS Zonen Konfiguration
Um eine Trennung nach ASN Nummern durchzuführen, muss die Zonen Datei wie folgt aufgebaut werden.
{
"serial": 3,
"ttl": 600,
"max_hosts": 2,
"logging": {},
"targeting": "country continent @ regiongroup region ip asn",
"contact": "[email protected]",
"data": {
"": {
"ns": [
"ns1.example.net",
"ns2.example.net"
]
},
"www.as3320": {
"cname": "www.fsn1.example.net.",
"ttl": 600
},
"www": {
"cname": "www.stg.example.net.",
"ttl": 600
}
}
}
Im obrigen Zonen File bekommen alle Anfragen aus dem DTAG (Deutsche Telekom AG) Netz die CNAME Adresse www.fsn1.example.net
als Antwort zurück.
Alle übrigen Anfragen aus anderen Netzwerken bekommen die Adresse www.stg.example.net
als Antwort zurück.
DNS Abstraktion
Da DNS ein sehr kritischer Dienst ist und durch eine mögliche CMANE Verkettung bei einem Ausfall auch noch andere Services oder Systeme lahnlegen kann.
Empfiehlt es sich hier dem GeoDNS Server nur eine Subdomain zur Verwaltung zu delegierten und nicht gleich die ganze root Domainebene @
.
Um dem GeoDNS Server eine Subdomain zu delegierten muss im haupt DNS ein NS
Record hinzugeführt werden.
geodns.example.net. 1 IN NS ns1.example.net.
In diesem Record wird die Subdomain *.geodns.example.net
ab sofort vom DNS Server ns1.example.net
verwaltet.
Somit werden alle DNS Anfragen wie z.B. srv1.geodns.example.net
an den Nameserver ns1.example.net
weitergeleitet.
Bei diesem Setup wären durch einen eventuellen Ausfall des NS1 Nameservers nur die geodns
Subdomain betroffen.