Sheeva: Dhcp- und DNS-Server

Der sheeva übernimmt bei mir die Aufgaben von dhcp- und dns-Server. Warum lasse ich das nicht die FritzBox machen? Ich will halt sehen (und reagieren), wenn bestimmte Geräte im Netz auftauchen. Neue Geräte sieht halt der dhcp-Server zuerst. Jedenfalls solange sich diese um eine IP-Adresse bemühen, was heutzutage ja zumeist üblich ist. Also habe ich dhcp- und dns-Server auf der FritzBox abgeschaltet.

Mein Netz ist 192.168.178.255/8, die FritzBox hat die 192.168.178.1, sheeva hat die 192.168.178.2.

Auf dem sheeva wird der dnsmasq installiert:

apt-get install dnsmasq
Konfiguriert wird der dnsmasq über die /etc/dnsmasq.conf. Dort muss einiges angepasst werden:

local=/fritz.box/ # das ist ist die domain, für die sich der dhcp-server verantwortlich fühlt

domain=fritz.box # diese domain bekommen die Clients per dhcp verpasst

dhcp-range=192.168.178.20,192.168.178.150,255.255.255.0,12h # in dem Bereich werden ip-adressen vergeben, lease hält 12h

read-ethers # in /etc/ethers registrieren wir dann die mac-Adressen

dhcp-option=3,192.168.178.1 # ip adresse des routers, hier die FritzBox

dhcp-option=42,192.168.178.1 # ntp macht auch die FritzBox

dhcp-script=/etc/local/dhcp-action.sh

Das wars schon. Unsere Clients machen wir dem dnsmasq nun in der /etc/hosts und der /etc/ethers bekannt, z.B. meine Squeezebox sieht dort so aus:

/etc/hosts: 192.168.178.25  squeezebox

/etc/ethers: 00:04:20:07:f2:f0 192.168.178.25

Wenn jetzt also die MAC-Adresse 00:04:20:07:f2:f0 im Netz nach einem dhcp-Server für ihre IP-Adresse sucht, wird sich der sheeva melden und ihr die 192.168.178.25 verpassen. Ein Heimnetz ist ja meist recht übersichtlich, daher habe ich es mir angewöhnt, alle meine Geräte in den beiden Dateien zu registrieren. So können sie sich per DHCP ihre Konfiguration holen (vereinfacht die Installation des Client), anderseits haben sie immer feste Namen und Adressen (vereinfacht das Handling im Netz). Meldet sich ein unbekanntes Gerät, bekommt es halt die nächste freie IP-Adresse.

In der /etc/dnsmasq.conf hatte ich noch eine Zeile mit Verweis auf das Script /etc/local/dhcp-action.sh erwähnt. Dieses Script wird vom dnsmasq immer aufgerufen, wenn ein Gerät neu auftaucht, verschwindet oder sich ändert.

Bei mir sieht dieses Script ganz einfach aus:

root@sheeva:/etc# cat /etc/local/dhcp-action.sh
#!/bin/sh

echo $@ >> /tmp/dhcp.log

if [ `grep -c $2 /etc/ethers` -eq 0 ]; then
echo "unkown device $@" | mail -s "DHCP: unknown device" m...@gmx.de
fi

if [ $1 != "del" -a $2 = 00:04:20:07:f2:f0 ]; then
/etc/local/wake-the-ghost.sh &
fi

Bei unbekannten Geräten bekomme ich eine Info (Konfiguration des postfix ist etwas komplizierter, folgt noch…).
Meldet sich das Gerät mit der MAC-Adresse 00:04:20:07:f2:f0 (ja genau, die Squeezebox), dann wecken wir den ghost auf
(wake-on-lan kommt auch noch…). Das Script bekommt beim Aufruf immer 4 Parameter:

  1. String old|del|add welcher angibt, ob das Gerät geändert, hinzugefügt oder gelöscht wurde
  2. die MAC-Adresse
  3. die IP-Adresse welche dnsmasq hier vergeben hat
  4. und den DNS-Namen

Hier kann man sich also diverse eigene Spielereien ausdenken.

Sheeva: Debian installieren

Debian auf einem Gerät ohne Tastatur und Monitor zu installieren mag vielleicht für den einen oder anderen erstmal abschreckend klingen, ist aber ziemlich einfach. Eigentlich hat Martin schon alles dazu gesagt: Debian on Plug Computers.Man zwar etwas Lesen, dafür funktioniert die Installation dann aber reibungslos.

Das Prinzip ist bei allen solchen Geräten immer gleich:

  1. man verbindet sich über eine serielle Konsole (heutzutage meist per USB) mit dem Gerät
  2. dort steht man am Prompt einer Art BIOS
  3. von diesem Prompt aus startet man ein Installationsprogramm (welches entweder per USB-Stick oder SD-Card direkt an dem Gerät hängt oder per Netz (meist tftp) geholt wird)

Natürlich kann man sich den Sheevaplug auch gleich mit einem vorinstallierten OS kaufen.

Hardware Teil 2 – der kleine Server

Linksys

Am Anfang war der Linksys, ein WRT54GL. Ausgestattet mit OpenWRT hat er sich zu Anfang auch wacker geschlagen (nicht schlecht für 200MHz und 16MB RAM!). Nur leider (sic) spendierte mir Alice dann doch eine schnellere DSL-Leistung und damit war er endgültig überfordert. Immerhin konnte ich aus den Erfahrungen mit OpenWRT eine ganze Menge mitnehmen…

FritzBox

Die FritzBox 7390 war damals recht neu und ein Hammerteil. Mit dem – für meinen Zweck – kleinen Nachteil, dass die Möglichkeiten in die Software bzw. Firmware einzugreifen eher beschänkt waren. Freetz war damals noch sehr instabil und unhandlich und ich wollte mir das schöne neue Teil auch nicht wegschiessen. Also blieb die FritzBox so wie sie war – und so läuft sie bis heute. Wunderbares Stück Hardware.

Sheeva

Da also die FritzBox als Bastelstück ausfiel, brauchte ich einen Ersatz und nahezu optimal geeignet für solche Zwecke ist ein SheevaPlug. In Deutschland gab es den damals leider nicht zu kaufen, ich habe meinen bei New IT bestellt. GB ist oft eine gute Wahl beim Einkauf, man muss eigentlich nur die Sache mit den Steckern im Auge behalten.

Der Plug kam vorinstalliert mit einen uralten Ubuntu, dieses habe ich gleich mal gegen ein Debian 6 ausgetauscht. Ich hatte damals keinerlei Erfahrung mit Ubuntu, Debian lag mir einfach näher. Andere Gründe gab es nicht. Übrigens läuft das Ding wie ein echter Server: nachdem erstmal alle Probleme beseitigt waren, habe ich den Plug nie wieder angefasst. Er läuft, und läuft…

Die Hardware ist leider nicht ganz unproblematisch. Das Teil ist passiv gekühlt, leider waren die Kühlrippen im Gehäuse (sprich die Ausparungen im Plastik) nicht sauber ausgearbeitet, sprich verstopft. Mit einer Nagelfeile habe ich dem Innenleben erstmal zu etwas Frischluft verholfen.

Als zweites habe ich das Netz auf 100MBit gedrosselt. Wirklich schnell ist die ARM-CPU eh nicht und auch die als Festplattenersatz arbeitende SD-Karte kann 1GBit nicht wirklich ausreizen. Diese Massnahme hat wirklich was gebracht. Das Drosseln kann einmal lokal auf dem Plug gemacht werden (kommt irgendwann später). Bei mir hängt der sheeva (so heisst das Teil bei mir im Netz) direkt an der FritzBox. Man kann daher auch dort einfach im Web-Interface unter System->Energiemonitor die Einstellungen für den jeweiligen Lan-Port auf GreenMode setzen, dann begrenzt schon die FritzBox den Durchlass an dieser Stelle auf 100MBit.

Hitzetod ist wohl häufigste Ursache für vorzeitiges Ableben bei den SheevaPlugs, mit den beiden o.g. Massnahmen ist dem abgeholfen.

Statt Festplatte kommt bei mir eine SD-Karte zum Einsatz. Hier empfehle ich aus leidvoller Erfahrung gute Marken-Qualität und mind. Class 10. Ich hatte im ersten Anlauf mit häufigen Abstürzen zu kämpfen, die Karte von damals wurde in einen Fotoapparat verbannt (wo sie noch immer gute Arbeit leistet). Mit einer guten Karte und dem richtigen Kernel (Achtung: der Debian Standard-Kernel läuft erstmal, wird aber immer wieder Probleme mit dem Filesystem auf der SD-Karte machen!) rennt die Kiste dann aber stabil. Und das muss sie auch – auf einem System ohne Tastatur und Monitor macht debuggen nur bedingt Spass. Immerhin bringt der Sheeva eine Debug-Schnittstelle per USB mit, über die kann man sich ein Terminal holen und ihm beim Booten zuschauen. Sollte man auf jeden Fall einmal machen, fühlt sich irgendwie cool an;)

Aus den Anfangstagen mit einigen Startproblemen hat sich ein Workaround bis heute erhalten: ich habe den sheeva auf eine Zeitschaltuhr gepackt. Er fährt sich so gegen 4:00 Uhr Morgens runter, gegen 4:30 schaltet die Uhr den Strom ab. Gegen 6:00 Uhr schaltet die Uhr wieder an, der sheeva hat sich einmal schön abgekühlt, fährt wieder hoch, macht dabei gleich mal ein fsck auf dem Root-Filesystem. Und ich habe Morgens als erstes eine Mail auf dem Handy mit der ersten Erfolgsmeldung des Tages. Ein guter Start in den Tag.

Ach ja, laut Hersteller zieht der Plug max. 20W, gemessen habe ich so etwa 3-5Watt (in derart niedrigen Regionen traue ich meinem Messgerät nicht so richtig), Dauerbetrieb tut hier also nicht weh. Die CPU zieht doch eine Menge weg, begrenzender Faktor in den meisten Experimenten war eigentlich immer der Speicher (512MB RAM).

Und noch ein ach ja: ein Tegra 3 mit 2GB RAM – so in etwa stelle ich mir den Nachfolger vor.