Raspberry Pi als Netzwerk Werbefilter

Wer kennt nicht die lästige Werbung im Internet, überall blinkt es und will uns Sachen andrehen die man nicht braucht oder schon hat.

Was kann man dagegen machen, ganz einfach man benutzt eine kleine Zauberkiste den Raspberry Pi. Wie funktioniert das ganze, wir installieren einen DHCP-Server, einen DNS-Server und eine Host Datei die die Werbenetze ins nichts leitet (Blackhole).Der DHCP-Server ist nur Optional, wenn man das ganze transparent machen möchte.

An die Vorbereitung.

Wir installieren erst mal die Programme

sudo apt-get update && sudo apt-get -y upgrade
sudo apt-get install pdnsd && sudo apt-get install isc-dhcp-server

Am besten ist es wenn wir unseren Raspberry Pi eine feste Ip vergeben.

sudo nano /etc/network/interfaces

hier mal mein inhalt. Bitte die IPs bei euch anpassen

auto lo
iface lo inet loopback
 
iface default inet dhcp
 
# Bestehendes Netzwerk
iface eth0 inet static
address 192.168.1.55
netmask 255.255.255.0
#broadcast 192.168.1.255
network 192.168.1.0
gateway 192.168.1.1
dns-nameservers 192.168.1.55

Wenn das gemacht wurde müssen wir den DHCP-SERVER konfigurieren dazu.

sudo nano /etc/dhcp/dhcpd.conf

zeige hier den Gesamten Inhalt der dhcpd.conf. Das wichtigste ist am Ende der Datei dort wird alles für das Netzwerk angegeben.

# Sample configuration file for ISC dhcpd for Debian
#
#

# The ddns-updates-style parameter controls whether or not the server will
# attempt to do a DNS update when a lease is confirmed. We default to the
# behavior of the version 2 packages ('none', since DHCP v2 didn't
# have support for DDNS.)
ddns-update-style none;

# option definitions common to all supported networks...
#option domain-name "example.org";
#option domain-name-servers 192.168.1.55;

#default-lease-time 600;
#max-lease-time 600000;

# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
authoritative; //Das bedeutet das er der BOSS im Netzwerk ist. Router DHCP-Server ausschalten.

# Use this to send dhcp log messages to a different log file (you also
# have to hack syslog.conf to complete the redirection).
log-facility local7;

# No service will be given on this subnet, but declaring it helps the 
# DHCP server to understand the network topology.

#subnet 192.168.1.0 netmask 255.255.255.0 {
#}

# This is a very basic subnet declaration.

#subnet 192.168.2.0 netmask 255.255.255.0 {
#range 192.168.2.50 192.168.2.90;
#option domain-name-servers 192.168.1.1;
#option routers 192.168.1.1;
#}

# This declaration allows BOOTP clients to get dynamic addresses,
# which we don't really recommend.

#subnet 10.254.239.32 netmask 255.255.255.224 {
# range dynamic-bootp 10.254.239.40 10.254.239.60;
# option broadcast-address 192.168.1.255;
# option routers rtr-239-32-1.example.org;
#}

# A slightly different configuration for an internal subnet.
#subnet 10.5.5.0 netmask 255.255.255.224 {
# range 10.5.5.26 10.5.5.30;
# option domain-name-servers ns1.internal.example.org;
# option domain-name "internal.example.org";
# option routers 10.5.5.1;
# option broadcast-address 10.5.5.31;
# default-lease-time 600;
# max-lease-time 7200;
#}

# Hosts which require special configuration options can be listed in
# host statements. If no address is specified, the address will be
# allocated dynamically (if possible), but the host-specific information
# will still come from the host declaration.

#host passacaglia {
# hardware ethernet 0:0:c0:5d:bd:95;
# filename "vmunix.passacaglia";
# server-name "toccata.fugue.com";
#}

# Fixed IP addresses can also be specified for hosts. These addresses
# should not also be listed as being available for dynamic assignment.
# Hosts for which fixed IP addresses have been specified can boot using
# BOOTP or DHCP. Hosts for which no fixed address is specified can only
# be booted with DHCP, unless there is an address range on the subnet
# to which a BOOTP client is connected which has the dynamic-bootp flag
# set.
#host fantasia {
# hardware ethernet 08:00:07:26:c0:a5;
# fixed-address fantasia.fugue.com;
#}

# You can declare a class of clients and then do address allocation
# based on that. The example below shows a case where all clients
# in a certain class get addresses on the 10.17.224/24 subnet, and all
# other clients get addresses on the 10.0.29/24 subnet.

#class "foo" {
# match if substring (option vendor-class-identifier, 0, 4) = "SUNW";
#}

#shared-network 224-29 {
# subnet 10.17.224.0 netmask 255.255.255.0 {
# option routers rtr-224.example.org;
# }
# subnet 10.0.29.0 netmask 255.255.255.0 {
# option routers rtr-29.example.org;
# }
# pool {
# allow members of "foo";
# range 10.17.224.10 10.17.224.250;
# }
# pool {
# deny members of "foo";
# range 10.0.29.10 10.0.29.230;
# }
#}
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.70 192.168.1.100;
option domain-name-servers 192.168.1.55; //IP unseres DNS-Caches
option domain-name "localhost";
option routers 192.168.1.1;
option broadcast-address 192.168.1.255;
default-lease-time 60000;
max-lease-time 600000;
}

Wie man sieht ist der PC mit der IP 192.168.1.55 für den DNS Dienst verantwortlich, dies ist unser Raspberry Pi der dann mit Hilfe von pdnsd und der Host Datei unser Blackhole schafft.

Jetzt Konfigurieren wir unser DNS catching Server dazu öffnen wir die Datei pdnsd.conf

sudo nano /etc/pdnsd.conf

hier mein Inhalt dieser Datei

 global {
 neg_rrs_pol=on;
 par_queries=1;
 perm_cache=16000;
 cache_dir = "/var/cache/pdnsd";
 run_as = "pdnsd";
 server_port=53;
 server_ip = 192.168.1.55; // Use eth0 here if you want to allow other machines on your network to query pdnsd.
 status_ctl = on;
 paranoid = on;
 min_ttl = 23h; // Retain cached entries at least 23 hours
 max_ttl = 1w; // One week. timeout = 10; // Global timeout option (10 seconds).
 query_method=tcp_only;
 }
  server {
 label=OpenDNS;
 randomize_servers = off;
 ip=208.67.222.123; // Opendns
 ip=208.67.220.123; // Opendns
 #ip=213.73.91.35; // CCC DNS-SERVER
 #ip=204.152.184.76;
 #ip=194.150.168.168;
 #ip=80.237.196.2;
 #ip=192.95.202.198; // CCC DNS-SERVER
 #ip=4.2.2.1; //Level-3
 #ip=4.2.2.2;
 #ip=4.2.2.3;
 #ip=4.2.2.4; //Level-3
 #ip=8.8.8.8; // GOOGLE-DNS
 #ip=8.8.4.4; // GOOGLE-DNS
 timeout=30;
 uptest=ping;
 interval=30;
 ping_timeout=300;
 proxy_only= on;
 purge_cache=off;
 caching= on;
 preset= off;
}
/*
 server {
 label = "resolvconf";
 proxy_only = on;
 }
*/

 source {
 ttl=86400;
 owner = localhost;
 file = "/etc/hosts_block";
 }

rr {
 name = localhost;
 reverse = on;
 a = 127.0.0.1;
 owner = localhost;
 soa = localhost,root.localhost,42,86400,900,86400,86400;
 }

Wie man sehen kann, sind bei mir nur zwei DNS-Server Aktiv es sind die DNS-Server von Opendns Family shild (dieser DNS filtert nicht Jugendfreies raus).

Jetzt müssen wir noch dafür sorgen das pdnsd auch unseren Dns Server startet dazu einfach, in der Datei /etc/default/pdnsd den Eintrag von Auto_Mode auf off stellen

 Auto_Mode=off 

Jetzt brauchen wir nur noch die die Host Datei diese speichern wir erstmal in unser Home Verzeichnis ab.

wget http://winhelp2002.mvps.org/hosts.txt -P /home/pi/

dann kopieren wir diese Host Datei in das verzeichnis /etc

sudo cp /home/pi/hosts.txt /etc/hosts_block

man kann jetzt einen Crontab anlegen damit z.B. jede Woche die Liste Aktuallsiert wird. Dazu muss man nur ein Skript erstellen das dann ausgeführt wird. Ein solches Skript kann so ausehen.

update.sh

#!/bin/bash
rm /home/pi/hosts.txt
wget http://winhelp2002.mvps.org/hosts.txt -P /home/pi/
cp /home/pi/hosts.txt /etc/hosts_block

Der Crontab eintrag.

sudo crontab -e

00 01 * * 1 sudo bash /home/pi/update.sh

Bei meinen Crontab  wird jeden Montag um 1 Uhr nachts mein Skript ausgeführt.

 

So jetzt sind wir endelich fertig und können den Raspberry Pi neu starten, falls es zu probleme mit dem isc-dhcp-server kann es sein das man erst bind löschen muss. Bind oder auch Bind3 ist selbst ein DHCP Server der deinstalliert werden muss.

sudo reboot

Jetzt können wir uns freuen da alle Netzwerkgeräte unseren DNS benutzen und damit nahe zu werbefrei sind, das betrifft Handys, Smart-TV, XBOX usw.

Ein Gedanke zu „Raspberry Pi als Netzwerk Werbefilter

Schreibe einen Kommentar

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