DD-WRT AdBlock

DD-WRT AdBlock

Da die modernen Medien mittlerweile von Werbung überflutet werden, habe ich mir mal gedacht meinem Router beizubringen, diese zu entfernen. Damit fällt auch die Anzeige auf mobilen Geräten wie Smartphones/iPads/etc weg, solange sich diese im lokalen Netzwerk befinden. Um mich kurz zu halten, werde ich einfach sofort mit dem Tutorial starten:

1.
Ins Webinterface einloggen und unter „Adminstration>Commands“ folgendes unter „Save Startup“ speichern:

#!/bin/sh
logger Startup up script executing
if test -s /tmp/hosts0
then
        rm /tmp/hosts0
fi

sleep 10
logger Downloading http://dd-wrt.gmlblog.de/hosts0
wget -O - http://dd-wrt.gmlblog.de/hosts0 > /tmp/hosts0
grep addn-hosts /tmp/dnsmasq.conf || echo "addn-hosts=/tmp/hosts0" >>/tmp/dnsmasq.conf
logger Restarting DNSMasq
killall dnsmasq
dnsmasq --conf-file=/tmp/dnsmasq.conf

Zur Erklärung:
Der Router läd eine fertige Hostdatei herunter, die die meisten Werbeserver enthält und wird dann dem Nameserver (dnsmasq) des Routers hinzugefügt. Die hier angebotene Datei wird von meinem Server am Wochenende aus mehreren Hostdateien u.a. von http://www.mvps.org/winhelp2002/hosts.txt generiert. Dazu habe ich noch manuell weitere Server hinzugefügt, damit die Werbung noch auf den iDevices blockiert wird. Eine Liste aller Anbieter der Hostfiles befindet sich am Anfang der Datei.

2.
Dann muss unter „Services“ DNSMasq und Local DNS auf „Enable“ gestellt werden:

dnsmasq
Wichtig hierbei ist, dass in dem Feld für die zusätzlichen Optionen für DNSMasq die letzte Zeile frei bleibt, falls Ihr dort noch was stehen habt. Sonst wird nachher in der Config der neue Parameter nicht übergeben. Ansonsten wie auf dem Bild leer lassen.

3.

Einen neuen Cronjob unter „Administration“ hinzufügen:

0 0 * * 0 root /tmp/.rc_startup

Cronjob
Damit wird die hosts Datei jede Woche Sonntags nachaktualisiert. Alternativ würde auch ein Routerneustart dasselbe bewirken.

(Bild links veraltet)

 

 

Zum Schluss noch den Router neustarten und das wars. Keine nervige Werbung mehr in Apps, auf Webseiten, etc.

Die Hosts Datei kann natürlich auch so heruntergeladen werden:

http://dd-wrt.gmlblog.de/hosts0

Letzte Hostdatei Aktualisierung und md5-Hash:

Ich habe mich für die Variante einer fertiggenerierten externen Hostdatei entschieden, da nicht alle Router so viel Rechenleistung mitbringen, mal eben schnell so eine aus mehreren Dateien zu erstellen, wie hier im DD-WRT-Wiki erklärt ist. Dadurch bootet ein Router wesentlich schneller.

[note]Changelog:
10.01.2013

  • Filterung von Echofonwerbung hinzugefügt

02.03.2014

  • Erweiterung der Liste durch 2. Liste von http://jamesisbored.com/iphone/adblock.
    Aufgrund von Komplikationen ist die stündliche Nachaktualisierung vorübergehend gestoppt.

09.03.2014

  • sleep Befehl hinzugefügt. Dadurch sollte nun vermieden werden, dass der Router den Downloadvorgang beginnt, bevor eine Verbindung ins Internet hergestellt wurde.

13.03.2014

  • Hostfile generator gestartet. Die fertige Hostdatei wird einmal die Woche aktualisiert. Den Cronjob oben habe ich entsprechend angepasst.

05.05.2014

  • Md5 Hash hinzugefügt.

30.07.2015

  • Zwei weitere Hostsdatei-Adressen hinzugefügt

[/note]

55 Kommentare zu „DD-WRT AdBlock

    • Hi!
      Jein- es wird eine etwas andere Methode zum Blocken verwendet. Bei AdBlockPlus wird nur soweit ich weiß Webseitencode ausgeblendet. Hierbei wird ein kompletter Server über seine IP-Adresse gesperrt, bzw auf das lokale Gerät umgeleitet. D.h. Die Werbefenster im Browser könnten zwar noch angezeigt werden, aber dann ohne Inhalt. Bei iOS wird z.B. erst die IP des Werbeservers abgefragt. Ist der nicht erreichbar, wird die Werbung einfach nicht angezeigt. Ist sonst nur praktisch wenn man offline ist. Wenn aber Entwickler die Werbung in ihr Programm fest einprogrammieren, hilft der beste Werbeblocker nicht 😉
      Gruß

  1. Also ich habe ein Problem und zwar das bei mir nicht so wirklich funktioniert. Ich habe nach deiner Anleitung Schritt für Schritt umgesetzt, aber geht nicht.
    Ich besitze TP 1043nd mit der DD-WRT v24SP2- (03/25/13) std Version,
    DNSMasq, Lokaler DNS, No DNS Rebind sind jeweils eingeschaltet und Zusätzliche DNSMasq-Optionen leer gelassen. Den Rest so wie beschrieben eingerichtet.
    Ich hoffe du kannst mir weiter helfen.

    • Hi, überprüf mal die /tmp/hosts0 ob dort was drinsteht. Wenn nicht, wäre es eventuell möglich, dass das Skript zum downloaden der Datei ausgeführt wird, bevor der Router nach dem Starten eine Verbindung zum Internet hergestellt hat. Dann würde ein „sleep 5“ in der Zeile vor „logger Downloading (…)“ genügen.

      • So geht es natürlich auch 😉
        Aber bitte die Funktion selbst entweder noch aufrufen oder die Syntax aus dem Schnipsel rauslöschen,so ist die sonst überflüssig.
        Sollte aber im Startupscript sinnigerweise ganz unten stehen (danach das Skript von oben) sonst könnten andere manuell hinzugefügte systemrelevante Änderungen behindert werden.

        @Nexus: schön zu hören, dass es jetzt geht. Klar darfst du ändern. Kannst alles umschreiben wie du willst- ist ja dein Router. Ich mach ja nur Vorschläge wie man es machen kann 😉

  2. Hallo, danke für die Anleitung. Wie macht man das wenn schon ein OpenVpn Script schon läuft? Kann ich das Adblock Script einfach unter das vom OpenVpn setzen? Danke

    • Joa kannst du. Dann musst du aber die erste Zeile vom Schnipsel weglassen. Und achte darauf, dass du keine Schleife in deinem ovpn-script davor laufen hast, sonst wirds nicht ausgeführt.

      • Danke für deine Antwort! Sorry, bin noch relativ unerfahren. Sieht das dann etwa so aus:

        echo „********.de“ > /tmp/auth.txt
        echo „********“ >> /tmp/auth.txt

        logger Startup up script executing
        if test -s /tmp/hosts0
        then
        rm /tmp/hosts0
        fi

        sleep 10
        logger Downloading http://dd-wrt.gmlblog.de/hosts0
        wget -O – http://dd-wrt.gmlblog.de/hosts0 > /tmp/hosts0
        grep addn-hosts /tmp/dnsmasq.conf || echo „addn-hosts=/tmp/hosts0“ >>/tmp/dnsmasq.conf
        logger Restarting DNSMasq
        killall dnsmasq
        dnsmasq –conf-file=/tmp/dnsmasq.conf

        oder fehlt da noch was??? Vielen Dank nochmals 🙂

  3. Hat bis jetzt immer super funktioniert die Methode.

    Seit kurzem wird jedoch wieder Werbung eingeblendet, an der Config habe ich nichts geändert. Der Router zieht auch erfolgreich die aktuelle Liste, Werbung wird trotzdem angezeigt.
    Was läuft da schief?

    • Hi, betrifft das sämtliche Webseiten oder nur eine? Eventuell hat der Ad-dienstleister die IP gewechselt, dann würde die noch nicht auf der Liste stehen.
      Wenn überall Werbung eingeblendet werden sollte, check mal bitte auf dem router, ob die Datei /tmp/hosts0 vorhanden ist und auch Inhalt hat. Dann guck mal bitte in /tmp/dnsmasq.conf ob dort „addn-hosts=/tmp/hosts0“ vorhanden ist und mit „ps|grep dnsmasq“ ob der Prozess läuft.
      Sonst kannste nochmal probieren den Dienst neuzustarten- wie im script oben mit „killall dnsmasq && dnsmasq –conf-file=/tmp/dnsmasq.conf“

  4. Danke für das schöne kleine Script! Hat bei mir auch eine ganze Weile funktioniert, aber seit irgend einer DD-WRT Version (irgendwann im Januar 2015, bei mir Version 25974) gibt es ein Problem mit dnsmasq, das scheinbar die config-Datei löscht und damit auch den „addn-hosts“ Parameter.

    Ich glaube es funktioniert, wenn man Zeile 11 im Skript löscht und „addn-hosts=/tmp/hosts0“ als „zusätzliche dnsmasq Option“ unter ‚Services‘ speichert!

    Hoffentlich klappt es bald wieder „normal“!

  5. Hi gammel,

    deine Anleitung ist klasse, danke dafür!

    Frage: gibt’s irgendeine Möglichkeit, Youtube Ads auf Mobilgeräten zu verbannen?

    • Hi, für Android gibts Adblock plus, aber habe ich nie getestet, da ich iOS habe. Und da hab ich auch noch nichts brauchbares gefunden, sry.

      • Hallo gammel,

        so meinte ich das nicht. Die Hosts Datei müsste erweitert werden, aber die Adserver von YT sind mir unbekannt.
        Könntest du davon welche aus EasyList nehmen? Diese werden recht zuverlässig geblockt mit Adblock Edge.

        Oder anders gefragt: gibt’s ein Programm, das hosts aus mehreren beliebigen Quellen zusammenstellen kann?

        • Du vergleichst Äpfel mit Birnen: Die Easylist basiert auf der Erkennung und Ausblendung von HTML Text in einer Webseite. Der Hostblocker leitet DNS-Anfragen auf den lokalen Computer um. Daher kann man Easylist und eine Hostdatei nicht kombinieren. Und wie du schon sagtest: Die Adserver, die YT nutzt, müssen herausgefunden werden. Mit Wireshark z.B. kann man ganz gut Netzwerktraffic aufzeichnen und analysieren.
          Man kann aber mit der hosts Datei nur DNS-Anfragen umleiten. Wird in einer Webseite direkt auf eine IP-Adresse zugegriffen, funktioniert die Umleitung für diese Anfrage nicht.

    • You can try it. But then you have to adjust the cronjob in the administration-tab.
      But you’ll have a general delay within get-requests. The hosts file is a bit too big for the router to process it in a very short time.

  6. Hallo gammel,

    kannst du bitte folgende Seiten dazu fügen?

    http://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&showintro=0&mimetype=plaintext

    https://adaway.org/hosts.txt

    http://hosts-file.net/download/hosts.txt ( vorsicht 12mb)

    und ich habe Frage wäre das möglich das du das Skript veröffentlichst der das ganze umwandelt,
    hab halt sorgen wenn deine Seite mal nicht funktioniert das keine Updates mehr kommen,
    mein Router hat genug power (Netgear R70001GHz-Dual-Core-CPU) das der das selbst erledigen kann.

    Danke

    • Hallo Sam,
      danke,die ersten beiden habe ich hinzugefügt. Die letzte Datei werde ich aufgrund der Größe nicht hinzufügen. Manche ältere Routermodelle wie z.B. der Linksys WRT54GL hat mit der jetzigen Größe schon zu kämpfen.
      Wenn ich den Dienst mal einstellen sollte, werde ich den Code veröffentlichen, keine Sorge.

  7. Hallo gammel,

    danke für Dein Skript, funktioniert super. Nur die Hostdatei ist schon länger nicht mehr aktualisiert worden.

    • openwrt basiert auf Linux, also müsste das theoretisch auch funktionieren. Das Script muss aber bestimmt noch angepasst werden.

  8. Hallo,

    ich nutze eine Logitech Harmony Fernbedienung und eine Squeezebox Boom in meinem Netzwerk. Sobald ich Dein Script aktiviere, habe ich mit beiden enorme Probleme. Heißt, sie sind nicht mehr nutzbar, die SqueezeBox z.B. findet den Server mysqueezebox.com nicht mehr.

    Ist Dir da etwas zu bekannt?

    Grüße
    Johannes

    • Hallo Johannes,
      die von dir genannte URL ist nicht in der Hosts-Datei. D.h. du müsstest die Verbindungen die deine Squeezebox aufbaut irgendwie sniffen- z.B. mit Wireshark „dazwischenklemmen“. Eine andere Möglichkeit könnte die Rechenleistung des Geräts sein. Lässt du die Hostdatei direkt auf der Box laufen? Je schwächer die CPU, desto länger dauert die Abfrage. Zum Testen könntest du die Datei manuell mal um die hälfte kürzen.

  9. Hallo,
    Ich habe bei mir zusätzlich noch eine Bridge mit eigenem Dhcp am laufen. Das blocking funktioniert leider nicht auf der bridge.
    Wenn ich das richtig sehe ist meine Hauptleitung per Bridge und mein Gast wlan ohne bridge. Daher läuft das blocking wohl nur dort.

    http://imgur.com/a/anbII

    Weißt du eine Lösung?

    Grüße

    • Hallo nidar,
      du könntest in den DHCP settings den DNS „Forced DNS redirection?“ auf den Router umbiegen. Falls die IP Adresse bei den Clients schon als DNS eingetragen sein sollte, kannst du noch versuchen, den integrierten DNSmasq mit „addn-hosts=/tmp/hosts0“ einzustellen (Services-Additional DNSMasq Options). Vielleicht funktioniert das.

  10. Ich sehe gerade, dass die Hosts-Datei zuletzt im Mai 2017 aktualisiert wurde.
    Hängt da etwas? Ich habe den dd-wrtblock sehr gerne genutzt.

    • hmm dann scheint da wohl wieder eine Quelle versiegt zu sein. Ich überprüfe das, danke 😉
      die Datei vom März sollte aber hoffentlich noch funktionieren.

  11. Hallo,
    die so generierte Host Datei hat aktuell ca. 55.000 Einträge.
    Davon sind über 16.000 doppelt und teilweise dreifach vorhanden.

    Wäre es möglich, die dubletten mit der Zeile:
    sed -e ’s/\r//‘ -e ’s/127\.0\.0\.1/0\.0\.0\.0/‘ -e ‚/^0\.0\.0\.0/!d‘ -e ’s/ \+/\t/‘ -e ’s/#.*$//‘ -e ’s/[ \t]*$//‘ -e ‚/localhost$/d‘ -e ‚/\.dropbox\.com$/d‘ $temphosts2

    unmittelbar nach dem zusammenführen zu entfernen?
    Siehe

    Dadurch hätte man etwas mehr Speicher und etwas mehr Geschwindigkeit.

    Gruß

      • Hallo,
        jetzt habe das ganze nochmals optimiert, indem ich, direkt nach dem download folgende Zeile in den Startbereich eingefügt habe:

        sed -n ‚/^#/p‘ hosts0 > hosts_comments.txt && echo # Optimiert am %date% %time% >> hosts_comments.txt && sed -i -e ‚/^#/d;‘ „hosts0“ && sed -i -e ’s/0.0.0.0//g‘ hosts0 && sed -i -e ‚N;N;N;N;N;N;N;N;N;s/\n//g‘ hosts0 && sed -i ’s/^\s/0.0.0.0 /‘ hosts0 && cat hosts0 >> hosts_comments.txt && rm hosts0 && mv hosts_comments.txt hosts0

        Damit werden mehrere Einträge in eine Zeile geschrieben und ich spare nochmals knapp 25% Speicher.
        Eventuell wird so auch minimal schneller?

    • Hallo Loucas,
      das Project supporte ich aktuell nicht mehr. Es gibt mittlerweile viele bessere kostenlose tools die effizienter mit wesentlich mehr Einträgen und ohne „Gebastel“ funktionieren (z.B. adguard home, pihole).
      VG

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

*

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.