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.