Homeserver mit dem RPi2

Da ja nun mein neuer RaspberryPi seit einigen Tagen im Betrieb ist, wird es langsam Zeit, einen praktischen Nutzen aus dem kleinen Wunder-Teil zu ziehen. Dazu will ich einige Dienste auf dem RPi2 einrichten, um ihn als kleinen Homeserver zu nutzen. Dies will ich zur späteren Verwendung hier dokumentieren.
Einen betriebsbereiten RaspberryPi mit installiertem Raspbian setze ich an dieser Stelle voraus. Eine kurze Anleitung zur Installation von Raspbian gibt es in diesem Beitrag von mir oder auch für andere Betriebssystem hier.

Folgende Dienste sollen installiert werden:

  • Webserver
  • MySQL-Datenbank
  • DNS-Server
  • DHCP-Server

Vorbereitung des Homeserver

Bevor mit der Einrichtung der Dienste begonnen wird, bekommt das Gerät eine feste IP-Adresse zugewiesen. Dies ist für einige der Dienste erforderlich. Die Konfiguration erfolgt in der Datei /etc/network/interfaces. Hier wird für die Netzwerkschnittstelle eth0 die IP-Adresse, die Subnetmask und das Internet-Gateway definiert:

sudo nano /etc/network/interfaces
iface eth0 inet static
        address 192.168.178.2
        netmask 255.255.255.0
        gateway 192.168.178.1

Vorhanden Zeilen für eth0 müssen gelöscht oder auskommentiert werden.

Installation des Webservers und der MySQL-Datenbank

Als Webserver habe ich mich für den Apache2 entschieden:

sudo apt-get install apache2 apache2-doc apache2-utils

Nach der Installation können Webdateien im Verzeichnis im Ordner /var/www/html abgelegt werden.

So lassen sich nur statische html-Seite auf dem kleinen Webserver aufrufen. Der Webserver wird nun noch mit PHP5 und MySQL aufgewertet:

sudo apt-get install php5 libapache2-mod-php5 php5-mysql mysql-server mysql-client

Es gibt noch zahlreiche, nützliche Erweiterungen für PHP, die man ebenfalls mit apt-get installieren kann. Hier eine kleine Auswahl:

  • php5-cgi – CGI-Skripte ausführen
  • php5-cli – PHP-Skripte über die Konsole ausführen
  • php5-curl – cURL-Unterstützung (Dateien über verschiedene Protokolle übertragen)
  • php5-gd – Bilder generieren und manipulieren
  • php5-imagick (universe) – Bilder per ImageMagick manipulieren.
  • php5-imap (universe) – IMAP-Unterstützung.
  • php-pear – PEAR (PHP Extension and Application Repository), eine Sammlung von Klassen
  • php5-pgsql – wie php5-mysql, nur für das Datenbanksystem PostgreSQL
  • php5-sqlite3 (universe) – Daten in einer sqlite3 Datenbank ablegen

Während der Installation wird man in einem Text-Dialog nach einem Passwort für die MySQL-Datenbank. Hier sollte ein sicheres Passwort gewählt werden.
Zur Verwaltung der Datenbank empfiehlt es sich, zusätzlich das Paket PHPMyAdmin zu installieren:

sudo apt-get install phpmyadmin

Während der Installatoin von PHPMyAdmin, wird man nach dem verwendeten Webserver gefragt. In meinem Beispiel muss hier Apache 2 ausgewählt werden.
Um PHPMyAdmin im Browser zu öffnen, gibt man in die Adresszeile http://192.168.1.2/phpmyadmin ein. Als Benutzername gibt man dann root ein, das Passwort entspricht dem, welches bei der Installation vom MySQL angegeben wurde.

DNS-Server Bind

Bind gilt als „die Referenz“ unter den DNS-Servern und kommt bei mittleren bis großen Netzen zum Einsatz. Für das kleine Heimnetz würde auch Dnsmasq als DNS-Server, aber ich will ja auch was lernen.
Installiert wird der Server ganz einfach:

sudo apt-get install bind9

Die für die Konfiguration wichtigen Dateien sind unter /etc/bind zu finden. Allgemeine Funktionen des Servers werden in den Dateien, die mit named beginnen, konfiguriert. Die eigentlichen DNS-Daten werden in den Zonendateien abgelegt; diese Dateien beginnen mit db.

Bind fungiert als Relay-Server für DNS-Anfragen zu Webseiten; primäre Aufgabe soll aber das bereitstellen einer eigenen Domain (z.B. intra.local) für das Intranet sein. Für jede Domain müssen zwei Dateien erstellt werden: eine db.intra.local für die Adressauflösung und ein db.178.168.192 für die Übersetzung einer IP in eine Domain. Bei mir sieht die Datei dann so aus:

;; db.intra.local
;; Forwardlookupzone für intranet
;;
$TTL    86400
@       IN      SOA      ns1.intra.local. mail.intra.local. (
        2016010301      ; Serial
            604800      ; Refresh
             86400      ; Retry
           2419200      ; Expire
            604800 )    ; NX (TTL Negativ Cache)

              IN      NS      ns1.intra.local.   ; nameserver
              IN      A       192.168.178.11     ; loop-back ADresse

ns1           IN      A       192.168.178.11
intra.local.  IN      A       192.168.178.11
router        IN      A       192.168.178.1
nas           IN      A       192.168.178.10

www           IN      CNAME   intra.local.

Unten werden die Adressen mit den IPs eingetragen. IN steht für Internet, A sagt aus, das es sich hierbei um eine IPv4-Adresse handelt. Falls schon IPv6-Adressen verwendet werden sollen, muss AAAA hier eingetragen werden. Der erste Eintrag übersetzt die Adresse fritzbox.intra.heine4u.de in die IP-Adresse 192.168.178.1. Sehr wichtig ist, das am Ende der Datei eine Leerzeile sein muss!

Für den Reverse-Lookup (Übersetzen einer IP in einen Domain-Namen) ist die ähnliche Datei db.178.168.192 für mein heimisches Subnetz 192.168.178.0/24 nötig. Diese sieht bei mir so aus:

;; db.178.168.192
;; Reverselookupzone fuer intranet
;;
$TTL 86400
@       IN      SOA     ns1.intra.local. mail.intra.local. (
          2016010301      ; Serial
              604800      ; Refresh
               86400      ; Retry
             2419200      ; Expire
              604800 )    ; TTL Negative Cache

        IN      NS      ns1.intra.local.

1       IN      PTR     router.intra.local.
10      IN      PTR     nas.intra.local.
11      IN      PTR     ns1.intra.local.

Hier steht der letzte Block der IP-Adresse am Anfang und der Domain-Name rechts. Wichtig ist hier ein Punkt am Ende der Domain und auch wieder eine Leerzeile am unteren Ende der Datei.

Die neue Domain muss BIND nun noch bekannt gemacht werden, damit sie auch geladen wird. Dies wird in der Datei named.conf.local gemacht. In meinem Fall sieht das so aus:

zone "intra.heine4u.de" {
  type master;
  file "/etc/bind/db.intra.local";
};
zone "178.168.192.in-addr.arpa" {
  type master;
  file "/etc/bind/db.178.168.192";
};

Die Option Master sagt dem Server, dass er der Hauptverantwortliche für die Domain ist.Jetzt muss BIND nur noch neu gestartet werden:

sudo service bind9 restart

DHCP-Server mit isc-dhcp

Was nützt der beste DNS-Server, wenn Clients ihn nicht kennen? Ich könnte zwar jetzt in der Fritz-Box die IP des neuen DNS-Servers eingeben, aber ich finde den DHCP-Server der Fritz-Box sowieso nicht so gut. Da nutze ich dann doch gleich die Gelegenheit und installieren einen auf meinem RaspberryPi.
Die Installation erfolgt wieder denkbar einfach:

sudo apt-get install isc-dhcp-server

Die Konfigurationsdatei ist unter /etc/dhcp/dhcpd.conf zu finden:

option domain-name "intra.heine4u.de";
option domain-name-servers 192.168.178.2;
authoritative;
## LAN
subnet 192.168.178.0 netmask 255.255.255.0 {
  option subnet-mask 255.255.255.0;
  range 192.168.2.50 192.168.2.199;
  option routers 192.168.178.1;
  host tablet{ hardware ethernet 75:BC:F5:A8:11:3D; fixed-address 192.168.178.20; option host-name "tablet"; }
}

Die ersten beiden Zeilen geben Informationen über das aktuelle Subnetz und auf welcher IP der favorisierte DNS-Server zu finden ist. Das Flag authoritative besagt, dass dieser Server der primäre DHCP-Server im Netzwerk ist. Darunter werden die verwalteten Subnetz definiert. Mein LAN ist das Subnetz 192.168.178.0 mit der Subnetzmaske 255.255.255.0 und in dem Bereich von 192.168.178.50 bis 199 werden IP-Adressen dynamisch vergeben. Eine Begrenzung des DHCP-Bereichs ist sinnvoll, damit man noch einen freien IP-Bereich hat, in dem man feste Adressen vergeben kann. Die mit host beginnende Zeile zeigt, wie man anhand der MAC-Adresse ein Gerät identifizieren und ihm immer die selbe IP-Adresse zuweisen kann.

Jetzt muss der bisherige DHCP-Server deaktiviert werden -In meinem Fall der DHCP-Server der Fritzbox- und der Server neu gestartet werden:

sudo /etc/init.d/isc-dhcp-server restart

Damit sind erst mal die grundlegenden Funktionen meines kleinen Homeserver installiert und konfiguriert. Weitere Dienste wie PXE-Boot, VPN-Server und weiteres folgen in der Zukunft.

Über Carsten Heine 42 Artikel
Carsten Heine, Feuerwehrmann asu Überzeugung, begeisterter Geocacher, Hobbyfotograf und Webdesigner.

Ersten Kommentar schreiben

Antworten

Deine E-Mail-Adresse wird nicht veröffentlicht.


*


Time limit is exhausted. Please reload CAPTCHA.