Ansichten eines Informatikers

Wie umgeht man DNS-Sperren?

Hadmut
10.3.2023 22:54

Weil Leser anfragten. [Update]

Ich hatte erwähnt, dass die juristisch veranlassten DNS-Sperren juristisch unvertretbar sind, weil die Begründung technisch falsch ist, weil sie den Zugriff auf Webseiten ermöglichten. Sie ermöglichen ihn nicht, sie erleichtern ihn nur, wenn man keinen eigenen DNS-Recursor betreibt.

Leser fragten deshalb an, wie man DNS-Sperren umgeht.

Die Antwort ist: Gar nicht. Man muss sie gar nicht umgehen. Es reicht schon, sie einfach nicht zu benutzen.

Wenn es sich, wie im gerade beschriebenen Fall von Quad9 um Sperren eines DNS-Recursors und nicht der authoritative Server für die Zone handelt. Wenn die authoritative Server gesperrt werden, kann man da mit DNS-Mitteln nichts dagegen machen, dann muss man einen anderen Weg wählen, aber das kommt sehr selten vor, weil es ja meistens um Server im Ausland geht, an die die Gerichte hier nicht rankommen, weshalb sie dann ersatzweise den Unschuldigen hängen, den sie kriegen können, weil Juristen notfalls einfach irgendwas gegen irgendwen machen.

Das ist unsinnig (und deshalb auch nicht geeignet und damit juristisch nicht haltbar), weil diese DNS-Sperren eigentlich gar keine Wirkung haben, wenn man seine Netzanbindung auf die normale Weise macht, wie es seit 30, 40 Jahren üblich ist, wenn man eine Firma, Universität, Organisation, oder sonst ein gepflegtes Netzwerk anschließt. Man muss diese Sperren bei einem normal und vollständig eingerichteten Internet-Anschluss gar nicht umgehen, weil sie überhaupt keine Auswirkung haben, einfach wirkungslos sind. Weil man nämlich – normalerweise, in einem voll eingerichteten Netz – keinen externen DNS-Recursor benutzt, um die Namensauflösung zu machen, sondern seinen eigenen.

Es ist aber so, dass viele, oder praktisch alle Internet-Provider auch einen (i.d.R. redundant, mehrere) DNS-Recursor zur Verfügung stellen, die man benutzen kann, weil es bequemer ist, man weniger selbst machen muss, und weil es oft auch schneller geht, weil der Provider die Zwischenergebnisse zwischenspeichert (Cache), und damit auch die Anfragenlast an die Root- und anderen authoritative Server entlasten. Und weil man dem Kunden so einen kleinen DSL-Router nach Hause stellt, der nicht die Rechenleistung und CPU-Leistung hat (oder früher, als die entwickelt wurden hatten), weshalb es einfacher ist, das so zu machen, dass die nicht selbst auflösen, sondern den Provider fragen. Und im LAN, dem Heim- oder Firmennetz ist es nicht sinnvoll, wenn das jeder Rechner selbst macht, weil man sonst ständig die gleichen Anfragen für jeden Rechner rausschickt. Deshalb macht das pro LAN, also pro Heim- oder Firmennetz normalerweise immer ein Rechner für alle, und das ist dann beim normalen Heimanschluss der DSL-Router, der wiederum zu klein und schwach ist, das komplett selbst zu machen, und deshalb den Provider fragt.

Deshalb läuft das in kleinen Heim-Netzen dann so, dass der Rechner (egal ob nun PC, Smartphone, Smart TV oder was auch immer im Netz hängt) im Heim-Netz per DHCP eine IP-Adresse anfragt, sie auch erhält, zusätzlich aber die Angabe, dass er den DSL-Router fragen soll. Der DSL-Router könnte das selbst machen, wenn er groß und stark genug wäre, normalerweise aber bekommt er seinerseits per PPP-Protokoll (in Kabelfernseh-/DOCSIS-Netzen auch DHCP) seine IP-Adresse und ebenfalls die Adresse des DNS-Recursors des Providers mitgeteilt.

Auf diese Weise bekommt man – ohne es eigentlich selbst zu merken – auf ganz einfache, billige und schnelle Weise die Namensauflösung mit billigen Geräten und geringstem Wartungsaufwand.

Allerdings kommt es vor, dass das manchmal auch wirklich erforderlich ist, nämlich dann, wenn der Provider über seinen Recursor nämlich noch zusätzliche DNS-Daten einspeist, die nur für seine Kunden und nicht allgemein sichtbar sein sollen. Beispielsweise irgendein Anmeldeportal, in dem man erst bestätigen muss, ein guter Mensch zu sein und den Anschluss nicht zu missbrauchen, oder per Kreditkarte für die Nutzung zu zahlen. Manchmal geht es nicht ohne, wenn man beispielsweise im Hotel sitzt (obwohl die sich diese Portalseiten auch wieder abgewöhnt haben, weil die zuviel Probleme verursachen) oder am Flughafen oder im Flugzeug oder im Einkaufszentrum. Und früher hatten die Provider auch gerne mal Mailserver nur für Kunden sichtbar gemacht, aber das ist auch aus der Mode gekommen. Und längst hat sich rumgesprochen, dass man solche DNS-Sauereien auch nicht macht, eben weil sie zuviele Störungen verursachen.

Bei normalen Internet-Anschlüssen für zuhause gibt es keinen zwingenden Grund mehr (wenn überhaupt je), den Recursor des Providers zu verwenden, außer eben, dass es bequemer ist und „out of the box“ funktioniert, so „plug and play“. Das geht halt einfach so, ohne dass man drüber nachdenken muss.

Die Nutzung des Provider-DNS-Resolvers hat natürlich auch ihre Haken. Einer ist zum Beispiel, dass die einem Ergebnisse vorenthalten können, etwa weil irgendein Gericht die Sperrung verfügt hat, oder weil sie auf spinnerte Ideen kommen. Manche Provider haben ihre Recursor auch schon so konfiguriert, dass sie keine Negativ-Antworten (wenn es den DNS-Namen nicht gibt) mehr geben, sondern einen auf ihre Werbeseiten umlenken. Macht man also einen Schreibfehler, würde man also auf dainsch.de statt danisch.de gehen, bekäme man keine Fehlermeldung, sondern eine Werbeseite des Providers. Das ist nicht nur ärgerlich, sondern verursacht auch eine Menge technischer Probleme.

Man muss diese DNS-Sperren also nicht „umgehen“, weil sie einem auf dem normalen Weg ja gar nicht im Weg stehen, sondern lediglich vermeiden, den Recursor des Providers zu benutzen, und es stattdessen, wie es eigentlich normal wäre, selbst machen.

Wie macht man es selbst?

Man kann die Namensauflösung, also das, was der Recursor macht, sogar relativ einfach von Hand machen, das erkläre ich aber ein anderes Mal.

Man muss im Wesentlichen zwei Dinge tun:

  • einen eigenen Recursor laufen lassen,
  • und wenn man den nicht im Einzelfall und von Hand abfragen will, entweder allen Rechnern in seinem LAN, oder – besser – dem Router, der die DHCP-Adressen vergibt, sagen, dass statt dem Recursors des Providers der eigene verwendet werden soll.

Wie lässt man den laufen?

Schrecklich einfach. Die normalen Linux-Distributionen für Linux haben sowas alles schon drin, die bekanntesten DNS-Server mit Recursor sind bind9, powerdns, dnsmasq. Früher gab es noch pdnsd, wunderbar, aber leider seit 10 Jahren nicht mehr gewartet. Und meist sind die Pakete schon so eingestellt, dass die ohne weitere Konfiguration gleich loslaufen.

Unter Ubuntu/Debian reicht also ein

sudo apt install pdns-recursor

Fertig. Das war es (in der Grundeinstellung) bereits, dann hat man (i.d.R. aber nur für diesen Rechner, weil auf 127.0.0.1) bereits einen Recursor laufen (sofern man vorher nicht schon irgendwas anderes auf 127.0.0.1 port 53 laufen hat, ganz so einfach ist es in der Praxis dann halt doch nicht, weil auf den Rechnern soviel Zeugs läuft, ein bisschen muss man dann doch schon wissen, was man tut).

Und dann kann man schon abfragen

% dig @127.0.0.1 bundesgerichtshof.de any

; <<>> DiG 9.18.1-1ubuntu1.3-Ubuntu <<>> @127.0.0.1 bundesgerichtshof.de any
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 22835
;; flags: qr rd ra; QUERY: 1, ANSWER: 7, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;bundesgerichtshof.de.		IN	ANY

;; ANSWER SECTION:
bundesgerichtshof.de.	7200	IN	NS	pns.dtag.de.
bundesgerichtshof.de.	7200	IN	SOA	ns1.itzbund.de. hostmaster.itzbund.de. 2023020901 10800 3600 1209600 86400
bundesgerichtshof.de.	7200	IN	NS	ns1.itzbund.de.
bundesgerichtshof.de.	7200	IN	A	80.245.145.75
bundesgerichtshof.de.	7200	IN	NS	ns2.itzbund.de.
bundesgerichtshof.de.	7200	IN	NS	secondary006.dtag.net.
bundesgerichtshof.de.	7200	IN	MX	50 mail1.bund.de.

;; Query time: 208 msec
;; SERVER: 127.0.0.1#53(127.0.0.1) (TCP)
;; WHEN: Fri Mar 10 23:12:15 EET 2023
;; MSG SIZE  rcvd: 241


Will man es kürzer, fragt man dann eben nach A (für ipv4) oder AAAA (für ipv6), ohne den Recursor des Providers (oder Quad9 o.ä.) verwendet zu haben.

Sollen auch andere Rechner den Recursor abfragen können, muss man dem natürlich noch sagen, dass er nicht nur auf 127.0.0.1, sondern auch auf den anderen hören soll, also etwa für den powerdns-recursor die Option --local-address=0.0.0.0 auf der Kommandozeile oder local-address=0.0.0.0 in die Konfigurationsdatei hinzufügen (oder ganz löschen, wenn da vorher =127.0.0.1 steht), was aber von der Distribution abhängt. Unter Ubuntu/Debian in /etc/powerdns/recursor.conf

Man kann das Ding auch recht einfach als Docker-Container laufen lassen. Gibt es hier als fertigen Docker-Container, hier das README, allerdings etwas länger.

Im Prinzip geht das aber auch schon viel kürzer, folgendes Dockerfile reicht eigentlich schon:

FROM alpine

RUN apk add pdns-recursor bind-tools && \
    mkdir -p /var/run/pdns-recursor

CMD ["pdns_recursor","--daemon=no","--local-address=0.0.0.0"]

und als docker-compose.yaml, wenn man das verwenden will,

services:

  recursor:
    build: .

    ports:
      - "5553:5353/udp"
      - "5553:5353/tcp"

(mit den Ports etwas aufpassen und geeignet wählen, weil der pdns-recursor ohne port-Angabe 5353 verwendet, der aber schon von Avahi/mdns belegt ist).

Wichtig: Das ist hier kein Hexen- oder Geheimwissen, keine Kriminellenmethode, was ich hier beschreibe. Das ist Grundwissen Systemadministration. Das ist das, was eigentlich jeder Systemadministrator drauf haben muss. Naja, müsste. Weil sowas eigentlich zu jedem Netzwerk gehört, das etwas größer als das normale DSL-Heimnetz ist.

Und damit haben diese DNS-Sperren im Normalfall überhaupt keine Wirkung. Sie wirken nur für den Spezialfall, dass Leute aus dem Heimnetz mit dem Billig-Router surfen und sich nicht auskennen, damit also über den Recursor des Providers oder externe wie etwa Quad9 oder den berühmten Google-DNS 8.8.8.8 gehen. Der gilt zwar als der Geheimtipp, aber der bessere (aber aufwendigere) Tipp ist der gar nicht geheime, es einfach selbst zu machen.

Anekdote:

Als ich 2009 in die Sache mit der Kinderpornosperre involviert und dazu auch zu Zeiten von der Leyens im Frauenministerium bei einer Besprechung war, habe ich schon gemerkt, dass die das zwar forderten, aber überhaupt nicht verstanden hatten und DNS von einem Web-Proxy nicht unterscheiden konnten, sie dachten, dass der DNS-Server die Webseiten verteilt, weil sie sich das Internet so wie das alte BTX vorstellten, als sei das Internet nichts anderes als eine Webseitenverteilung, und der Provider würde die Webseiten per DNS an die Kunden verteilen, darunter auch die Webseiten mit den Kinderpornos, als wäre das so eine große Webseitenschleuder, weshalb man dem Provider sagen müsse, dass er doch einfach die Webseiten mit den Pornos aus seinem DNS löschen solle.

Nun hatte man aber so ein bisschen nachgedacht, und deshalb an die Provider die Anforderung formuliert, dass man dem Bundeskriminalamt unbedingt einen ungesperrten Internet-Zugang zur Verfügung stellen müsse, sonst könnten die ja nicht ermitteln. Die Provider müssten nachweisen, dass sie das können, für das BKA einen ungesperrten Zugang bereitzustellen.

Ich hatte damals erläutert, dass man dafür gar nichts machen müsse und diese DNS-Sperren Nutzer wie das BKA oder Firmennetze (aus den oben dargelegten Gründen) gar nicht betreffen würden und die vom Ministerium geforderte Sperre völlig wirkungslos sei, man für das BKA als gar nichts tun müsse. Der Internet-Anschluss des BKA wurde nämlich nach meinem damaligen Wissensstand vom BSI verantwortet, und die müssten sicherlich in der Lage sein und hätten das sicherlich auch gewusst, dass man für so einen Laden auf jeden Fall eigene Recursor aufsetzt, womit die von der „Sperre“ aus besagten Gründen nichts merken würden.

Man sah mich äußerst verständnislos an, wie ich denn behaupten könne, dass DNS-Sperren wirkungslos seien. Ursula von der Leyen war zwar nicht selbst dabei, hat sich dann aber persönlich über mich beschwert, dass ich dort herumpolemisiert hätte, indem ich gesagt hätte, die Sperren seien wirklungslos, obwohl sie doch in Norwegen funktioniere. (In Norwegen funktioniert sie auch nicht, aus demselben Grund, selbes Internet, da haben die Provider aber einfach die Klappe gehalten, außerdem bezog sich das dort auf die Mobilfunknetze, und bis 2009 hatte man da halt nur ein paar Handys aus der Steinzeit der Smartphones, auf denen man natürlich keine Recursor aufgesetzt hat.)

Aber auch 14 Jahre später – in der Zeit baut sogar Berlin einen Flughafen – hat sich das noch nicht zu den Juristen rumgesprochen, dass das keine wirksame Methode ist, und wenn sie nicht wirksam ist, dann auch nicht geeignet und damit nicht verhältnismäßig und nicht erforderlich ist, also nicht angeordnet werden kann.

Am besten lässt man die Politiker und die Juristen mit ihren eingebildeten Sperren einfach glücklich werden und stört sich nicht weiter dran, sagt ihnen einfach nicht, dass der Hokus-Pokus nur auf die wirkt, die weder Firmennetz haben noch sich mit den Grundlagen des Internet auskennen.

Also erzählt's ihnen nicht.

Update: Leser wiesen noch auf den Resolver unbound hin, der bei vielen Distributionen auch mit dabei sei.

Den kannte ich noch gar nicht, aber der sieht nach kurzem Blick in die Dokumentation auch gut aus und scheint vor allem für kleinere Netzwerke gut geeignet und etwas schmaler zu sein.