Tag Archives: dns-server

Alternativer DNS-Server

Wie in meinem Artikel über NbIServ beschrieben, betreibe ich einen frei zugänglichen Nameserver für das OpenNIC-Projekt. Der Nameserver führt keine individuellen Protokolle, sondern nur aggregierte und öffentlich einsehbare Statistiken.

IPv4-Adresse: 46.182.18.228

IPv6-Adresse: 2a02:2970:1002::ffa6

Weitere Informationen dazu gibt es hier und die Statistiken gibt es hier. Über Fragen oder Anregungen würde ich mich freuen.

DNS-Query Limits mit iptables und Burstrate

Seit etwas über zwei Monaten betreibe ich einen OpenNIC Nameserver, über den jeder Mensch auf der Welt Hostnamen in IP-Adressen auflösen kann (mehr zum Nameserver gibt es hier). Jeder Mensch, aber leider auch jeder durch Viren befallene Zombie-Computer. Die massiven Anfragen nach Mailservern führten bereits zweimal dazu, dass mein Router die Anzahl von Anfragen nicht mehr bearbeiten konnte und der Internetzugang sich verabschiedete.

Query Flood! Was tun?

Im Blog von Benny Baumann werden Tips vorgestellt, die sehr spezifisch bestimmte Anfragen mit einfachen iptables Regeln verwerfen. Da ich leider nicht Nachfragen nach den Rootservern ablehnen kann (öffentliche Nameserver müssen hier antworten) und auch leider nicht nach einer einzigen Domain gefragt wird, kam nur eine Limitierung in Frage. Dabei wird die Anzahl der maximal in einem Zeitintervall (zum Beispiel eine Sekunde) verarbeiteten Pakete begrenzt.

Durch Nachfragen bei anderen OpenNIC Serveradmins und Analyse anonymisierter Logfiles konnte ich 5 Anfragen pro Sekunde als Durchschnitt pro IP feststellen. Diese Einstellung brachte zwar Besserung, führte aber dazu, dass bei einem Rechnerstart einige Programmer länger brauchten. Klar, die Anfragen pro Sekunde sind zu stark begrenzt. Die Lösung des Problems möchte ich gern mit euch teilen.

Es wird die Anzahl der Pakete pro Sekunde einer Quell-IP nicht über den Zeitraum einer Sekunde gemessen, sondern über einen längeren Zeitraum. Das würde zu einer Reduzierung der Anfragen führen (fünf pro Sekunde ist trivialierweise mehr als 5 pro zehn Sekunden), also wird die Anzahl der Anfragen mit den Sekunden multipliziert. Jetzt ist es natürlich möglich, alle erlaubten Anfragen in der ersten Sekunde zu senden, was wieder zu einer Überlastung der Anbindung führen würde. Dem wird ein Riegel vorgeschoben, indem die Anzahl der Anfragen pro Sekunde auch limitiert wird, aber eben auf einen höheren als den angestrebten Wert.

Ich habe die Anfragen pro Sekunde auf 5 limitiert, was dazu führt, dass in 7 Sekunden 35 Anfragen erlaubt sind.
Um das Erste-Sekunde Problem zu lösen, sind in jeder der sieben Sekunden nur maximal 15 Anfragen erlaubt.

Skript schreiben statt manuell blockieren!

Hier das Skript für Interessierte:

#!/bin/bash
# This script limits the queries per second to 5/s
# with a burst rate of 15/s and does not require
# buffer space changes

# Requests per second
RQS="15"

# Requests per 7 seconds
RQH="35"

iptables --flush
iptables -A INPUT -p udp --dport 53 -m state --state NEW -m recent --set --name DNSQF --rsource
iptables -A INPUT -p udp --dport 53 -m state --state NEW -m recent --update --seconds 1 --hitcount ${RQS} --name DNSQF --rsource -j DROP
iptables -A INPUT -p udp --dport 53 -m state --state NEW -m recent --set --name DNSHF --rsource
iptables -A INPUT -p udp --dport 53 -m state --state NEW -m recent --update --seconds 7 --hitcount ${RQH} --name DNSHF --rsource -j DROP

Alternativer DNS Server

EDIT: Aktuelle Informationen zum DNS-Server und dessen IP gibt es in diesem Beitrag.

Seit spätestens 2003 betreibe ich meinen DNS Server selbst zuhause. Das bringt mir gerade beim surfen im Internet einen kleinen Geschwindigkeitsvorteil, weil oft aufgerufene Webseiten im Cache bleiben. Durch einen glücklichen Zufall kann ich den Dienst jetzt allgemein zugänglich zur Verfügung stellen.

Die IP-Adresse des DNS Servers lautet:

EDIT: Siehe hier.

DNS ist das Telefonbuch des Internets. Um diesen Blog zu erreichen wurde zum Namen falkhusemann.de die zugehörige (IP-)Nummer bestimmt. Die zuständigen voreingestellten DNS-Server werden meist durch den jeweiligen Internetanbieter betrieben.

Personenbezogene Daten speichert mein DNS Server nicht. Einzig aggregierte Statistiken werden erzeugt und sind für jeden hier einsehbar. Eine Funktionsgarantie für den Dienst kann ich natürlich nicht geben, eine Auswertung der Verfügbarkeit seit Inbetriebnahme aber schon.

Zusätzlich zum Auflösen der ICANN Domains wie .de oder .com ist der Server in das OpenNIC Projekt eingebunden und kann damit eine Menge alternativer TLDs wie .geek oder .null auflösen. OpenNIC ist ein nicht-kommerzielles Projekt, dass alternative DNS Server zur Verfügung stellt.

Eine interaktive Anleitung, wie OpenNIC eingebunden werden kann, ist hier aufrufbar. Der CCC bietet eine allgemein Anleitung für viele Betriebssysteme.