← Menü
GNU/Linux.ch

Linux im Heimnetz: Ubuntu, SSH, Freigaben, Webserver und Raspberry Pi einrichten

Quelle: GNU/Linux.ch

In diesem Tutorial wird ein kleines Linux-Heimnetz mit Ubuntu, Raspberry Pi, SSH, Samba, CUPS, Webmin und Apache eingerichtet. Der Fokus liegt auf praktischen Terminal-Befehlen, festen IP-Adressen und einem Setup, das sich im Alltag gut nachvollziehen lässt.

In diesem Tutorial wird ein kleines Linux-Set-up im Heimnetz aufgebaut. Es geht um einen Linux-PC, einen Raspberry Pi, SSH, Samba-Freigaben, Webmin, einen einfachen Webserver, einen Netzwerkdrucker mit CUPS und einen kleinen Cron-Job. Der Fokus liegt bewusst auf dem Terminal, weil Klickanleitungen ungefähr so langlebig sind wie Druckertreiber mit Stimmungsschwankungen.

Als Beispiel wird ein typisches Heimnetz verwendet:

Netzwerk: 192.168.1.0/24 Router/Gateway: 192.168.1.1 DNS: 1.1.1.1, 8.8.8.8 Linux-PC: 192.168.1.20 Windows-PC: 192.168.1.10 Netzwerkdrucker: 192.168.1.50 Raspberry Pi: 192.168.1.150 WLAN-Name: HomeLab

Wer eine FRITZ!Box mit Standardnetz nutzt, kann die Beispiele einfach auf 192.168.178.x übertragen. Aus 192.168.1.20 wird dann beispielsweise 192.168.178.20.

Der Linux-PC bekommt einen Namen

Zuerst bekommt der Linux-PC einen sinnvollen Hostnamen. Das macht später SSH-Verbindungen, Netzwerkfreigaben und Logs übersichtlicher.

Terminal:

sudo hostnamectl set-hostname linux-pc hostnamectl

Danach lässt sich der Name prüfen:

Terminal:

hostname

Im Beispiel heißt der Rechner ab jetzt linux-pc.

Der Linux-PC bekommt eine feste IP-Adresse

Ein Rechner, der später per SSH, Samba oder Webmin erreichbar sein soll, sollte eine feste IP-Adresse bekommen. In diesem Beispiel nutzt der Linux-PC die Adresse 192.168.1.20.

Viele Ubuntu-Desktop-Installationen verwenden NetworkManager. Die Konfiguration läuft dabei über nmcli.

Zuerst wird der Name der aktiven Verbindung angezeigt:

Terminal:

nmcli connection show --active

Angenommen, die Verbindung heißt Wired connection 1, wird die statische Adresse so gesetzt:

Terminal:

sudo nmcli connection modify "Wired connection 1" ipv4.addresses "192.168.1.20/24" sudo nmcli connection modify "Wired connection 1" ipv4.gateway "192.168.1.1" sudo nmcli connection modify "Wired connection 1" ipv4.dns "1.1.1.1 8.8.8.8" sudo nmcli connection modify "Wired connection 1" ipv4.method manual sudo nmcli connection down "Wired connection 1" sudo nmcli connection up "Wired connection 1"

Anschließend sollte der Rechner unter 192.168.1.20 erreichbar sein.

Terminal:

ip -br addr ip route resolvectl status ping -c 4 192.168.1.1 ping -c 4 gnulinux.ch

Wenn der Router erreichbar ist, aber gnulinux.ch nicht, liegt das Problem oft bei DNS. Wenn nicht einmal der Router erreichbar ist, sollte man IP-Adresse, Gateway, Kabel, WLAN oder die Verbindung selbst prüfen. Also die üblichen Verdächtigen, nur ohne dramatische Musik.

Alternative: feste IP mit Netplan

Auf Ubuntu-Servern wird häufig Netplan verwendet. Dafür wird eine YAML-Datei unter /etc/netplan/ angelegt oder angepasst.

Zuerst wird der Name der Netzwerkkarte gesucht:

Terminal:

ip -br link

Angenommen, das Interface heißt ens33, wird eine neue Netplan-Datei erstellt:

Terminal:

sudo nano /etc/netplan/99-static.yaml

Inhalt der Datei:

network:   version: 2   renderer: networkd   ethernets:     ens33:       addresses:         - 192.168.1.20/24       routes:         - to: default           via: 192.168.1.1       nameservers:         addresses:           - 1.1.1.1           - 8.8.8.8

Die Konfiguration wird zuerst getestet:

Terminal:

sudo netplan try

Wenn die Verbindung danach noch funktioniert, wird sie übernommen:

Terminal:

sudo netplan apply

Ein kurzer Test:

Terminal:

ip -br addr ip route ping -c 4 192.168.1.1 ping -c 4 gnulinux.ch

SSH für den Fernzugriff einrichten

SSH ist der wichtigste Fernzugriff auf ein Linux-System. Damit landet man direkt in einer Terminal-Sitzung auf dem Zielrechner.

Auf dem Linux-PC wird der SSH-Server installiert und aktiviert:

Terminal:

sudo apt update sudo apt install -y openssh-server sudo systemctl enable --now ssh sudo systemctl status ssh --no-pager

Von einem anderen Rechner im Heimnetz verbindet man sich anschließend so:

Terminal:

ssh BENUTZERNAME@192.168.1.20

BENUTZERNAME ist der Benutzer, der auf dem Linux-PC existiert. Wenn der Benutzer zum Beispiel alex heißt, lautet der Befehl:

Terminal:

ssh alex@192.168.1.20

Falls UFW aktiv ist, wird der SSH-Port freigegeben:

Terminal:

sudo ufw allow 22/tcp sudo ufw status

Eine Windows-Freigabe unter Linux einbinden

In diesem Beispiel gibt es auf dem Windows-PC eine Freigabe namens data. Der Windows-PC hat die Adresse 192.168.1.10.

Auf Linux wird dafür cifs-utils installiert:

Terminal:

sudo apt update sudo apt install -y cifs-utils

Der Ordner, unter dem die Freigabe erscheinen soll, wird angelegt:

Terminal:

sudo mkdir -p /mnt/netz

Die Zugangsdaten werden in eine eigene Datei geschrieben:

Terminal:

sudo tee /root/.smb-data-credentials >/dev/null password=WINDOWS_PASSWORD domain=WORKGROUP EOF sudo chmod 600 /root/.smb-data-credentials

Jetzt wird die Freigabe eingebunden:

Terminal:

sudo mount -t cifs //192.168.1.10/data /mnt/netz -o credentials=/root/.smb-data-credentials,uid=$(id -u),gid=$(id -g),iocharset=utf8,vers=3.0

Ein kurzer Schreibtest:

Terminal:

touch /mnt/netz/linux_test.txt ls -l /mnt/netz

Damit die Freigabe später automatisch eingebunden wird:

Terminal:

USER_UID=$(id -u) USER_GID=$(id -g) echo "//192.168.1.10/data /mnt/netz cifs credentials=/root/.smb-data-credentials,uid=${USER_UID},gid=${USER_GID},iocharset=utf8,vers=3.0,nofail,x-systemd.automount 0 0" | sudo tee -a /etc/fstab sudo systemctl daemon-reload sudo mount -a

Kontrolle:

Terminal:

mount | grep /mnt/netz ls -l /mnt/netz

Einen Linux-Ordner für Windows freigeben

Jetzt stellt der Linux-PC selbst einen Ordner im Netzwerk bereit. Dafür wird Samba verwendet.

Samba und ein SMB-Client werden installiert:

Terminal:

sudo apt update sudo apt install -y samba smbclient

Der Freigabeordner wird angelegt:

Terminal:

mkdir -p "$HOME/data" chmod 775 "$HOME/data"

Die bestehende Samba-Konfiguration wird gesichert:

Terminal:

sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak.$(date +%F-%H%M%S)

Die Freigabe wird am Ende der Samba-Konfiguration ergänzt:

Terminal:

cat [data]    path = $HOME/data    browseable = yes    read only = no    valid users = $USER    create mask = 0664    directory mask = 0775 EOF

Für Samba benötigt der Benutzer ein eigenes Samba-Passwort:

Terminal:

sudo smbpasswd -a "$USER"

Danach wird die Konfiguration getestet und Samba neu gestartet:

Terminal:

testparm -s sudo systemctl restart smbd sudo systemctl enable smbd sudo systemctl status smbd --no-pager

Ein lokaler Test:

Terminal:

smbclient //localhost/data -U "$USER" -c 'ls'

Unter Windows wird die Freigabe so geöffnet:

\192.168.1.20\data

Falls UFW aktiv ist:

Terminal:

sudo ufw allow samba sudo ufw status

Remote Desktop mit xRDP einrichten

SSH ist für Administration meistens besser. Eine grafische Remote-Sitzung ist aber praktisch, wenn wirklich eine Desktop-Oberfläche gebraucht wird.

xRDP wird installiert und gestartet:

Terminal:

sudo apt update sudo apt install -y xrdp sudo adduser xrdp ssl-cert sudo systemctl enable --now xrdp sudo systemctl status xrdp --no-pager

Falls UFW aktiv ist, wird der RDP-Port freigegeben:

Terminal:

sudo ufw allow 3389/tcp sudo ufw status

Die Verbindung erfolgt dann per RDP-Client auf:

192.168.1.20

Bei manchen Desktop-Umgebungen sollte man sich lokal abmelden, bevor man sich per xRDP mit demselben Benutzer anmeldet. Sonst benehmen sich Desktop-Sitzungen gern wie zwei Drucker im selben Raum: keiner fühlt sich zuständig.

Einen Netzwerkdrucker mit CUPS einrichten

Der Netzwerkdrucker hat im Beispiel die Adresse 192.168.1.50. Unter Linux wird die Druckerverwaltung über CUPS erledigt.

CUPS wird installiert und gestartet:

Terminal:

sudo apt update sudo apt install -y cups cups-client sudo systemctl enable --now cups

Der eigene Benutzer wird zur Drucker-Admin-Gruppe hinzugefügt:

Terminal:

sudo usermod -aG lpadmin "$USER"

Ein IPP-Drucker wird hinzugefügt:

Terminal:

sudo lpadmin -p Office_Printer -E -v "ipp://192.168.1.50/ipp/print" -m everywhere lpoptions -d Office_Printer

Der Status wird angezeigt:

Terminal:

lpstat -t

Ein Testdruck:

Terminal:

echo "Linux printer test" | lp -d Office_Printer

Die CUPS-Weboberfläche ist lokal erreichbar unter:

http://localhost:631

Wenn -m everywhere nicht funktioniert, unterstützt der Drucker vermutlich kein IPP Everywhere oder nutzt eine andere URI. Drucker sind kleine Netzwerkgeräte mit dem Temperament antiker Orakel.

Webmin als Weboberfläche installieren

Webmin bietet eine Browseroberfläche für viele Verwaltungsaufgaben: Dienste, Updates, Speicher, Benutzer, Cron-Jobs und mehr.

Webmin wird über das offizielle Repository-Script eingerichtet:

Terminal:

sudo apt update sudo apt install -y curl curl -o webmin-setup-repo.sh https://raw.githubusercontent.com/webmin/webmin/master/webmin-setup-repo.sh sudo sh webmin-setup-repo.sh sudo apt-get install -y webmin --install-recommends sudo systemctl enable --now webmin

Der Dienst wird geprüft:

Terminal:

sudo systemctl status webmin --no-pager curl -kI https://localhost:10000/

Webmin wird im Browser geöffnet:

https://192.168.1.20:10000

Interessante Bereiche für den Einstieg:

Dashboard System Speicher Paket-Updates Geplante Cron-Jobs Dienste

Einen kleinen Cron-Job anlegen

Cron eignet sich für wiederkehrende Aufgaben. In diesem Beispiel schreibt das System jede Minute eine Zeile in eine Logdatei auf der eingebundenen Freigabe.

Cron wird installiert und aktiviert:

Terminal:

sudo apt update sudo apt install -y cron sudo systemctl enable --now cron

Das Skript wird angelegt:

Terminal:

sudo tee /usr/local/bin/online-log.sh >/dev/null set -euo pipefail

LOG_FILE="/mnt/netz/uptimelog.txt"

if mountpoint -q /mnt/netz; then     echo "$(date '+%Y-%m-%d %H:%M:%S') - system online" >> "$LOG_FILE" fi EOF sudo chmod +x /usr/local/bin/online-log.sh

Das Script wird manuell getestet:

Terminal:

/usr/local/bin/online-log.sh tail /mnt/netz/uptimelog.txt

Der Cron-Job wird eingetragen:

Terminal:

( crontab -l 2>/dev/null | grep -v '/usr/local/bin/online-log.sh' ; echo ' * /usr/local/bin/online-log.sh' ) | crontab -

Kontrolle:

Terminal:

crontab -l

Nach ein bis zwei Minuten sollte die Datei Einträge enthalten:

Terminal:

tail /mnt/netz/uptimelog.txt

Raspberry Pi ins Heimnetz bringen

Der Raspberry Pi bekommt im Beispiel die Adresse 192.168.1.150 und hängt im selben Netz wie der Linux-PC.

Raspberry Pi: 192.168.1.150 Router: 192.168.1.1 WLAN: HomeLab

Am saubersten ist oft eine DHCP-Reservierung im Router. Dann bleibt der Pi auf derselben Adresse, ohne dass man die IP direkt am Pi fest verdrahten muss. Wenn die feste IP direkt am Pi gesetzt werden soll, geht das ebenfalls mit NetworkManager.

Raspberry Pi mit dem WLAN verbinden

WLAN wird eingeschaltet:

Terminal:

sudo nmcli radio wifi on

Verfügbare WLANs werden angezeigt:

Terminal:

nmcli device wifi list

Die Verbindung zum WLAN wird aufgebaut:

Terminal:

sudo nmcli device wifi connect "HomeLab" password "WLAN_PASSWORT"

Die Verbindung wird geprüft:

Terminal:

nmcli connection show --active ip -br addr ip route ping -c 4 192.168.1.1 ping -c 4 gnulinux.ch

Dem Raspberry Pi eine feste IP geben

Zuerst wird der Name der aktiven Verbindung angezeigt:

Terminal:

nmcli -t -f NAME,DEVICE connection show --active

Wenn die Verbindung HomeLab heißt:

Terminal:

sudo nmcli connection modify "HomeLab" ipv4.addresses "192.168.1.150/24" sudo nmcli connection modify "HomeLab" ipv4.gateway "192.168.1.1" sudo nmcli connection modify "HomeLab" ipv4.dns "1.1.1.1 8.8.8.8" sudo nmcli connection modify "HomeLab" ipv4.method manual sudo nmcli connection down "HomeLab" sudo nmcli connection up "HomeLab"

Prüfen:

Terminal:

ip -br addr ip route ping -c 4 192.168.1.1 ping -c 4 gnulinux.ch

Hostname und Uhrzeit setzen

Der Pi bekommt einen Namen:

Terminal:

sudo hostnamectl set-hostname pi-server hostnamectl

Die Zeitzone wird gesetzt:

Terminal:

sudo timedatectl set-timezone Europe/Vienna sudo timedatectl set-ntp true timedatectl

Falls kein Internet verfügbar ist, kann die Uhrzeit manuell gesetzt werden:

Terminal:

sudo timedatectl set-ntp false sudo timedatectl set-time "2026-01-01 12:00:00" timedatectl

Danach wird neu gestartet:

Terminal:

sudo reboot

SSH auf dem Raspberry Pi aktivieren

SSH wird installiert und aktiviert:

Terminal:

sudo apt update sudo apt install -y openssh-server sudo systemctl enable --now ssh sudo systemctl status ssh --no-pager

Vom PC aus verbindet man sich so:

Terminal:

ssh BENUTZERNAME@192.168.1.150

Auf älteren Raspberry-Pi-Installationen oder selbst eingerichteten Systemen kann der Benutzer auch pi heißen:

Terminal:

ssh pi@192.168.1.150

Dateien per SFTP übertragen

SFTP läuft über SSH und ist deshalb für Dateiübertragung meistens sinnvoller als klassisches FTP.

Terminal:

sftp BENUTZERNAME@192.168.1.150

Im SFTP-Prompt:

mkdir upload_test put testdatei.txt ls bye

Einen FTP-Server mit vsftpd einrichten

FTP ist für lokale Tests möglich, sollte aber nicht die erste Wahl sein, wenn SFTP verfügbar ist. Klassisches FTP ist ohne Zusatzschutz nicht verschlüsselt.

vsftpd wird installiert:

Terminal:

sudo apt update sudo apt install -y vsftpd sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak.$(date +%F-%H%M%S)

Lokale Benutzer und Schreibzugriff werden aktiviert:

Terminal:

sudo sed -i 's/^#?anonymous_enable=./anonymous_enable=NO/' /etc/vsftpd.conf sudo sed -i 's/^#?local_enable=./local_enable=YES/' /etc/vsftpd.conf sudo sed -i 's/^#?write_enable=./write_enable=YES/' /etc/vsftpd.conf grep -q '^chroot_local_user=' /etc/vsftpd.conf && sudo sed -i 's/^#?chroot_local_user=./chroot_local_user=YES/' /etc/vsftpd.conf || echo 'chroot_local_user=YES' | sudo tee -a /etc/vsftpd.conf grep -q '^allow_writeable_chroot=' /etc/vsftpd.conf && sudo sed -i 's/^#?allow_writeable_chroot=.*/allow_writeable_chroot=YES/' /etc/vsftpd.conf || echo 'allow_writeable_chroot=YES' | sudo tee -a /etc/vsftpd.conf

Der Dienst wird gestartet:

Terminal:

sudo systemctl enable --now vsftpd sudo systemctl restart vsftpd sudo systemctl status vsftpd --no-pager

Vom Client aus wird getestet:

Terminal:

ftp 192.168.1.150

Falls ftp fehlt:

Terminal:

sudo apt install -y ftp

Apache und PHP auf dem Raspberry Pi installieren

Der Pi kann auch als kleiner Webserver dienen.

Apache und PHP werden installiert:

Terminal:

sudo apt update sudo apt install -y apache2 php libapache2-mod-php sudo systemctl enable --now apache2 sudo systemctl restart apache2

Eine einfache Startseite wird erstellt:

Terminal:

echo "Apache is running on the Raspberry Pi" | sudo tee /var/www/html/index.html

Eine PHP-Testseite wird erstellt:

Terminal:

echo '' | sudo tee /var/www/html/info.php >/dev/null

Lokal wird getestet:

Terminal:

curl -I http://localhost/ curl -I http://localhost/info.php

Vom PC aus im Browser:

http://192.168.1.150/ http://192.168.1.150/info.php

Die PHP-Info-Seite sollte danach wieder gelöscht werden, weil sie unnötig viele Systemdetails zeigt:

Terminal:

sudo rm /var/www/html/info.php

Grafische Fernwartung auf dem Raspberry Pi

Wenn auf dem Raspberry Pi eine Desktop-Oberfläche installiert ist, kann xRDP verwendet werden.

xRDP wird installiert und aktiviert:

Terminal:

sudo apt update sudo apt install -y xrdp sudo systemctl enable --now xrdp sudo systemctl status xrdp --no-pager

Falls UFW aktiv ist:

Terminal:

sudo ufw allow 3389/tcp sudo ufw status

Per RDP verbindet man sich mit:

192.168.1.150

Auf Raspberry Pi OS Lite gibt es keine grafische Oberfläche. In dem Fall ist SSH die bessere Wahl.

Die wichtigsten Grundlagen

NAT

NAT übersetzt private Adressen aus dem Heimnetz nach außen. Der Raspberry Pi hat etwa intern 192.168.1.150, geht aber über den Router 192.168.1.1 ins Internet.

Raspberry Pi 192.168.1.150 -> Router 192.168.1.1 -> Internet

So können mehrere Geräte im Heimnetz über dieselbe Internetverbindung arbeiten.

DHCP

DHCP verteilt automatisch IP-Adresse, Gateway und DNS-Server. Für normale Clients ist das bequem. Für Server, Drucker und Raspberry Pis ist eine feste Adresse oder DHCP-Reservierung praktischer.

SSH

SSH ist der wichtigste Remote-Zugriff für Linux:

Terminal:

ssh BENUTZERNAME@192.168.1.150

Damit lassen sich Pakete installieren, Dienste prüfen, Logs lesen und Konfigurationsdateien bearbeiten.

FTP und SFTP

FTP ist alt und ohne Zusatzschutz nicht verschlüsselt. SFTP läuft über SSH und ist in den meisten Fällen die bessere Wahl:

Terminal:

sftp BENUTZERNAME@192.168.1.150

RDP und SSH

SSH ist schnell, stabil und ideal für Administration. RDP ist hilfreich, wenn eine grafische Oberfläche gebraucht wird, verbraucht aber mehr Ressourcen.

SSH: Terminal, schnell, sparsam RDP: Desktop, grafisch, schwerfälliger

Nützliche Befehle für Fehlersuche

Terminal:

hostnamectl ip -br addr ip route resolvectl status ping -c 4 192.168.1.1 ping -c 4 1.1.1.1 ping -c 4 gnulinux.ch systemctl --failed journalctl -xe

Dienste prüfen:

Terminal:

systemctl status ssh --no-pager systemctl status smbd --no-pager systemctl status apache2 --no-pager systemctl status cups --no-pager systemctl status cron --no-pager systemctl status xrdp --no-pager

Offene Ports anzeigen:

Terminal:

ss -tulpn

Live-Logs ansehen:

Terminal:

sudo journalctl -f

Fazit

Mit wenigen Diensten lässt sich ein Linux-System gut ins Heimnetz integrieren: SSH für Fernzugriff, Samba für Freigaben, CUPS für Drucker, Webmin für eine Weboberfläche und Apache/PHP für einfache Webtests. Der Raspberry Pi ergänzt das Set-up als kleiner Server, der per SSH, SFTP oder Webbrowser erreichbar ist. Wäre schön zu wissen, falls das jemand nützlich gefunden hat.

Quellen:
Ubuntu Server Dokumentation: Netzwerkkonfiguration mit Netplan
https://ubuntu.com/server/docs/explanation/networking/configuring-networks/

Netplan Dokumentation: Statische IP-Adressen
https://netplan.readthedocs.io/en/stable/using-static-ip-addresses/

Ubuntu Tutorial: Samba installieren und konfigurieren
https://ubuntu.com/tutorials/install-and-configure-samba

Samba mount.cifs Manpage
https://www.samba.org/samba/docs/3.4/man-html/mount.cifs.8.html

Raspberry Pi Dokumentation: Konfiguration und Remote Access
https://www.raspberrypi.com/documentation/computers/configuration.html

Webmin Dokumentation: Downloading and Installing
https://webmin.com/download/

CUPS Dokumentation: Administration und Kommandozeilenoptionen
https://www.cups.org/doc/admin.html
https://www.cups.org/doc/options.html

Linux man-pages: crontab
https://man7.org/linux/man-pages/man5/crontab.5.html

Gelesen...