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:

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:

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: date

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.

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

Veröffentlicht in Allgemein, IT Getagged mit: , , , , , , ,
47 Kommentare zu “DD-WRT AdBlock
  1. Simon sagt:

    Nice one. Mal gucken, wie ich das in den dnsmasq reingepfriemelt bekomme, der auf meiner Fritzbox läuft.

  2. Simon sagt:

    Joah. Ist noch nicht im Stable Tree drin. Ich bau mir erstmal n Privoxy und lass den transparent laufen.

  3. Ben sagt:

    Saustark, dass Du die um iOS erweiterst. Blockt das dann so gut wie easylist und co?

    DANKE!

    • gammel gammel sagt:

      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ß

  4. Nexus sagt:

    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.

    • gammel gammel sagt:

      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.

    • Ben sagt:

      # Function: wait_for_connection
      wait_for_connection() {
      # Wait for an Internet connection.
      # This possibly could take a long time.
      while :; do
      ping -c 1 -w 10 http://www.freebsd.org > /dev/null 2>&1 && break
      sleep 10
      done
      }

      • gammel gammel sagt:

        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 😉

  5. speedy sagt:

    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

    • gammel gammel sagt:

      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.

      • speedy sagt:

        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 🙂

        • gammel gammel sagt:

          Wenn bei dir ganz am Anfang deines Startupscripts „#!/bin/sh“ steht, kannste das so speichern. Keine Ursache 😉

  6. speedy sagt:

    Super.. funzt perfekt… Danke!!!

  7. evo sagt:

    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?

    • gammel gammel sagt:

      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“

      • evo sagt:

        Oh, es war viel einfacher: Hatte bei meinem Client testweise einen OpenDNS Server eingetragen. Dann wird wie gewohnt überall Werbung eingeblendet.
        Jetzt ist wieder alles schön 🙂

  8. auskunft sagt:

    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“!

  9. shoso sagt:

    Hi gammel,

    deine Anleitung ist klasse, danke dafür!

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

    • gammel gammel sagt:

      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.

      • shoso sagt:

        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?

        • gammel gammel sagt:

          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.

  10. R G sagt:

    Can you save to the Firewall script instead of the Startup script to obviate the delay issues associated with WANup?

    • gammel gammel sagt:

      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.

  11. panorama sagt:

    Gibt es einen Grund, warum Feedly geblockt wird?

    • gammel gammel sagt:

      Da die URL aus einer der Adressen (im Header der Hosts-Datei) bezogen wurde, kann ich dir das nicht sagen. Aber über google habe ich auf die schnelle das hier gefunden: http://www.makeuseof.com/tag/feedly-was-stealing-your-content-heres-the-story-and-their-code/
      Du kannst dir theoretisch eine whitelist in den startupcode basteln. Mit sed wird dann die entsprechende Adresse gelöscht und die Hosts-Datei neu geschrieben. http://www.cyberciti.biz/faq/howto-sed-exact-match-and-delete-words-within-a-file/
      Keine Ahnung wie sich das auf die Routerlast auswirkt, das würde ich am besten mal über telnet oder so testen.

      • panorama sagt:

        So?

        sed ’s/feedly.com http://www.feedly.com//g‚ hosts0 > hosts0

        • gammel gammel sagt:

          so wie das in der hosts-datei steht. in diesem fall "feedly.com www.feedly.com"
          (ah okay wordpress haut da ohne < code > ein http:// vor- das natürlich weglassen)
          das funktioniert aber auch nur solange die beiden nebeneinanderstehen. wenn sich irgendwas in der Hauptdatei ändert, kann es sein, dass mein Generator die wieder durcheinanderwürfelt. Dann findet sed da nichts mehr. Dann müsstest du die einzelnd rauslöschen.
          Ich würde das lieber in eine neue Datei schieben und nach dem Schreiben die Datei wieder umbenennen.
          Also eher so:

          sed 's/feedly.com www.feedly.com//g' /tmp/hosts0 > /tmp/hosts1
          rm /tmp/hosts0
          mv /tmp/hosts1 /tmp/hosts0

  12. Sam sagt:

    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

    • gammel gammel sagt:

      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.

  13. adams sagt:

    Hallo gammel,

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

  14. Nexus sagt:

    Funktioniert das eventuell auch auf Openwrt ?

    • gammel gammel sagt:

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

  15. Johannes sagt:

    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

    • gammel gammel sagt:

      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.

  16. nidar sagt:

    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

    • gammel gammel sagt:

      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.

Schreibe einen Kommentar

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

*