Die (noch) aktuelle Fritz!Box 7490 hat 256MB RAM, 512MB NAND Flash und einen MIPS DualCore mit 600MHz, das sind eigentlich die perfekten Vorraussetzungen für alle Netzwerkaufgaben. Mein Ziel ist daher - unter Beibehaltung der "normalen" Funktionen" - folgende Software auf der Fritz!Box laufen zu lassen:
- dnsmasq als lokaler DNS- und DHCP-Server
- unbound als DNSSEC Resolver und QName-Minimization "Anonymizer"
- AD-Block Filter
Falls kein Build-Server mit Linux vorhanden sein sollte, kann man das VirtualBox Image von Freetz-Linux verwenden.
Freetz bauen
Zunächst wird die aktuelle Entwicklungsversion ausgecheckt und das YourFritz Tool (für das in_memory Update später) geholt:svn co http://svn.freetz.org/trunk freetz-trunk git clone https://github.com/PeterPawn/YourFritz.git
In der offiziellen Paketliste fehlt Unbound als Option, daher habe ausgehend von einem IPPF-Post einen eigenen Patch angefertigt. Da die Dateisystemberechtigungen nicht per "pacth" gesetzt werden und das Freetz-Build System auch nicht daran "denkt", müssen die Ausführungsrechte ber "chmod" gesetzt werden - sonst startet Unbound später im Image nicht.
Bei der Gelegenheit patche ich auch gleich noch das OpenSSL Makefile, um später auch Perl mit Net::SSLeay installieren zu können.
Außerdem wird cURL so angepasst, dass es sein Zertifiaktsbundle im OpenSSL Verzeichnis (/mod/etc/ssl) sucht.
wget https://loetzimmer.de/patches/freetz_unbound_1.6.7.patch wget https://loetzimmer.de/patches/freetz_openssl_ripemd.patch wget https://loetzimmer.de/patches/freetz_curl_ca-bundle.patch cd freetz-trunk/ patch -p0 < ../freetz_unbound_1.6.7.patch patch -p1 < ../freetz_openssl_ripemd.patch patch -p1 < ../freetz_curl_ca-bundle.patch ### WICHTIG !!! ### chmod a+x make/unbound/files/root/etc/init.d/rc.unbound chmod a+x make/unbound/files/root/etc/default.unbound/unbound_conf chmod a+x make/unbound/files/root/usr/lib/cgi-bin/unbound.cgi make menuconfig
Paket Unbound 1.6.7 auswählen |
ggfs. die PThread Library auswählen |
Um Updates später per Webinterface flashen zu können, erstelle ich ein signiertes Image (und vergebe dafür ein Passwort für den privaten Schüssel). Für den ersten Flash braucht man auch noch ein in_memory Image, deshalb wähle ich diese Option ebenfalls an.
Firmware packaging options |
Image flashen
Das zuvor vom GIT heruntergeladene Paket YourFritz wird zum Flashen benutzt. dazu ist es hilfreich das In-Memory Image gleich in den betreffenden Ordner zu kopieren.cp images/7490_06.90-freetz-devel-<SVN-rev>M.de_<date>.image.in-memory ../YourFritz/eva_tools/ cd ../YourFritz/eva_tools/
Da die Tools etwas streng bezüglich der Systemvoraussetzungen sind müssen noch ein paar Vorkehrungen getroffen werden:
apt-get install netcat-openbsd socat perl -pi -e 's/^#!.*sh/#!\/bin\/bash/' eva_*
Der Flash-Vorgang verläuft folgendermaßen:
- Fritz!Box starten und abwarten bis zum Boot-Prompt
- Umschalten des Boot-FW Images auf das vorherige FW-Image (z.B. von 6.90 auf das zuvor geflashte 6.83). So bleibt das funktionierende Image unangetastet.
- Neustart abwarten bis zum Boot-Prompt
- Flashen des In-Memory Images per eva_to_memory
Im Beispiel ist die IP des verwendeten Rechners 192.168.42.42 und die der Fritzbox 192.168.42.1.
./eva_switch_system eth0 192.168.42.1 192.168.42.42 #Box mit Strom versorgenAbwarten bis die Box neustartet und ggfs. die Box erneut vom Strom trennen und starten.
./eva_discover INTERFACE=eth0 TO=192.168.42.1 FROM=192.168.42.42 BLIP=1 HOLD=0 #Box mit Strom versorgen ./eva_to_memory 7490_06.90-freetz-devel-<SVN-rev>M.de_<date>.image.in-memory 192.168.42.1Jetzt solte das Image geflasht werden und nach dem anschließenden Reboot das Freetz-Webinterface unter http://fritz.box:81/ erreichbar sein.
Nacharbeit
Wenn alles funktioniert hat, muss Unbound im Webinterface noch auf Automatisch Starten gestellt werden und DNSMasq muss zusätzlich Unbound als Upstream Nameserver verwenden:127.0.0.1#5353
Update (2018-02-19): Das Häkchen bei den Provider Nameservern ist unbedingt zu entfernen! Im IP-Phone Forum gibt es einen Thread der meine plötzlichen Reboots darauf zurückführt - und es funktioniert tatsächlich!
Nicht vergessen, DHCP im Fritz!Box Web-Frontend abzuschalten, sonst gibt es seltsame Effekte zwischen multid und dnsmasq bei der Adressvergabe!
Der Crontab Dienst sollte aktiviert werden und folgender Eintrag hinzugefügt werden (alles eine Zeile!!!):
44 4 1 * * rm -f /tmp/root.hints ; wget -q -T 5 -O /tmp/root.hints http://www.internic.net/domain/named.cache 2>/dev/null ; if [ $? -eq 0 -a -n "$(grep -E 'A\.ROOT-SERVERS\.NET\..*A.*[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' /tmp/root.hints)" ] ; then mv /tmp/root.hints /tmp/flash/unbound/ ; /etc/init.d/rc.unbound restart > /dev/null ; else rm -f /tmp/root.hints ; fiUnd wenn wir schon bei der Crontab sind, können wir hier auch gleich die AdBlock Liste holen:
12 5 * * * wget -q -O - "http://pgl.yoyo.org/as/serverlist.php?hostformat=dnsmasq-server&showintro=0&mimetype=plaintext" | grep -i -v -E "MEINE_AUSNAHMEDOMAIN1|AUSNAHME_2" > /tmp/adhosts && /etc/init.d/rc.dnsmasq restartUm den AdBlock zu aktivieren fügt man den DNSMasq Optionen (für Experten)
--servers-file=/var/tmp/adhostshinzu.
Falls cURL mit Openssl Support installiert wurde, sollte gelegentlich ein aktuelles CA-Bundle geholt werden:
# Freetz: crontab 42 4 1 * * curl -k -s -o /var/InternerSpeicher/opt/etc/ssl/cacert.pem https://curl.haxx.se/ca/cacert.pem
# Freetz: rc.custom ln -s /var/InternerSpeicher/opt/etc/ssl /mod/etc/ssl
Keine Kommentare:
Kommentar veröffentlichen