zentraler APT Cache auf einem Synology NAS

Vagrant und Chef sind in Kombination eine feine Sache, wenn man fest definierte Test- und Entwicklungsumgebungen benutzen und dabei von der eigenen Entwicklungsplattform unabhängig bleiben möchte (bei mir: Ubuntu auf den Servern, OSX auf meinem Notebook). Das führt aber mitunter dazu, dass VMs relativ häufig erstellt und wieder gelöscht werden, wenn sie nicht mehr benötigt werden. Je nachdem, wie alt die zugrunde liegende Vagrant-Box ist, kommen da schonmal ein paar hundert MB an Softwarepaketen zusammen, die jedes mal wieder heruntergeladen werden.

Ein APT-Cache soll hier Abhilfe schaffen und dafür am besten auf meinem NAS laufen (Synology Diskstation DS411j), da das System sowohl 24/7 durchläuft als auch mehr als ausreichend Festplattenplatz bietet. Eine halbwegs passende Anleitung für die Installation von apt-cacher-ng auf einem Synology NAS ist hier zu finden, erfordert aber einige Anpassungen an das eigene System. Da die einzelnen Produktlinien von Synology auf unterschiedlichen CPU-Plattformen basieren, kommt man hier um eigene Kompilieren nicht herum.

Synology bietet dafür bei Sourceforge.net Archive mit den Toolchains für die einzelnen Plattformen und DSM-Versionen zum Download an. Um die richtige Toolchain zu finden, muss man erstmal die Platform des eigenen NAS ermitteln:

NAS> uname -a
Linux NAS 2.6.32.12 #3211 Tue Apr 16 20:04:57 CST 2013 armv5tel GNU/Linux synology_88f6282_411
NAS>

Die Plattform meines NAS ist also „Marvell 88F628x Linux 2.6.32“. Das Problem mit dieser Toolchain ist jedoch, dass sie mir unter Mac OS X nichts nützt und ich dafür ein Linux benötige. Ich habe mir also kurzerhand eine Vagrant VM erstellt, mit der ich die Toolchain nutzen kann. Diese ist für meine Plattform vorkonfiguriert und muss bei anderen Plattformen durch das Überschreiben der Attribute leicht angepasst werden.

Mit Hilfe der VM habe ich nun apt-cacher-ng entsprechend der oben verlinkten Anleitung kompiliert und dabei gleich die aktuelle Version 0.7.13 verwendet. Im Quellarchiv von apt-cacher-ng finden sich auch die ganzen zusätzlichen Konfigurationsdateien, die im vorkompilierten Paket des Autors der Anleitung gefehlt haben. Die Einrichtung auf dem NAS habe ich mehr oder weniger entsprechend der Anleitung vorgenommen. Da ich jedoch kein Optware auf meinem NAS benutze (das mit den ipkg-Paketen) wurde das Startscript statt in /opt/etc/init.d  direkt in /usr/local/etc/rc.d verlinkt.

Um den apt-cacher nun in den VMs zu nutzen, muss neben dem Recipe „apt“ nur zusätzlich „apt::cacher-client“ eingebunden (am besten noch vor „apt“) und der Server über das Attribute „node[‚apt‘][‚cacher_ipaddress‘]“ konfiguriert werden. Der Cache kann natürlich auch von anderen Debian/Ubuntu-Systemen im lokalen Netz verwendet werden. Die Konfiguration dafür wird auf wiki.ubuntuusers.de beschrieben.

News-Aggregatoren als Retter der Demokratie

In der aktuellen Debatte um das Leistungsschutzrecht (LSR) für Presseverleger wird gerne das Argument bemüht, dass ohne eine unabhängige Presse keine ausgewogene Berichterstattung möglich ist und somit die Demokratie selbst in Gefahr ist. Wenn ich mir jedoch meinen eigenen Medienkonsum und dazu die tatsächlich stattfindende Nicht-Debatte um das LSR anschaue, ergibt sich für mich ein anderes Bild. den ganzen Eintrag lesen »

IPv6 mit SixXS und 2x WRT54G

Das Ende naht… nicht nur das Ende der Welt (2012 und so) sondern auch das Ende der verfügbaren IPv4-Adressen. Nicht, dass das für mich persönlich morgen bedrohliche Konsequenzen nach sich zieht, aber dennoch der richtige Zeitpunkt, sich mal ein wenig mit IPv6 zu beschäftigen. Da mein DSL-Provider keine direkte v6-Anbindung anbietet und das letztendlich auch ein wenig langweilig wäre, habe ich mich für eine Tunnellösung mittels SixXS entscheiden. Wer oder was SixXS ist und wie man dort an IPv6-Anbindung kommt, ist auf ihrer Website schön erklärt und wird an dieser Stelle deshalb ausgespart.

Ich möchte den Tunnel nicht auf einer meiner Workstations betreiben, da dieser zum Sammeln von ISKs 24/7 online sein soll. Mein Router würde sich dafür natürlich anbieten, das ist jedoch nicht ganz unproblematisch. Der WRT54G v2.2 von Linksys hat leider einen Broadcom-Chipsatz, der sich nicht mit Linux 2.6 versteht, weshalb dort ein OpenWRT mit 2.4er-Kernel läuft. In Linux 2.4 gibt es zwar auch schon IPv6 aber leider fehlt dem dortigem ip6tables das Connection-Tracking, was den ganzen Firewall-Aufbau quasi unmöglich macht. Es bleiben also die Alternativen „2.4-Kernel mit WLAN aber ohne IPv6“ oder „2.6-Kernel mit IPv6 aber ohne WLAN“. Dumme Sache… Zum Glück greift hier jedoch wieder die altbewährte Regel „Warum eins kaufen, wenn man für das doppelte Geld zwei haben kann“ und wie es der Zufall will habe ich aus alten Internet-über-den-Innenhof-Zeiten sogar noch ein 2. Gerät hier stehen.

Der Plan ist also wie folgt: Der bisherige Router bleibt auf Linux 2.4, übernimmt WLAN und DSL-Anbindung. Der zweite WRT54G wird mit 2.6er-Firmware bespielt und fungiert als Tunnel-Endpoint und Gateway für den IPv6-Traffic. Anleitungen zur Installation der notwendigen Programme sind im Wiki von SixXS zu finden (für OpenWRT z.B. hier). Deshalb möchte ich hier nur kurz auf die größten Fallen hinweisen.

Die korrekte Systemzeit ist das A und O da die Tunnel-Endpoints auf den PoPs keine Verbindung annehmen, wenn die Zeitdifferenz zu groß ist. Es ist also wichtig die Startreihenfolge von Diensten und Hotplug-Scripten so zu ändern, dass Zeitdienste wie ntpdate oder rdate VOR aiccu liegen. Beim Backfire RC4 musste dazu das Script /etc/hotplug.d/40-rdate in 30-rdate umbenannt werden. Im Gegenstück wird das AICCU-Script von 30-aiccu in 40-aiccu unbenannt, um den Start nach hinten zu schieben.

In Verbindung mit radvd und aiccu kann es zu Problemen mit dem Routing kommen, wenn die Startreihenfolge nicht richtig ist. Radvd sollte vor aiccu gestartet werden. Dazu wird in den jeweiligen init-Scripten der Wert der START-Variable auf 50 (radvd) bzw. 51 (aiccu) gestellt.

Damit der IPv6-Router auch Pakete weiterleitet, muss in der Datei /etc/sysctl.conf eine Zeile mit „net.ipv6.conf.all.forwarding=1“ eingefügt werden, wenn nicht bereits passiert. Die Einstellung wird nach einem Neustart wirksam bzw. kann auch mittels folgendem Befehl on-the-fly aktivert werden:

echo 1 > /proc/sys/net/ipv6/conf/all/forwarding

Der Router sollte nun das eingestellte Subnetz in das LAN publizieren und die Pakete durch den Tunnel routen. An dieser Stelle sei nun nochmal darauf hingewiesen, dass wir beim IPv6 kein NAT mehr haben. Diese bisher damit einhergehende bequeme Abschottung des LANs nach außen ist somit nicht mehr existent. Ohne entsprechende Firewall kann nun jeder IPv6-Nutzer jeden Rechner innerhalb unseres LANs problemlos anpingen und auf entsprechende Services connecten. Es ist daher dringends anzuraten, entsprechende Firewall-Einstellungen vorzunehmen. Meine /etc/firewall.user sieht in etwa so aus:

# First, delete all:
ip6tables -F
ip6tables -X
 
# Allow anything on the local link
ip6tables -A INPUT  -i lo -j ACCEPT
ip6tables -A OUTPUT -o lo -j ACCEPT
 
# Allow anything out on the internet
ip6tables -A OUTPUT -o sixxs -j ACCEPT
 
# Allow the localnet access us:
ip6tables -A INPUT    -i br-lan   -j ACCEPT
ip6tables -A OUTPUT   -o br-lan   -j ACCEPT
 
# Filter all packets that have RH0 headers:
ip6tables -A INPUT -m rt --rt-type 0 -j DROP
ip6tables -A FORWARD -m rt --rt-type 0 -j DROP
ip6tables -A OUTPUT -m rt --rt-type 0 -j DROP
 
# Allow Link-Local addresses
ip6tables -A INPUT -s fe80::/10 -j ACCEPT
ip6tables -A OUTPUT -s fe80::/10 -j ACCEPT
 
# Allow multicast
ip6tables -A INPUT -s ff00::/8 -j ACCEPT
ip6tables -A OUTPUT -s ff00::/8 -j ACCEPT
 
# Allow ICMPv6 everywhere
ip6tables -I INPUT  -p icmpv6 -j ACCEPT
ip6tables -I OUTPUT -p icmpv6 -j ACCEPT
ip6tables -I FORWARD -p icmpv6 -j ACCEPT
 
# Allow forwarding
ip6tables -A FORWARD -m state --state NEW -i br-lan -o sixxs -s <subnet-prefix>::/48 -j ACCEPT
ip6tables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
 
# Set the default policy
ip6tables -P INPUT   DROP
ip6tables -P FORWARD DROP
ip6tables -P OUTPUT  DROP

Nachdem der Tunnel nun aufgebaut ist und die anderen IPv6-Geräte über diesen brav ihren Traffic leiten, kommen wir zum letzten Problem, bedingt durch die Position des Tunnel-Endpoints nicht direkt auf dem IPv4-Gateway sondern im LAN hinter dem IPv4-NAT. Die Firewall auf dem IPv4-Router knippst nämlich nach einer gewissen Zeit den Durchgang durch die Firewall für den Tunnel-Traffic zu, wenn dort nicht regelmäßig Pakete durchgehen. Um dies zu umgehen legen wir auf dem IPv4-Router eine Firewall-Einstellung (in /etc/firewall.user) an, die den 6in4-Traffic (genau das ist nämlich der Tunnel-Traffic) pauschal an den IPv6-Gateway umleitet und das Connection-Tracking umgeht:

# send 6in4 traffic to ipv6 endpoint
iptables -t nat -A PREROUTING -i ppp0 -p 41 -j DNAT --to $IPv6GATEWAY
iptables -t filter -A FORWARD -i ppp0 -p 41 -d $IPv6GATEWAY -j ACCEPT

Mit diesen Einstellungen sollte nun IPv6-Konnektivität für jeden im LAN möglich sein, der Lust darauf hat. Die IP-Adressen werden per Autokonfiguration vergeben. Da diese Adressen per-default von der MAC-Adresse des jeweiligen Endgerätes abhängen kann dies zu dem unschönen Effekt führen, dass ein Gerät ständig mit der gleichen IP-Adresse online ist und sich für weiteren Überwachnungsbedarf sogar regelmäßig anpingen lässt. Um dem entgegen zu laufen, sei auf die Privacy-Extension verwiesen. Betriebssysteme, die diese beherrschen, generieren die IP-Adressen jedesmal zufällig neu. Eine Überwachnung ist somit in einem 64er-Netz mit seinen 1.8 x 10^19 möglichen Adressen schonmal eine Stufe aufwändiger.

Das hier beschriebene Setup läuft bei mir jetzt seit guten 3 Wochen stabil vor sich hin. Ich bin noch dabei herauszufinden, wie ich DHCP-Server für IPv4-Adressen, lokalen DNS-Server und DNS-Forwarder richtig auf die beiden Router verteile. Sicher ist nur, dass der DNS-Forwarder möglichst auf einer Kiste mit IPv6-Konnektivität sitzen sollte, da einige DNS-Server im Netz so konfiguriert werden, dass sie AAAA-Records (also IPv6-Adressen für Hostnames) nur rausgeben, wenn die Anfrage von einer IPv6-Adresse kommt. Darüber hinaus ist das bei mir alles noch ein wenig im Fluss.

Sharing mouse and keyboard using synergy-plus

When you have to use multiple computers at the same time your desk tends to start filling with multiple mouses and keyboards. KVM switches are a possible solution but good ones aren’t that cheap and they usually make painful noises when switching to another machine. I’d like to have a solution where I can continue using all the monitors connected to each machine and just share my mouse and keyboard, preferably the mouse and keyboard already built into my Macbook Pro. With many thanks to Chris Schoeneman there already is such a solution, called Synergy.

den ganzen Eintrag lesen »

Datenschutz und Informationelle Selbstbestimmung

Seit einiger Zeit köchelt die Diskussion um Datenschutz bei Social Networks ja mal wieder auf kräftiger Flamme. Die Debatte läuft von totaler Restriktion, also einem quasi Verwertungsverbot jeglicher vom Nutzer eingetragener Daten, bis hin zu Überlegungen, ob das Konzept des Datenschutzes überhaupt noch zeitgemäß ist. Meiner Meinung nach geht die Diskussion jedoch an einem der Kernproblem vorbei, bzw. streift dieses nur am Rande: Was bedeutet eigentlich Datenschutz? den ganzen Eintrag lesen »

von der Folter und den Bankdaten

Seit Beginn der Diskussion um die Schweizer Bankdaten habe ich ja nur darauf gewartet, dass der erste in eine solche Schwarz-Weiß-Argumentation verfällt und den Ankauf der gestohlenen Daten mit der Beführwortung von Folter gleich setzt. den ganzen Eintrag lesen »

Programmer’s Zen: das „Prinzip der Westverpackung“

In letzter Zeit gab es mal wieder so einige Situationen, in denen ich andere Leute (und teilweise auch mich selbst) dabei beobachtet habe, wie sie sich unsinnig viel Stress beim Programmieren aufgehalst haben und möchte deshalb nun eine kleine Serie ins Leben rufen, in der ich eine Reihe von Pseudo-Weisheiten von mir gebe, die ich für hilfreich halte. Vielleicht kann der eine oder andere ja auch etwas damit anfangen.

Beginnen möchte ich mit einem Prinzip, dass ich gerne das „Prinzip der Westverpackung“ nenne.

den ganzen Eintrag lesen »

10 Jahre online

Grade ist mir im Kalender aufgefallen, dass ich mit dem heutigen Tag genau 10 Jahre online bin. Anderen mag der 11.08.99 eher aufgrund der Sonnenfinsternis über Deutschland in Erinnerung geblieben sein. Anlässlich dieses Ereignisses gab es damals den ganzen Tag kostenlos Internet-By-Call von Talkline. Also saß ich ab kurz nach 0 Uhr mit nem 28.8er Modem eines Nachbarn vorm Rechner und hab mich mit tausenden anderen Leuten um die freien Leitungen gestritten. Die Finsternis hab ich später dann zwar verschlafen, aber hey, man muss halt Prioritäten setzen. 😉

Ich werde diesen Tag dann mal nutzen um ein bisschen in Erinnerungen zu schwelgen: NBC Giga… Napster… die Flatrate-Kriege… mein erster DSL-Anschluss… [gEb]… ach ja… *seufs*

Schlüsselwort-Lesezeichen im Firefox

Ich habe soeben die Schlüsselwort-Funktion bei den Lesezeichen im Firefox kennen gelernt. Mit diesen Schlüsselwörtern kann man sich seine eigenen kleinen Suchmaschinen-Kürzel für die Adresszeile schreiben.

So können wir z.B. ein neues Lesezeichen anlegen und folgende Daten eintragen:

Name: PHP Funktionssuche
Adresse: http://de.php.net/%s
Schlüsselwort: php

Wenn wir nun in die Adressleiste „php sprintf“ eingeben, macht Firefox daraus automatisch die URL http://de.php.net/sprintf, welche uns wiederum auf die Dokumentation zur Methode sprintf() leitet… Dies ist mit jeder Seite möglich, bei der die Suchwörter per GET-Parameter an die URL angehängt werden. Die MySQL-Dokumentation lässt sich so z.B. mit folgender URL durchsuchen:

http://search.mysql.com/search?site=refman-51&lr=lang_de&q=%s

Jetzt hat meine Lesezeichen-Toolbar zwei Einträge weniger und schneller bin ich obendrein.

the internet is for porn

Microsoft hat seine/ihre tolle neue Suchmaschine BING gestartet. In diesem Zusammenhang gab es ja schon viele lustige Sachen zu lesen, wie z.B. den Artikel bei Techcrunch („But it’s not Google„). Aber am lustigsten fand ich dann den Hinweis bei heise.de heute morgen, dass Microsoft für die deutschen Surfer den Jugendschutz zwangsaktiv macht und man diesen auch nicht deaktivieren kann. Wenn ich nun also nach „nude chicks“ suche, bekomme ich dort folgende Antwort:

Der Suchbegriff nude chicks führt möglicherweise zu sexuell eindeutigen Inhalten.

Ändern Sie Ihre Suchbegriffe, um Ergebnisse zu erhalten.

Liebe Leute bei Microsoft. Es ist ja löblich, dass ihr etwas für den Jugendschutz tut, aber bitte doch nicht auf eine Art und Weise, die uns mündige (und erwachsene) Internetnutzer bevormundet. Es gibt genug andere Möglichkeiten, minderjährige vor diesen Teilen des Internets zu „schützen“.

Und um es dann mit den Worten anderer zu sagen:

„The internet is for porn“

„Bring back the porn“