Virtualisierung & Container auf Synology NAS
Überblick
Moderne Synology NAS-Systeme bieten mächtige Virtualisierungslösungen, die aus einem einzigen Gerät ein komplettes Rechenzentrum machen können. Mit Virtual Machine Manager (VMM) und Container Station/Docker kannst du:
- Vollständige Betriebssysteme in virtuellen Maschinen betreiben
- Leichtgewichtige Container für spezifische Anwendungen nutzen
- Entwicklungsumgebungen isoliert testen
- Legacy-Systeme sicher betreiben
- Home-Lab für Experimente aufbauen
Virtual Machine Manager (VMM)
Systemanforderungen
Mindestanforderungen:
- Intel x64-basierte Synology NAS (kein ARM)
- Mindestens 4 GB RAM (8 GB+ empfohlen)
- Hardware-Virtualisierung (Intel VT-x)
- Ausreichend freier Speicherplatz
Unterstützte NAS-Modelle (Auswahl):
- DS920+, DS1520+, DS1821+
- RS820+, RS1221+, RS2421+
- Alle + und FS-Modelle mit Intel-CPU
VMM Installation und Einrichtung
1. Package Center Installation
- Package Center öffnen
- Nach "Virtual Machine Manager" suchen
- Installieren und auf Systemneustarts vorbereiten
- VMM aus dem Hauptmenü starten
2. Erste Konfiguration
Speicher-Pool erstellen:
- Speicher > Speicher-Pool > Hinzufügen
- Speicherort wählen (empfohlen: SSD für bessere Performance)
- Größe festlegen (mindestens 100 GB pro VM)
- Thin Provisioning aktivieren für effizienten Speicherverbrauch
Netzwerk konfigurieren:
- Netzwerk > Virtueller Switch
- Standard-Switch verwenden oder neuen erstellen
- Physischen Adapter zuweisen
- VLAN-Tagging bei Bedarf konfigurieren
Virtuelle Maschinen erstellen
Windows 10/11 VM
VM-Erstellung:
- Virtuelle Maschine > Erstellen
- Microsoft Windows auswählen
- Ressourcen zuweisen:
- CPU: 2-4 vCores
- RAM: 4-8 GB
- Storage: 60-100 GB
- ISO-Image hochladen oder mounten
Installation optimieren:
# Synology VMM Tools installieren (nach Windows-Installation)
# 1. VM-Konsole öffnen
# 2. Aktion > VMM Tools installieren
# 3. Setup durchführen für bessere Integration
Performance-Tipps:
- Virtio-Treiber für bessere I/O-Performance
- Ballooning für dynamische RAM-Zuteilung
- SSD-Cache aktivieren falls verfügbar
Linux VMs
Ubuntu Server 22.04 LTS:
Konfiguration:
CPU: 2 vCores
RAM: 2-4 GB
Storage: 20-40 GB
Netzwerk: Virtio-net
Sicherheit: UEFI + Secure Boot
Automatisierte Installation:
# Cloud-init für Ubuntu
#cloud-config
users:
- name: admin
sudo: ALL=(ALL) NOPASSWD:ALL
ssh_authorized_keys:
- ssh-rsa AAAAB3... # Dein SSH-Key
packages:
- docker.io
- nginx
- htop
runcmd:
- systemctl enable docker
- usermod -aG docker admin
Container Station / Docker
Docker Grundlagen
Was sind Container?
- Leichtgewichtige Virtualisierung auf OS-Level
- Teilen sich den Kernel des Host-Systems
- Deutlich geringerer Ressourcenverbrauch als VMs
- Perfekt für Mikroservices und Web-Anwendungen
Container Station Installation
- Package Center > Container Station installieren
- Docker Hub Registry aktivieren
- Registrys für private Images hinzufügen
- Ressourcenlimits konfigurieren
Populäre Container-Anwendungen
Home Assistant (Smart Home)
Über Container Station UI:
- Registry > Home Assistant suchen
- Download neueste Version
- Container erstellen:
Name: homeassistant Port-Mapping: 8123:8123 Volume: /docker/homeassistant:/config Umgebungsvariablen: TZ=Europe/Berlin
Über Docker Compose:
version: "3.8"
services:
homeassistant:
container_name: homeassistant
image: ghcr.io/home-assistant/home-assistant:stable
volumes:
- /volume1/docker/homeassistant:/config
- /etc/localtime:/etc/localtime:ro
restart: unless-stopped
privileged: true
network_mode: host
Plex Media Server
version: "3.8"
services:
plex:
image: lscr.io/linuxserver/plex:latest
container_name: plex
network_mode: host
environment:
- PUID=1026 # Synology Docker User ID
- PGID=100 # users group
- TZ=Europe/Berlin
- VERSION=docker
volumes:
- /volume1/docker/plex:/config
- /volume1/media:/media
restart: unless-stopped
Nextcloud (Privat-Cloud)
version: "3.8"
services:
nextcloud:
image: nextcloud:latest
container_name: nextcloud
ports:
- "8080:80"
volumes:
- /volume1/docker/nextcloud:/var/www/html
- /volume1/nextcloud-data:/var/www/html/data
environment:
- MYSQL_HOST=nextcloud-db
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_PASSWORD=secure_password
depends_on:
- nextcloud-db
restart: unless-stopped
nextcloud-db:
image: mariadb:latest
container_name: nextcloud-db
volumes:
- /volume1/docker/nextcloud-db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=secure_root_password
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_PASSWORD=secure_password
restart: unless-stopped
Pi-hole (DNS-Werbeblocker)
version: "3.8"
services:
pihole:
container_name: pihole
image: pihole/pihole:latest
ports:
- "53:53/tcp"
- "53:53/udp"
- "67:67/udp"
- "8081:80/tcp"
environment:
- TZ=Europe/Berlin
- WEBPASSWORD=admin123
- DNS1=8.8.8.8
- DNS2=8.8.4.4
volumes:
- /volume1/docker/pihole/etc:/etc/pihole
- /volume1/docker/pihole/dnsmasq:/etc/dnsmasq.d
cap_add:
- NET_ADMIN
restart: unless-stopped
Praktische Anwendungsfälle
Development Environment
Isolierte Entwicklungsumgebung:
version: "3.8"
services:
dev-environment:
image: node:18-alpine
container_name: dev-env
working_dir: /app
volumes:
- /volume1/projects:/app
ports:
- "3000:3000"
- "3001:3001"
command: sh -c "npm install && npm run dev"
restart: unless-stopped
Monitoring Stack
Grafana + Prometheus + Node Exporter:
version: "3.8"
services:
prometheus:
image: prom/prometheus:latest
container_name: prometheus
ports:
- "9090:9090"
volumes:
- /volume1/docker/prometheus:/etc/prometheus
command:
- "--config.file=/etc/prometheus/prometheus.yml"
- "--storage.tsdb.path=/prometheus"
- "--web.console.libraries=/etc/prometheus/console_libraries"
- "--web.console.templates=/etc/prometheus/consoles"
grafana:
image: grafana/grafana:latest
container_name: grafana
ports:
- "3000:3000"
volumes:
- /volume1/docker/grafana:/var/lib/grafana
environment:
- GF_SECURITY_ADMIN_PASSWORD=admin123
Backup-Lösung
Duplicati für automatisierte Backups:
version: "3.8"
services:
duplicati:
image: lscr.io/linuxserver/duplicati:latest
container_name: duplicati
environment:
- PUID=1026
- PGID=100
- TZ=Europe/Berlin
volumes:
- /volume1/docker/duplicati:/config
- /volume1:/source
- /volume1/backups:/backups
ports:
- "8200:8200"
restart: unless-stopped
Performance und Ressourcen-Management
Hardware-Ressourcen optimal nutzen
CPU-Zuteilung:
# Container CPU-Limits setzen
docker run --cpus="2.0" --memory="4g" nginx
# VMM: CPU-Reservierung für kritische VMs
# GUI: VM-Einstellungen > Hardware > CPU > Reservierung
Memory-Management:
# Docker Compose Resource-Limits
version: "3.8"
services:
app:
image: myapp:latest
deploy:
resources:
limits:
cpus: "2.0"
memory: 4G
reservations:
cpus: "1.0"
memory: 2G
Storage-Performance:
- SSD-Cache für VM-Dateien aktivieren
- NVMe-SSDs für Container-Volumes verwenden
- RAID-1 für kritische VMs
- Separate Volumes für Logs und temporäre Daten
Monitoring und Überwachung
Resource Monitor Integration:
- Systemsteuerung > Ressourcen-Monitor
- Virtualisierung-Tab für VM-Übersicht
- Container-Ressourcen in Container Station
Command Line Monitoring:
# SSH ins NAS
ssh admin@nas-ip
# Docker Stats
docker stats
# Top-Prozesse
htop
# VM-Status über CLI
# (VMM API calls falls verfügbar)
Sicherheit und Isolation
Netzwerk-Segmentierung
Separate VLANs für VMs:
- Switch konfigurieren mit VLAN-Support
- VMM > Netzwerk > Virtueller Switch
- VLAN-IDs zuweisen
- Firewall-Regeln zwischen VLANs
Container-Netzwerke:
version: "3.8"
networks:
frontend:
driver: bridge
backend:
driver: bridge
internal: true # Kein Internet-Zugang
services:
web:
image: nginx
networks:
- frontend
database:
image: postgres
networks:
- backend
Zugriffskontrolle
VM-Berechtigungen:
- Separate Benutzerkonten für VM-Verwaltung
- Gruppe "vmm-user" für eingeschränkte Rechte
- 2FA aktivieren für kritische VMs
Container-Security:
# Sichere Container-Konfiguration
version: "3.8"
services:
secure-app:
image: myapp:latest
user: "1001:1001" # Non-root user
read_only: true
cap_drop:
- ALL
cap_add:
- NET_BIND_SERVICE
security_opt:
- no-new-privileges:true
Backup-Strategien
VM-Backups
Automatisierte Snapshots:
- VMM > Virtuelle Maschine > Einstellungen
- Snapshot > Zeitplan aktivieren
- Aufbewahrungsrichtlinie festlegen
- Speicherort für Snapshots wählen
Replikation:
# VM-Replikation auf zweites NAS
# VMM > Replikation > Aufgabe erstellen
Quelle: Lokale VM
Ziel: Remote NAS (über QuickConnect oder VPN)
Zeitplan: Täglich 02:00 Uhr
Aufbewahrung: 7 Tage
Container-Backups
Volume-Backups:
#!/bin/bash
# Container-Backup-Script
# Container stoppen
docker stop container_name
# Volume sichern
docker run --rm \
-v container_volume:/source:ro \
-v /volume1/backups:/backup \
alpine \
tar czf /backup/container_name_$(date +%Y%m%d).tar.gz -C /source .
# Container starten
docker start container_name
Datenbank-Backups:
# PostgreSQL Backup
docker exec postgres_container \
pg_dump -U username database_name > \
/volume1/backups/db_backup_$(date +%Y%m%d).sql
# MySQL Backup
docker exec mysql_container \
mysqldump -u root -p database_name > \
/volume1/backups/mysql_backup_$(date +%Y%m%d).sql
Troubleshooting
Häufige VM-Probleme
VM startet nicht:
# Prüfungen:
1. Ausreichend RAM verfügbar?
2. Hardware-Virtualisierung aktiviert?
3. Storage-Pool hat freien Speicher?
4. ISO-Image korrekt gemountet?
# Logs prüfen:
# VMM > Virtuelle Maschine > Protokoll
Performance-Probleme:
- CPU-Typ auf "Host" ändern für bessere Performance
- Virtio-Treiber installieren
- RAM-Balloning deaktivieren falls Issues
- SSD-Cache aktivieren
Container-Debugging
Container startet nicht:
# Container-Logs prüfen
docker logs container_name
# Interactive debugging
docker run -it --entrypoint /bin/bash image_name
# Port-Konflikte prüfen
netstat -tulpn | grep :port_number
Network-Issues:
# Container-Netzwerk prüfen
docker network ls
docker network inspect bridge
# DNS-Tests
docker exec container_name nslookup google.com
Best Practices
Resource Planning
Sizing Guidelines:
Kleine Umgebung (4-8 GB RAM):
- 2-3 Container ODER 1 kleine VM
- Monitoring: Basis-Setup
Mittlere Umgebung (16-32 GB RAM):
- 10-15 Container UND 1-2 VMs
- Monitoring: Vollständiger Stack
- Development: Separate Umgebungen
Große Umgebung (64+ GB RAM):
- 20+ Container UND 3-5 VMs
- Production-Workloads
- Multi-Tenant-Setup
Wartung und Updates
Regelmäßige Aufgaben:
# Wöchentlich:
- Container-Images aktualisieren
- Ungenutzten Images aufräumen: docker system prune
- VM-Snapshots überprüfen
# Monatlich:
- VMM Tools in VMs aktualisieren
- Performance-Metriken analysieren
- Backup-Integrität testen
Dokumentation
Wichtige Informationen festhalten:
- Container-Konfigurationen (docker-compose.yml)
- VM-Spezifikationen und Zweck
- Netzwerk-Topologie
- Backup-Verfahren und Recovery-Tests
- Passwörter und Zugangsdaten (sicher verwahrt)
Fazit
Virtualisierung und Container auf Synology NAS öffnen unendliche Möglichkeiten - von einfachen Heimserver-Anwendungen bis hin zu komplexen Entwicklungsumgebungen. Mit der richtigen Planung und Umsetzung wird dein NAS zum Herzstück deiner IT-Infrastruktur.
Nächste Schritte:
- Klein anfangen mit 1-2 Containern
- Monitoring einrichten für Ressourcen-Übersicht
- Backup-Strategie implementieren
- Schrittweise erweitern je nach Bedarf
Wichtiger Hinweis: Experimentiere zuerst in einer Testumgebung und führe regelmäßige Backups durch, bevor du produktive Systeme virtualisierst!