Einleitung
In diesem Tutorial richten wir eine professionelle Firewall-Lösung mit OPNsense für dein Homelab ein. Anders als bei Consumer-Routern erhältst du volle Kontrolle über Netzwerk-Segmentierung, Firewall-Regeln und erweiterte Funktionen.
Was erreichen wir:
- Dedizierte Firewall zwischen Internet und lokalem Netzwerk
- PPPoE-Verbindung direkt über OPNsense (Modem nur als Bridge)
- Grundlage für VLAN-Segmentierung (wird später manuell konfiguriert)
Zielgruppe: Homelab-Enthusiasten, IT-Interessierte mit Linux/Netzwerk-Grundkenntnissen
Netzwerk-Topologie
Minimale Topologie (nach diesem Tutorial)
Internet
│
▼
┌─────────────────┐
│ FritzBox 7590 │ Bridge-Modus
│ (DSL-Modem) │ VLAN 7, PPPoE-Passthrough
└────────┬────────┘
│ WAN (blau)
▼
┌─────────────────┐
│ OPNsense FW │ PPPoE-Einwahl
│ 192.168.10.1 │
└────────┬────────┘
│ LAN (gelb)
▼
Client-PC
192.168.10.2Ziel-Topologie (späterer Ausbau)
Internet
│
▼
┌─────────────────┐
│ FritzBox 7590 │
└────────┬────────┘
│ WAN
▼
┌─────────────────┐
│ OPNsense FW │ 9 VLANs (10,20,30,40,50)
└────────┬────────┘
│ Trunk (alle VLANs tagged)
▼
┌─────────────────┐
│ Managed Switch │ TL-SG2218
│ (L2 Switch) │ VLAN-Segmentierung
└─────────────────┘
│
┌────┴────┬─────────┬─────────┬─────────┬
▼ ▼ ▼ ▼ ▼
MGMT CLIENTS GUESTS INFRA IOT
(VLAN 10) (VLAN 20) (VLAN 30) (VLAN 40) (VLAN 50)Benötigte Hardware
Firewall-System
- Mindestanforderung: 2x RJ45 Ports (WAN + LAN)
- Empfohlene Specs:
- CPU: 2+ Kerne (x86-64)
- RAM: 4GB (Minimum 2GB)
- Storage: 20GB SSD/HDD
- Beispiele:
- Gebrauchter PC/Mini-PC (Dell OptiPlex, HP EliteDesk)
- Dedizierte Firewall-Hardware (Protectli, Qotom)
- Selbstbau mit Board + Dual-NIC
Netzwerk-Equipment
- Modem: In diesem Tutorial FritzBox 7530/7590
- Funktioniert auch mit anderen DSL/Cable/Glasfaser-Modems
- Wichtig: Muss Bridge-Modus oder PPPoE-Passthrough unterstützen
- 2x LAN-Kabel Cat6/Cat6A:
- 1x blau (empfohlen) - Modem → Firewall WAN
- 1x gelb (empfohlen) - Firewall LAN → Client (Später Switch Trunk an Port 1)
Installation & Ersteinrichtung
- USB-Stick: Mindestens 8GB (wird gelöscht!)
- Bildschirm, Tastatur, Maus für Firewall-System
- Passendes Videokabel: HDMI, DisplayPort oder VGA (je nach Firewall-Hardware)
Zugangsdaten & Software
- PPPoE-Zugangsdaten vom Internet-Provider
- OPNsense DVD ISO: Von https://opnsense.org/download/
- Rufus (Windows) oder
dd(Linux) zum Erstellen des USB-Sticks
Phase 1: Bootbares USB-Medium erstellen
OPNsense ISO herunterladen
- Besuche: https://opnsense.org/download/
- Wähle:
- Architecture:
amd64(für x86-64 Systeme) - Image Type:
dvd(vollständiges Installations-Image) - Mirror: Deutschland oder Europa für schnelleren Download
- Architecture:
- ISO-Datei herunterladen (ca. 500-700 MB)
Windows: USB-Stick erstellen mit Rufus
- Rufus herunterladen: https://rufus.ie/
- Rufus starten (Administrator-Rechte)
- USB-Stick auswählen im Dropdown “Laufwerk”
- SELECT klicken → OPNsense ISO-Datei auswählen
- Partitionsschema: MBR (für BIOS und UEFI)
- START klicken
- Wichtiger Dialog: “ISO-Image-Modus oder DD-Image-Modus?”
- ⚠️ DD-Image-Modus wählen!
- ISO-Modus funktioniert nicht zuverlässig
- Warnung bestätigen (alle Daten auf USB werden gelöscht)
- Warten bis “FERTIG” erscheint
Linux: USB-Stick erstellen mit dd
# USB-Gerät identifizieren
lsblk
# Beispiel-Ausgabe:
# sdb 8:16 1 14.9G 0 disk
# └─sdb1 8:17 1 14.9G 0 part
# ISO auf USB schreiben (Beispiel: /dev/sdb)
sudo dd if=OPNsense-24.x-dvd-amd64.iso of=/dev/sdb bs=4M status=progress conv=fsync
# Alternativ mit pv für Fortschrittsanzeige:
sudo dd if=OPNsense-24.x-dvd-amd64.iso | pv | sudo dd of=/dev/sdb bs=4M conv=fsync⚠️ Wichtige Hinweise:
/dev/sdbist ein Beispiel - MUSS an dein System angepasst werden!- Verwende das Block-Device (
/dev/sdb), NICHT die Partition (/dev/sdb1) - Alle Daten auf dem USB-Stick werden unwiderruflich gelöscht
- Sync dauert nach 100% noch etwas - nicht vorzeitig abbrechen
Phase 2: FritzBox in Bridge-Modus konfigurieren
Ziel: FritzBox leitet DSL-Signal transparent durch, PPPoE-Einwahl erfolgt über OPNsense
Warum Bridge-Modus?
- FritzBox agiert nur als Modem (Layer 1/2)
- Keine Firewall-Funktionen der FritzBox aktiv
- OPNsense hat volle Kontrolle über Internet-Verbindung
- Bessere Performance (keine doppelte NAT)
Vorbereitung
- FritzBox zurücksetzen (optional, aber empfohlen)
- WLAN ausschalten (per Taster deaktivieren)
Client verbinden:
- LAN-Kabel von PC an Port 1 der FritzBox
- DHCP sollte IP automatisch zuweisen (192.168.178.x)
Konfiguration Schritt-für-Schritt
1. FritzBox-Oberfläche öffnen
- Browser öffnen
- URL:
https://fritz.boxoderhttp://192.168.178.1 - Login:
- Passwort: Vom Typenschild auf der Rückseite der FritzBox
2. Navigation zu Zugangsdaten
- Menü links: Internet → Zugangsdaten
3. Internetanbieter konfigurieren
Bereich “Internetanbieter”:
- Dropdown “Internetanbieter”: Ganz nach unten scrollen
- Auswählen: “Weitere Internetanbieter”
- Ein zweites Dropdown erscheint
- Erneut auswählen: “Weitere Internetanbieter”
- Namen vergeben: (optional, kann leer bleiben)
4. Anschluss-Typ
Bereich “Anschluss”:
- Auswahl bleibt auf: “Anschluss an einem DSL-Anschluss”
5. Zugangsdaten deaktivieren
Bereich “Zugangsdaten”:
- Frage: “Werden Zugangsdaten benötigt?”
- Radio Button: “Nein” auswählen
6. Verbindungseinstellungen (WICHTIG!)
Dropdown öffnen: “Verbindungseinstellungen ändern”
VLAN-Einstellungen:
- VLAN-ID eintragen: 7
- Standard für deutsche DSL-Provider (Telekom, EWE, etc.)
- Bei anderen Providern: Beim Support erfragen
PPPoE-Passthrough aktivieren:
- Checkbox aktivieren:
- “Angeschlossene Netzwerkgeräte dürfen zusätzlich ihre eigene Internetverbindung aufbauen (nicht empfohlen)”
- Trotz Warnung: Das ist genau was wir wollen!
7. Speichern
- Wichtig: Checkbox deaktivieren:
- “Internetzugang nach dem Übernehmen prüfen”
- Grund: FritzBox kann selbst keine Verbindung mehr aufbauen
- Übernehmen klicken
- Warten bis Einstellungen gespeichert sind (ca. 10-20 Sekunden)
8. Abschluss
- Browser-Tab schließen
- LAN-Kabel vom Client-PC abziehen
- Verkabelung für Installation:
- Blaues LAN-Kabel: FritzBox Port 1 → Firewall WAN-Port
FritzBox ist nun im Bridge-Modus konfiguriert!
Phase 3: OPNsense Installation
Hardware vorbereiten
Verkabelung:
- USB-Stick an Firewall-System anschließen
- Bildschirm per HDMI/DP/VGA verbinden
- Tastatur anschließen (USB)
- WAN-Kabel (blau) NOCH NICHT anschließen
- Strom anschließen, System NOCH NICHT einschalten
Boot vom USB-Stick
Option A: One-Time-Boot-Menü (empfohlen)
- System einschalten
- Sofort Boot-Menü-Taste drücken (mehrfach):
- Dell/HP: F12
- Lenovo: F12 oder F10
- ASUS/MSI: F8 oder F11
- Generic/Mainboard: ESC, F11 oder F12
- USB-Stick aus Liste auswählen
- Enter drücken
Option B: BIOS/UEFI Boot-Reihenfolge ändern
- System einschalten
- BIOS-Taste drücken (meist DEL, F2, F10)
- Boot-Reihenfolge: USB an erste Stelle
- Speichern und Exit (meist F10)
Live-System starten
Boot-Vorgang:
- OPNsense Logo erscheint
- Boot-Optionen werden angezeigt
- Einfach warten (kein Tastendruck nötig)
- Default-Option bootet automatisch nach 10 Sekunden
- Bootvorgang läuft durch (ca. 30-60 Sekunden)
Login-Prompt erscheint:
OPNsense - opnsense.localdomain - ttyv0
login:Installer starten
Login-Daten für Live-System:
login: installer
Password: opnsense⚠️ Wichtig:
- NICHT
rootals Login verwenden! - Im Live-System ist
installerder richtige Benutzer
Installation durchführen
Schritt 1: Keymap auswählen
Nach dem Login erscheint ein Dialog-Menü:
┌─────────────────── Choose your keyboard layout ────────────────────┐
│ -> German │
│ German (no accent keys) │
│ ... │
└────────────────────────────────────────────────────────────────────┘- Pfeiltasten:
Germanauswählen - Enter drücken
- Bestätigungs-Dialog: “Continue with de.kbd keymap” → Enter
Schritt 2: Dateisystem wählen
┌──────────── Select file system ─────────────┐
│ -> UFS │
│ ZFS │
└─────────────────────────────────────────────┘Empfehlung: ZFS auswählen
Warum ZFS?
- Copy-on-Write (CoW) → Daten-Integrität
- Bessere Performance bei Schreibvorgängen
- Snapshot-Fähigkeit (für Backups)
- Selbstheilende Checksummen
UFS Alternative:
- Einfacher, weniger Overhead
- Für Systeme mit wenig RAM (<2GB)
Auswahl:
- Pfeiltaste auf
ZFS - Enter
Schritt 3: ZFS Pool Configuration
┌──────────── ZFS Configuration ────────────┐
│ Pool Type: │
│ -> stripe Striped - No Redundancy │
│ mirror Mirror - n-Way Mirroring │
│ raid10 RAID 1+0 - n x 2-Way Mirrors │
│ raidz1 RAID-Z1 - Single Redundancy │
│ raidz2 RAID-Z2 - Double Redundancy │
│ raidz3 RAID-Z3 - Triple Redundancy │
└───────────────────────────────────────────┘Für Homelab-Firewall:
- stripe auswählen (einzelne Disk, keine Redundanz)
- Grund: Firewall-Config ist klein, regelmäßige Backups ausreichend
Falls RAID gewünscht: Mirror bei 2 Disks für Redundanz
Auswahl:
stripebelassen- Enter
Schritt 4: Disk auswählen
┌──────────── Select Disk(s) ────────────┐
│ [ ] ada0 20GB ATA Samsung SSD │
│ [ ] ada1 500GB ATA WD Blue │
└────────────────────────────────────────┘- Pfeiltasten: Zur richtigen Disk navigieren
- Leertaste: Disk markieren [X]
- Richtige Disk prüfen! (Größe, Name)
- Enter drücken
⚠️ Warnung: Ausgewählte Disk wird komplett gelöscht!
Schritt 5: Installation bestätigen
┌───────────────────────────────────────────────┐
│ Last Chance! │
│ All data on ada0 will be DESTROYED! │
│ Continue with installation? │
│ │
│ [ Yes ] [ No ] │
└───────────────────────────────────────────────┘- Tab-Taste:
Yesauswählen - Enter drücken
Installation läuft:
- Fortschrittsbalken erscheint
- Dauer: ca. 2-5 Minuten (je nach USB/Disk-Geschwindigkeit)
- Nicht System ausschalten während Installation!
Schritt 6: Root-Passwort setzen
Nach Abschluss der Installation:
┌──────────── Complete ─────────────┐
│ [ ] Root Password │
│ [ ] Reboot │
└───────────────────────────────────┘- Pfeiltasten:
Root Passwordauswählen - Enter
Passwort-Dialog:
┌──────────── Root Password ─────────────┐
│ New Password: │
└────────────────────────────────────────┘
┌──────── Confirm Root Password ─────────┐
│ Confirm Password: │
└────────────────────────────────────────┘Sicheres Passwort wählen:
- Mindestens 12 Zeichen
- Groß-/Kleinbuchstaben, Zahlen, Sonderzeichen
- Wichtig: Gut merken/notieren - wird für Web-Interface benötigt!
Beispiel-Anforderungen:
Gut: FW-Haus#2024!Secure
Schlecht: admin123Schritt 7: Installation abschließen
Zurück im Menü:
- Pfeiltasten:
Rebootauswählen - Enter
System startet neu:
- USB-Stick entfernen wenn Aufforderung erscheint
- Oder: Einfach abwarten, System bootet von Festplatte
Phase 4: Netzwerk-Grundkonfiguration (Console)
Login am installierten System
Nach Neustart und Boot-Vorgang erscheint:
*** OPNsense.localdomain: OPNsense 24.x (amd64/OpenSSL) ***
WAN (re0) -> v4/DHCP4: (no carrier)
LAN (re1) -> v4: 192.168.1.1/24
0) Logout 7) Ping host
1) Assign interfaces 8) Shell
2) Set interface IP address 9) pfTop
3) Reset the root password 10) Firewall log
4) Reset to factory defaults 11) Reload all services
5) Power off system 12) Update from console
6) Reboot system 13) Restore a configurationWenn die Zuweisung der Interfaces für WAN und LAN bereits richtig ist, brauchen wir hier nichts machen. Ansonsten durch Option 1) Assign interfaces navigieren, sodass das richtige Netzwerk-Interface dem richtigen Typ zugeordnet ist.
Phase 5: Client-Zugriff vorbereiten
Physische Verkabelung
Aktuelle Verkabelung:
- WAN-Kabel (blau): FritzBox Port 1 → Firewall WAN-Port
- LAN-Kabel (gelb): Firewall LAN-Port → Client-PC
- Stromversorgung: Firewall eingesteckt und eingeschaltet
Client-PC IP-Konfiguration
Da kein DHCP aktiv ist, muss eine statische IP konfiguriert werden.
Windows 10/11
Netzwerkadapter öffnen:
- Win + R →
ncpa.cpl→ Enter - Oder: Systemsteuerung → Netzwerk und Internet → Netzwerkverbindungen
Adapter konfigurieren:
- Rechtsklick auf Ethernet (oder aktiver Adapter)
- Eigenschaften
- Doppelklick auf Internetprotokoll Version 4 (TCP/IPv4)
IP-Einstellungen:
● Folgende IP-Adresse verwenden:
IP-Adresse: 192.168.1.2
Subnetzmaske: 255.255.255.0
Standardgateway: 192.168.1.1
● Folgende DNS-Serveradressen verwenden:
Bevorzugter DNS-Server: 192.168.1.1
Alternativer DNS-Server: [leer lassen]- OK → OK
Verbindung testen:
ping 192.168.1.1Erwartung: Antwort von 192.168.1.1
Linux (Debian/Ubuntu/Fedora)
NetworkManager (GUI)
- Netzwerk-Icon im System Tray → Wired Settings
- Zahnrad-Symbol bei aktivem Adapter
- Tab: IPv4
- Method: Manual
- Add klicken:
- Address:
192.168.1.2 - Netmask:
255.255.255.0(oder /24) - Gateway:
192.168.1.1
- Address:
- DNS:
192.168.1.1 - Apply
NetworkManager (CLI)
# Interface-Name herausfinden
ip a
# Beispiel: Interface "enp0s3"
nmcli con mod "Wired connection 1" ipv4.method manual \
ipv4.addresses 192.168.1.2/24 \
ipv4.gateway 192.168.1.1 \
ipv4.dns 192.168.1.1
# Verbindung neu starten
nmcli con up "Wired connection 1"Systemd-networkd
/etc/systemd/network/20-wired.network:
[Match]
Name=enp0s3
[Network]
Address=192.168.1.2/24
Gateway=192.168.1.1
DNS=192.168.1.1sudo systemctl restart systemd-networkdVerbindung testen:
ping -c 4 192.168.1.1macOS
- Systemeinstellungen → Netzwerk
- Ethernet auswählen (oder aktiver Adapter)
- Details…
- Tab: TCP/IP
- IPv4 konfigurieren: Manuell
- IPv4-Adresse:
192.168.1.2 - Teilnetzmaske:
255.255.255.0 - Router:
192.168.1.1
- IPv4-Adresse:
- Tab: DNS
- DNS-Server:
192.168.1.1
- DNS-Server:
- OK → Anwenden
Verbindung testen:
ping 192.168.1.1Phase 6: Web-Interface Zugriff
Browser öffnen und OPNsense aufrufen
Unterstützte Browser:
- Chrome/Chromium
- Firefox
- Edge
- Safari (macOS)
URL eingeben:
https://192.168.1.1⚠️ Wichtig:
- HTTPS verwenden (nicht http)
- Keine Port-Nummer nötig (Standard 443)
SSL-Zertifikat-Warnung
Es erscheint eine Sicherheitswarnung:
Ihre Verbindung ist nicht sicher
Die Website verwendet möglicherweise ein ungültiges SicherheitszertifikatGrund: Self-signed Certificate (selbst signiert)
Warnung umgehen:
Firefox:
- Erweitert klicken
- Risiko akzeptieren und fortfahren
Chrome/Edge:
- Erweitert klicken
- Weiter zu 192.168.1.1 (unsicher)
Safari:
- Details anzeigen
- Website trotzdem besuchen
Login-Seite
Login-Dialog erscheint:
┌─────────────────────────────────────┐
│ OPNsense Login │
├─────────────────────────────────────┤
│ Username: [ ] │
│ Password: [ ] │
│ │
│ [ Login ] │
└─────────────────────────────────────┘Login-Daten:
Username: root
Password: [dein Root-Passwort aus der Installation]Login klicken
Wizard überspringen
Nach erfolgreichem Login:
┌──────────────────────────────────────────┐
│ Welcome to OPNsense! │
│ │
│ This wizard will guide you through │
│ the initial configuration... │
│ │
│ [ Next ] [ Skip ] │
└──────────────────────────────────────────┘Wizard überspringen:
- Skip klicken
- Oder: Wizard schließen (X oben rechts)
Bestätigung (falls gefragt):
Are you sure you want to skip the wizard?- Yes / Ja
Phase 7: System-Konfiguration
Nach dem Überspringen des Wizards konfigurieren wir OPNsense manuell nach Best Practices.
System: Settings: General
Navigation: System > Settings > General
Diese Seite enthält netzwerkweite Einstellungen wie Hostname, Domain und DNS-Konfiguration.
Konfiguration:
| Option | Wert | Erklärung |
|---|---|---|
| Hostname | fw | Hostname der Firewall (frei wählbar) |
| Domain | home.arpa | Deine lokale Domain (z.B. home.local oder eigene Domain) |
| Time zone | Europe/Berlin | Zeitzone für Deutschland |
| DNS servers | Leer lassen | Keine manuellen DNS-Server eintragen |
| DNS server options | ☑ Allow DNS server list to be overridden by DHCP/PPP on WAN | DNS vom Provider per PPPoE übernehmen |
Speichern: Save klicken
System: Settings: Administration
Navigation: System > Settings > Administration
Hier konfigurieren wir Zugriff auf das Web-Interface, SSH und Console.
Web GUI Sektion:
| Option | Wert | Erklärung |
|---|---|---|
| Protocol | HTTPS | Sollte bereits Standard sein |
| HTTP Strict Transport Security | ☑ Enable HTTP Strict Transport Security | Browser erzwingt HTTPS |
| TCP port | 443 | Standard HTTPS-Port (nicht ändern) |
| HTTP Redirect | ☐ Unchecked | Kein automatischer Redirect auf HTTPS |
| DNS Rebind Check | ☐ Unchecked | Für Sicherheit aktiviert lassen |
| HTTP Compression | High | Bei ausreichend CPU-Leistung; sonst Low |
| Listen Interfaces | All (recommended) | Web-Interface auf allen Interfaces erreichbar |
Hinweis: SSH/Console-Einstellungen können vorerst auf Standard bleiben.
Speichern: Save klicken
System: Settings: Miscellaneous
Navigation: System > Settings > Miscellaneous
Optionale Einstellungen für Thermal Sensors, Backups und Power Management.
| Option | Wert | Erklärung |
|---|---|---|
| Thermal Sensors Hardware | Intel Core CPU | Bei Intel-Hardware; bei AMD entsprechend anpassen |
| Periodic RRD Backup | 24 hours | Optional: Tägliches Backup der Performance-Daten |
| Periodic DHCP Leases Backup | 24 hours | Optional: Tägliches Backup der DHCP-Leases |
| Use PowerD | ☑ Checked | Nur wenn Power Saving im BIOS aktiviert |
| Power Mode | Hiadaptive | Performance über Stromsparen priorisieren |
Speichern: Save klicken
Phase 8: Interface-Konfiguration
Interfaces: Settings
Navigation: Interfaces > Settings
Hardware-Offloading deaktivieren:
Es wird empfohlen, Hardware-Offloading zu deaktivieren, da es bei vielen NICs zu Problemen führen kann - insbesondere in Kombination mit IDS/IPS (Suricata).
| Option | Wert | Erklärung |
|---|---|---|
| Hardware CRC | ☑ Disable hardware checksum offload | Verhindert Checksum-Probleme |
| Hardware TSO | ☑ Disable hardware TCP segmentation offload | Verhindert TCP-Segmentierungs-Probleme |
| Hardware LRO | ☑ Disable hardware large receive offload | Verhindert Large-Receive-Probleme |
| VLAN Hardware Filtering | Disable VLAN Hardware Filtering | VLAN-Probleme vermeiden |
Speichern: Save klicken
Interfaces: Other Types: VLAN
Navigation: Interfaces > Devices > VLAN
Wir erstellen 5 VLANs für die Netzwerk-Segmentierung. Das LAN-Interface wird als Parent Interface verwendet - später wird es zum Trunk.
VLANs erstellen:
Für jedes VLAN unten: + Button klicken → Werte eintragen → Save
VLAN 10 - MGMT
| Option | Wert |
|---|---|
| Device | Leer lassen (automatisch generiert) |
| Parent | igc1 (LAN Interface - bei dir ggf. anderer Name wie re1, em1, igb1) |
| VLAN tag | 10 |
| VLAN priority | Best Effort (Standard) |
| Description | MGMT |
Save klicken
VLAN 20 - CLIENTS
| Option | Wert |
|---|---|
| Device | Leer lassen |
| Parent | igc1 (LAN Interface) |
| VLAN tag | 20 |
| VLAN priority | Best Effort |
| Description | CLIENTS |
Save klicken
VLAN 30 - GUESTS
| Option | Wert |
|---|---|
| Device | Leer lassen |
| Parent | igc1 (LAN Interface) |
| VLAN tag | 30 |
| VLAN priority | Best Effort |
| Description | GUESTS |
Save klicken
VLAN 40 - INFRA
| Option | Wert |
|---|---|
| Device | Leer lassen |
| Parent | igc1 (LAN Interface) |
| VLAN tag | 40 |
| VLAN priority | Best Effort |
| Description | INFRA |
Save klicken
VLAN 50 - IOT
| Option | Wert |
|---|---|
| Device | Leer lassen |
| Parent | igc1 (LAN Interface) |
| VLAN tag | 50 |
| VLAN priority | Best Effort |
| Description | IOT |
Save klicken
Ergebnis: 5 VLANs erstellt auf dem LAN-Interface als Parent
Interfaces: Assignments
Navigation: Interfaces > Assignments
Jedes VLAN muss als separates Interface zugewiesen werden, damit OPNsense damit arbeiten kann.
VLAN-Interfaces zuweisen:
Im Bereich “New interface” unten:
Interface Assignment: MGMT (VLAN 10)
- Network port Dropdown:
MGMT on igc1 (VLAN 10)auswählen - Description:
MGMTeintragen +Button klicken (Interface wird zugewiesen)
Interface Assignment: CLIENTS (VLAN 20)
- Network port Dropdown:
CLIENTS on igc1 (VLAN 20)auswählen - Description:
CLIENTSeintragen +Button klicken
Interface Assignment: GUESTS (VLAN 30)
- Network port Dropdown:
GUESTS on igc1 (VLAN 30)auswählen - Description:
GUESTSeintragen +Button klicken
Interface Assignment: INFRA (VLAN 40)
- Network port Dropdown:
INFRA on igc1 (VLAN 40)auswählen - Description:
INFRAeintragen +Button klicken
Interface Assignment: IOT (VLAN 50)
- Network port Dropdown:
IOT on igc1 (VLAN 50)auswählen - Description:
IOTeintragen +Button klicken
Ergebnis: Alle VLANs als Interfaces zugewiesen - erscheinen nun im Menü unter Interfaces
Phase 9: WAN Interface konfigurieren
Navigation: Interfaces > [WAN]
Das WAN-Interface muss für PPPoE konfiguriert werden.
WAN Konfiguration:
| Option | Wert | Erklärung |
|---|---|---|
| Enable | ☑ Enable interface | Sollte bereits aktiviert sein |
| Lock | ☑ Prevent interface removal | Verhindert versehentliches Entfernen |
| Description | WAN | Standard-Name |
| Block private networks | ☑ Checked | RFC1918-Netze von außen blockieren |
| Block bogon networks | ☑ Checked | Ungültige IP-Ranges blockieren |
| IPv4 Configuration Type | PPPoE | WICHTIG: Von DHCP auf PPPoE ändern! |
| IPv6 Configuration Type | None | Vorerst kein IPv6 |
Nun speichern wir die WAN Einstellungen mittels “Save” und dann auf “Apply changes”.
Klicke nun auf “Click here for PPP-specific configuration options. Save first if you made changes.” Fülle wie folgt aus:
| Option | Wert |
|---|---|
| Username | PPPoE-Benutzername vom Provider |
| Password | PPPoE-Passwort vom Provider |
| MTU | 1492 (typisch für PPPoE) |
| MSS | Leer lassen |
Anschließend klicken wir wieder auf Save und Apply changes.
Phase 10: VLAN-Interfaces konfigurieren
Interfaces: [MGMT] (VLAN 10)
Navigation: Interfaces > [MGMT]
Allgemeine Einstellungen:
| Option | Wert |
|---|---|
| Enable | ☑ Enable interface |
| Lock | ☑ Prevent interface removal |
| Description | MGMT |
| Block private networks | ☐ Unchecked |
| Block bogon networks | ☐ Unchecked |
| IPv4 Configuration Type | Static IPv4 |
| IPv6 Configuration Type | None |
IPv4 Configuration:
| Option | Wert |
|---|---|
| IPv4 address | 192.168.10.1 |
| Subnet mask | /24 |
| IPv4 gateway rules | Disabled |
⚠️ WICHTIG: Speichern ist in Ordnung, aber noch nicht Apply changes drücken.
Interfaces: [CLIENTS] (VLAN 20)
Navigation: Interfaces > [CLIENTS]
| Option | Wert |
|---|---|
| Enable | ☑ Enable interface |
| Lock | ☑ Prevent interface removal |
| Description | CLIENTS |
| Block private networks | ☐ Unchecked |
| Block bogon networks | ☐ Unchecked |
| IPv4 Configuration Type | Static IPv4 |
| IPv6 Configuration Type | None |
| IPv4 address | 192.168.20.1 |
| Subnet mask | /24 |
| IPv4 gateway rules | Disabled |
⚠️ WICHTIG: Speichern ist in Ordnung, aber noch nicht Apply changes drücken.
Interfaces: [GUESTS] (VLAN 30)
Navigation: Interfaces > [GUESTS]
| Option | Wert |
|---|---|
| Enable | ☑ Enable interface |
| Lock | ☑ Prevent interface removal |
| Description | GUESTS |
| Block private networks | ☐ Unchecked |
| Block bogon networks | ☐ Unchecked |
| IPv4 Configuration Type | Static IPv4 |
| IPv6 Configuration Type | None |
| IPv4 address | 192.168.30.1 |
| Subnet mask | /24 |
| IPv4 gateway rules | Disabled |
⚠️ WICHTIG: Speichern ist in Ordnung, aber noch nicht Apply changes drücken.
Interfaces: [INFRA] (VLAN 40)
Navigation: Interfaces > [INFRA]
| Option | Wert |
|---|---|
| Enable | ☑ Enable interface |
| Lock | ☑ Prevent interface removal |
| Description | INFRA |
| Block private networks | ☐ Unchecked |
| Block bogon networks | ☐ Unchecked |
| IPv4 Configuration Type | Static IPv4 |
| IPv6 Configuration Type | None |
| IPv4 address | 192.168.40.1 |
| Subnet mask | /24 |
| IPv4 gateway rules | Disabled |
⚠️ WICHTIG: Speichern ist in Ordnung, aber noch nicht Apply changes drücken.
Interfaces: [IOT] (VLAN 50)
Navigation: Interfaces > [IOT]
| Option | Wert |
|---|---|
| Enable | ☑ Enable interface |
| Lock | ☑ Prevent interface removal |
| Description | IOT |
| Block private networks | ☐ Unchecked |
| Block bogon networks | ☐ Unchecked |
| IPv4 Configuration Type | Static IPv4 |
| IPv6 Configuration Type | None |
| IPv4 address | 192.168.50.1 |
| Subnet mask | /24 |
| IPv4 gateway rules | Disabled |
⚠️ WICHTIG: Nachdem wir nun alle VLAN Interfaces konfiguriert haben, können wir nach dem “Save” dann ein “Apply changes” durchführen.
Phase 11: DHCP-Server konfigurieren (Kea DHCP)
Hinweis: Der frühere ISC DHCPv4 ist in OPNsense als „(legacy)" markiert und wird abgelöst. Dieses Tutorial nutzt den modernen Kea DHCP (
Services > Kea DHCP). Der Aufbau ist anders als bei ISC: Kea ist nicht per-Interface — man aktiviert den Dienst einmal (mit Auswahl der Interfaces) und legt dann pro VLAN ein Subnet an.
DHCP läuft auf MGMT, CLIENTS, GUESTS und IOT. INFRA (VLAN 40) bekommt KEIN DHCP — Server dort haben statische IPs.
Schritt 1: Control Agent aktivieren
Navigation: Services > Kea DHCP > Control Agent
| Option | Wert |
|---|---|
| Enabled | ☑ |
| Bind address | 127.0.0.1 |
| Bind port | 8000 |
Apply. Der Control Agent ist Keas Steuer-/API-Schnittstelle (u. a. für HA).
Schritt 2: Kea DHCPv4 aktivieren
Navigation: Services > Kea DHCP > Kea DHCPv4 → Tab Settings
| Option | Wert | Erklärung |
|---|---|---|
| Enabled (Service) | ☑ | Kea-DHCPv4-Dienst einschalten |
| Interfaces | MGMT, CLIENTS, GUESTS, IOT | hier lauscht Kea (INFRA bewusst NICHT) |
| Valid lifetime | 4000 | Lease-Dauer in Sekunden (Standard) |
| Firewall rules | ☑ | passende Pass-Regeln automatisch anlegen |
Apply.
Schritt 3: Subnets anlegen (eines je VLAN)
Navigation: Services > Kea DHCP > Kea DHCPv4 → Tab Subnets → je +. Unter DHCP option
data „Auto collect option data" deaktivieren und Gateway/DNS explizit setzen (= jeweilige
Interface-IP). Danach Save + Apply.
| VLAN | Subnet | Pools | Routers (Gateway) | DNS servers |
|---|---|---|---|---|
| MGMT | 192.168.10.0/24 | 192.168.10.100 - 192.168.10.200 | 192.168.10.1 | 192.168.10.1 |
| CLIENTS | 192.168.20.0/24 | 192.168.20.100 - 192.168.20.200 | 192.168.20.1 | 192.168.20.1 |
| GUESTS | 192.168.30.0/24 | 192.168.30.100 - 192.168.30.200 | 192.168.30.1 | 192.168.30.1 |
| IOT | 192.168.50.0/24 | 192.168.50.100 - 192.168.50.200 | 192.168.50.1 | 192.168.50.1 |
Domain name je Subnet leer lassen → es gilt die Firewall-Domain (home.arpa).
Schritt 4 (optional): Reservierungen
Navigation: Services > Kea DHCP > Kea DHCPv4 → Tab Reservations → +: Subnet wählen,
IP address (feste IP), MAC address des Clients, optional Hostname. Save + Apply.
Leases einsehen
Navigation: Services > Kea DHCP > Leases DHCPv4 — zeigt die aktiven Leases.
Achtung — DNS-Registrierung: Die Unbound-Option „Register ISC DHCP4 Leases" (Phase 12) registriert ISC-Leases, nicht automatisch die von Kea. Für verlässliche Namensauflösung von Servern nutze Reservierungen + bei Bedarf Host-Overrides in Unbound (
Services > Unbound DNS > Overrides).
Phase 12: DNS Konfiguration
System: Settings: General (Prüfung)
Navigation: System > Settings > General
Sicherstellen:
- DNS servers: Leer
- ☑ Allow DNS server list to be overridden by DHCP/PPP on WAN
Falls nicht schon in Phase 7 gemacht: Save
Services: Unbound DNS: General
Navigation: Services > Unbound DNS > General
| Option | Wert | Erklärung |
|---|---|---|
| Enable | ☑ Enable Unbound | DNS Resolver aktivieren |
| Listen Port | 53 | Standard DNS-Port |
| Network Interfaces | All (recommended) | Auf allen Interfaces lauschen |
| DNSSEC | ☐ Unchecked | Nur wenn Provider DNSSEC unterstützt |
| Register ISC DHCP4 Leases | ☑ Checked | DHCP-Clients per Hostname erreichbar |
| Register DHCP Static Mappings | ☑ Checked | Statische DHCP-Einträge registrieren |
| DNS Cache | ☑ Flush DNS cache during reload | Cache bei Änderungen leeren |
| Local Zone Type | transparent | Standard-Wert |
Apply
Cache-TTL begrenzen (gegen „hängende" / zu lange gecachte Einträge)
Unbound cached Antworten standardmäßig sehr lange (Maximum-TTL bis 24 h). Bei Einträgen mit
langer Upstream-TTL wirkt das, als ob der Resolver „ewig" alte Werte ausliefert — vor allem nach
DNS-Änderungen. Die Stellschrauben liegen unter Services > Unbound DNS > Advanced im Abschnitt
Cache Settings:
| Feld | Wert | Erklärung |
|---|---|---|
| Maximum TTL for RRsets and messages | 3600 | Obergrenze (Sek.), wie lange irgendein Eintrag gecacht wird. 1 h = guter Kompromiss; 300 für sehr frisch |
| Minimum TTL for RRsets and messages | 0 | Auf 0 lassen — höher hält Einträge länger als ihre eigene TTL (klassische Ursache für „cached ewig") |
| Maximum Negative TTL for RRsets and messages | 300 | wie lange „existiert nicht"-Antworten gecacht werden |
Apply. (Zu niedrige Werte erhöhen Upstream-Last und Latenz.)
Hinweis: „Flush DNS cache during reload" (General) leert den Cache bei jeder Konfig-Änderung; akut leeren geht über einen Neustart des Unbound-Dienstes.
Apply
Phase 13: Firewall Aliases
Navigation: Firewall > Aliases
Aliases machen Firewall-Regeln lesbarer und wartbarer. Dies ist nun ein allgemeines Beispiel, welches nicht zwingend angelegt werden muss. Wir werden dieses Beispiel nirgends verwenden.
Alias: PrivateNetworks
Klicke + Button um neuen Alias zu erstellen:
| Option | Wert |
|---|---|
| Enabled | ☑ Checked |
| Name | PrivateNetworks |
| Type | Network(s) |
| Content | 10.0.0.0/8 (Komma nach jedem Eintrag)172.16.0.0/12192.168.0.0/16 |
| Description | All RFC1918 private IPv4 networks |
Save
⚠️ Wichtig: Nach dem Erstellen von Aliases: Apply Button klicken, damit sie in Firewall-Regeln verfügbar sind!
Phase 14: Firewall Rules
Navigation: Firewall > Rules > [Interface]
Wichtig:
- Regeln werden von oben nach unten abgearbeitet
- Erste passende Regel gewinnt
- “Invert” bei Destination bedeutet “alles AUSSER”
Firewall: Rules: [MGMT]
Navigation: Firewall > Rules > [MGMT]
Das MGMT Netz ist für kritische Infrastruktur-Management UIs, Dienste und Zugriffe wie zum Beispiel der Zugriff auf unser OPNsense UI, das Switch UI und andere kommende Dienste. Außerdem dient es auch der Verwaltung anderer Dienste in unseren Netzen, die wir erreichen können wollen. Damit ist das MGMT Netz ein sehr empfindliches Netz und wird auch nur über ein bestimmten Switch-Port erreichbar sein. Deswegen legen wir neben der Standard DNS und NTP Regel auch ein Zugriff eben auf Port 80/443 für HTTP/HTTPS Anfragen ins eigene Netz frei sowie den Zugriff auf alle anderen Netze und Ports.
Regel 1: Anti-Lockout - Allow Web Access to Firewall and Switch
| Feld | Wert |
|---|---|
| Action | Pass |
| Interface | MGMT |
| TCP/IP Version | IPv4 |
| Protocol | TCP |
| Source | MGMT net |
| Destination | MGMT net |
| Destination port range | From: HTTP (80), To: HTTPS (443) |
| Description | Anti-Lockout: Allow Web UI access (OPNsense + Switch) |
Save
Wichtig: Diese Regel verhindert, dass du dich aus dem MGMT-Netzwerk aussperrst. Sie erlaubt HTTP (80) für den Switch und HTTPS (443) für OPNsense.
Regel 2: Allow DNS to MGMT interface
| Feld | Wert |
|---|---|
| Action | Pass |
| Interface | MGMT |
| TCP/IP Version | IPv4 |
| Protocol | TCP/UDP |
| Source | MGMT net |
| Destination | MGMT address |
| Destination port range | From: DNS (53), To: DNS (53) |
| Description | Allow DNS to MGMT interface |
Save
Regel 3: Allow NTP to MGMT interface
| Feld | Wert |
|---|---|
| Action | Pass |
| Interface | MGMT |
| TCP/IP Version | IPv4 |
| Protocol | UDP |
| Source | MGMT net |
| Destination | MGMT address |
| Destination port range | From: NTP (123), To: NTP (123) |
| Description | Allow NTP to MGMT interface |
Save
Regel 4: Allow all from MGMT to any
| Feld | Wert |
|---|---|
| Action | Pass |
| Interface | MGMT |
| TCP/IP Version | IPv4 |
| Protocol | any |
| Source | MGMT net |
| Destination | any |
| Description | Allow all from MGMT (full admin access) |
Save
Apply changes (oben)
Firewall: Rules: [CLIENTS]
Navigation: Firewall > Rules > [CLIENTS]
CLIENTS ist das Netz für unser WLAN und eventuell gepatchte Switch-Ports für normale Clients des Hauses, welches später durch unseren AP per SSID ausgestrahlt wird. DNS und NTP Zugriffe sind erlaubt - auch Zugriffe auf das Internet, aber Zugriffe auf das private Netzwerke schließen wir explizit aus, da auch wenn nur vertrauenswürdige Geräte im WLAN sein werden (TVs, Smartphones, Laptops etc.) grundlegend diese Geräte infiziert oder kompromitiert sein können.
Regel 1: Allow DNS
| Feld | Wert |
|---|---|
| Action | Pass |
| Interface | CLIENTS |
| TCP/IP Version | IPv4 |
| Protocol | TCP/UDP |
| Source | CLIENTS net |
| Destination | CLIENTS address |
| Destination port range | DNS (53) |
| Description | Allow DNS to CLIENTS interface |
Save
Regel 2: Allow NTP
| Feld | Wert |
|---|---|
| Action | Pass |
| Interface | CLIENTS |
| TCP/IP Version | IPv4 |
| Protocol | UDP |
| Source | CLIENTS net |
| Destination | CLIENTS address |
| Destination port range | NTP (123) |
| Description | Allow NTP to CLIENTS interface |
Save
Regel 3: Allow ICMP
| Feld | Wert |
|---|---|
| Action | Pass |
| Interface | CLIENTS |
| TCP/IP Version | IPv4 |
| Protocol | ICMP |
| Source | CLIENTS net |
| Destination | any |
| Description | Allow ICMP from CLIENTS |
Save
Regel 4: Block to private networks, allow Internet
| Feld | Wert |
|---|---|
| Action | Pass |
| Interface | CLIENTS |
| TCP/IP Version | IPv4 |
| Protocol | any |
| Source | CLIENTS net |
| Destination / Invert | ☑ Invert match aktivieren! |
| Destination | PrivateNetworks (Alias) |
| Description | Allow Internet, block access to other private networks |
Save
Apply changes
Firewall: Rules: [GUESTS]
Navigation: Firewall > Rules > [GUESTS]
GUESTS ist das Netz für unser Gäste-WLAN, welches später durch unseren AP per SSID ausgestrahlt wird. DNS und NTP Zugriffe sind erlaubt - auch Zugriffe auf das Internet, aber Zugriffe auf das private Netzwerke schließen wir explizit aus.
Regel 1: Allow DNS
| Feld | Wert |
|---|---|
| Action | Pass |
| Interface | GUESTS |
| TCP/IP Version | IPv4 |
| Protocol | TCP/UDP |
| Source | GUESTS net |
| Destination | GUESTS address |
| Destination port range | DNS (53) |
| Description | Allow DNS to GUESTS interface |
Save
Regel 2: Allow NTP
| Feld | Wert |
|---|---|
| Action | Pass |
| Interface | GUESTS |
| TCP/IP Version | IPv4 |
| Protocol | UDP |
| Source | GUESTS net |
| Destination | GUESTS address |
| Destination port range | NTP (123) |
| Description | Allow NTP to GUESTS interface |
Save
Regel 3: Block to private networks, allow Internet
| Feld | Wert |
|---|---|
| Action | Pass |
| Interface | GUESTS |
| TCP/IP Version | IPv4 |
| Protocol | any |
| Source | GUESTS net |
| Destination / Invert | ☑ Invert match |
| Destination | PrivateNetworks |
| Description | Allow Internet only, block private networks |
Save
Apply changes
Firewall: Rules: [INFRA]
Navigation: Firewall > Rules > [INFRA]
INFRA ist unser Netz für Server-Infrastruktur wie Virtualisierungs-Systeme. Wir werden hier einmal unsere DNS und NTP Regeln anlegen, aber weitere erstmal offen lassen, da diese spezifisch je nach Dienst benötigt werden.
Regel 1: Allow DNS
| Feld | Wert |
|---|---|
| Action | Pass |
| Interface | INFRA |
| TCP/IP Version | IPv4 |
| Protocol | TCP/UDP |
| Source | INFRA net |
| Destination | INFRA address |
| Destination port range | DNS (53) |
| Description | Allow DNS to INFRA interface |
Save
Regel 2: Allow NTP
| Feld | Wert |
|---|---|
| Action | Pass |
| Interface | INFRA |
| TCP/IP Version | IPv4 |
| Protocol | UDP |
| Source | INFRA net |
| Destination | INFRA address |
| Destination port range | NTP (123) |
| Description | Allow NTP to INFRA interface |
Save
Apply changes
Firewall: Rules: [IOT]
Navigation: Firewall > Rules > [IOT]
Das IOT Netz ist unser Netz für Dinge wie IP Kameras, Smart Home Gateways etc. - also Dinge, die eventuell anfällig für Sicherheitslücken sind. Da auch hier wir erstmal keine direkten Beispiele haben, werden wir auch hier vorerst nur DNS und NTP erlauben. Beispiele folgen in späteren Anleitungen. Den Zugriff auf andere Private Netzwerk schließen wir explizit aus, auch wenn die VLANs an sich sowieso ohne explizite Pass Regeln eigentlich kein Zugriff aufeinander haben.
Regel 1: Allow DNS
| Feld | Wert |
|---|---|
| Action | Pass |
| Interface | IOT |
| TCP/IP Version | IPv4 |
| Protocol | TCP/UDP |
| Source | IOT net |
| Destination | IOT address |
| Destination port range | DNS (53) |
| Description | Allow DNS to IOT interface |
Save
Regel 2: Allow NTP
| Feld | Wert |
|---|---|
| Action | Pass |
| Interface | IOT |
| TCP/IP Version | IPv4 |
| Protocol | UDP |
| Source | IOT net |
| Destination | IOT address |
| Destination port range | NTP (123) |
| Description | Allow NTP to IOT interface |
Save
Regel 3: Block to private networks, allow Internet
| Feld | Wert |
|---|---|
| Action | Pass |
| Interface | IOT |
| TCP/IP Version | IPv4 |
| Protocol | any |
| Source | IOT net |
| Destination / Invert | ☑ Invert match |
| Destination | PrivateNetworks |
| Description | Allow Internet, block private networks |
Save
Apply changes
Phase 15: Switch Konfiguration (TP-Link TL-SG2218)
Vorbereitung
Hardware:
- TP-Link TL-SG2218 (18 Port Managed Switch (16x RJ45, 2x SFP)
- Client-PC für Konfiguration
Initial-Verbindung:
- Switch mit Strom versorgen
- Client-PC per Kabel an Port 3 des Switches (wird unser MGMT Access Port)
- Client-PC statische IP setzen:
192.168.0.10/24(Default-IP des Switches:192.168.0.1)
Zugriff:
- Browser:
http://192.168.0.1oderhttps://192.168.0.1 - Login:
admin/admin(Standard - nach Login ändern!)
Switch Management-IP ändern
Navigation: L3 Features → Interfaces → Add
Neue IP für MGMT VLAN:
| Option | Wert |
|---|---|
| Interface ID | 10 |
| IP Address Mode | Static |
| IP Address | 192.168.10.2 |
| Subnet Mask | 255.255.255.0 |
| Default Gateway | 192.168.10.1 |
| Admin Status | Enable |
| Interface Name | MGMT |
VLAN Konfiguration
Navigation: L2 Features → VLAN → 802.1Q VLAN
Standard: Alle Ports sind in VLAN 1 (Untagged) - wie bei unmanaged Switch.
VLAN 10 - MGMT erstellen
Add Button klicken:
| Feld | Wert |
|---|---|
| VLAN ID | 10 |
| VLAN Name | MGMT |
Untagged Ports:
- ☑ Port 2 (Trunk zum Access Point)
- ☑ Port 3 (MGMT Access Port - für Notfall-Zugriff)
Tagged Ports:
- ☑ Port 1 (Trunk zu OPNsense)
Create
Port Config:
- Port 2 → PVID:
10 - Port 3 → PVID:
10
Apply
⚠️ Wichtig: Nachdem wir hier dann den Port 3 auf PVID 10 gestellt haben, werden wir die Verbindung verlieren. In dem Moment ist folgendes zu tun:
- Unser Client der an Port 3 angeschlossen ist, brauch eine IP aus dem MGMT Netz. Wir haben hier
192.168.10.10genommen und brauch192.168.10.1als DNS und Gateway Server konfiguriert. - Wir sollten nun den LAN Port der OPNsense, an dem wir während der Konfiguration mit dem Client angebunden waren an Port 1 des Switches verbinden, um den Trunk zu ermöglichen
Sobald das erledigt ist, können wir den Switch auf seiner neuen Adresse erreichen: https://192.168.10.2
Wir müssen uns dann einmal neu einloggen mit dem admin Benutzer und unserem gesetzten Passwort.
Wenn wir alles richtig gemacht haben, können wir die OPNsense nun auch unter https://192.168.10.1erreichen.
Wenn alles fein ist, können wir nun mit der Switch Konfiguration fortfahren.
VLAN 20 - CLIENTS erstellen
Add Button:
| Feld | Wert |
|---|---|
| VLAN ID | 20 |
| VLAN Name | CLIENTS |
Untagged Ports: Keine (alle Clients per WiFi)
Tagged Ports:
- ☑ Port 1 (Trunk zu OPNsense)
- ☑ Port 2 (Trunk zu Access Point)
Create
VLAN 30 - GUESTS erstellen
Add Button:
| Feld | Wert |
|---|---|
| VLAN ID | 30 |
| VLAN Name | GUESTS |
Untagged Ports: Keine
Tagged Ports:
- ☑ Port 1 (Trunk zu OPNsense)
- ☑ Port 2 (Trunk zu Access Point)
Apply
VLAN 40 - INFRA erstellen
Add Button:
| Feld | Wert |
|---|---|
| VLAN ID | 40 |
| VLAN Name | INFRA |
Untagged Ports:
- ☑ Port 4 (Server 1)
- ☑ Port 5 (Server 2)
- ☑ Port 6 (NAS)
Tagged Ports:
- ☑ Port 1 (Trunk zu OPNsense)
Create
Port Config:
- Port 4 → PVID:
40 - Port 5 → PVID:
40 - Port 6 → PVID:
40
Apply
VLAN 50 - IOT erstellen
Add Button:
| Feld | Wert |
|---|---|
| VLAN ID | 50 |
| VLAN Name | IOT |
Untagged Ports:
- ☑ Port 7 (IoT Device 1)
- ☑ Port 8 (IoT Device 2)
Tagged Ports:
- ☑ Port 1 (Trunk zu OPNsense)
Port Config:
- Port 7 → PVID:
50 - Port 8 → PVID:
50
Apply
VLAN 1 anpassen (wichtig!)
VLAN 1 bearbeiten:
Damit die VLANs isoliert sind, muss VLAN 1 von den verwendeten Ports entfernt werden.
VLAN 1 (Default):
Untagged Ports:
- ☐ Port 1 entfernen
- ☐ Port 2 entfernen
- ☐ Port 3 entfernen
- ☐ Port 4 entfernen
- ☐ Port 5 entfernen
- ☐ Port 6 entfernen
- ☐ Port 7 entfernen
- ☐ Port 8 entfernen
Tagged Ports: Keine
Nur unbenutzte Ports (9-18) bleiben in VLAN 1
Save
Port-Übersicht TL-SG2218
| Port | Gerät | Modus | VLANs | PVID | Beschreibung |
|---|---|---|---|---|---|
| 1 | OPNsense LAN | Trunk | 10,20,30,40,50 (Tagged) | 1 | Hauptverbindung zur Firewall |
| 2 | Access Point | Trunk | 20,30 (Tagged) | 1 | WiFi für CLIENTS + GUESTS |
| 3 | Management PC | Access | 10 (Untagged) | 10 | MGMT VLAN - Notfall-Zugriff |
| 4 | Server 1 | Access | 40 (Untagged) | 40 | INFRA VLAN |
| 5 | Server 2 | Access | 40 (Untagged) | 40 | INFRA VLAN |
| 6 | NAS/Storage | Access | 40 (Untagged) | 40 | INFRA VLAN |
| 7 | IoT Device 1 | Access | 50 (Untagged) | 50 | IOT VLAN |
| 8 | IoT Device 2 | Access | 50 (Untagged) | 50 | IOT VLAN |
| 9-18 | Reserve | Access | 1 (Untagged) | 1 | Unbenutzt - später zuweisen |
Trunk vs Access:
- Trunk: Mehrere VLANs tagged über einen Port (802.1Q)
- Access: Ein VLAN untagged, für normale Endgeräte
PVID (Port VLAN ID):
- Definiert welches VLAN untagged Traffic zugeordnet wird
- Trunk-Ports: PVID meist 1 (Management)
- Access-Ports: PVID = VLAN des Ports
Verkabelung durchführen
Nach Abschluss der Switch-Konfiguration:
- Port 1: OPNsense LAN-Port (igc1/re1) → Switch Port 1 (Trunk) - falls nicht bereits in Phase 15 nach der Konfiguration des VLAN 10 (MGMT)
- Port 2: Access Point → Switch Port 2 (Trunk)
- Port 3: Management-PC bleibt angeschlossen (MGMT VLAN)
- Port 4-6: Server/NAS → Switch Port 4-6 (INFRA VLAN)
- Port 7-8: IoT-Geräte → Switch Port 7-8 (IOT VLAN)
Wichtig: Oben rechts Save am Switch klicken!
Phase 16: LAN Interface deaktivieren
Nun können wir unser “normales” LAN Interface welches auf dem Netz 192.168.1.1/24 läuft, abschalten.
Navigation: Interfaces > [LAN]
| Option | Wert |
|---|---|
| Enable | ☐ Enable interface deaktivieren! |
Save → Apply Changes
Phase 17: Access Point Konfiguration
**Beispiel: TP Link EAP610 1800AX
Anschluss
AP anschließen:
- Switch Port 2 → Access Point
Omada Software Controller und Access Point einrichten
Dieser Abschnitt beschreibt die Installation des TP-Link Omada Software Controllers auf einem Debian 13 Client sowie die Einrichtung eines Omada Access Points mit VLAN-getrennten WLANs.
Voraussetzungen
- Debian 13 (Trixie) Client am MGMT-Port (Port 3) des Switches im VLAN 10
- TP-Link Omada Access Point (z.B. EAP610) am Switch Port 2
- DHCP auf MGMT-VLAN aktiviert (Bereich z.B. 192.168.10.100–192.168.10.200)
- VLANs für CLIENTS (20) und GUESTS (30) bereits in OPNsense und am Switch konfiguriert
Hinweis: Da Controller und APs im selben VLAN sind, werden keine Firewall-Regeln benötigt. Der Controller kann später auf eine VM umgezogen werden – per Backup/Restore bleibt die Konfiguration erhalten.
Systemanforderungen (Controller v5.15.20+)
| Komponente | Version |
|---|---|
| Java | OpenJDK 17+ (Debian 13 liefert Java 21) |
| MongoDB | 7 oder 8 |
| JSVC | 1.0.15+ |
System aktualisieren
sudo apt update && sudo apt upgrade -yOpenJDK 21 installieren
sudo apt install -y openjdk-21-jre-headless
java -versionJSVC installieren
sudo apt install -y jsvc
jsvc -versionMongoDB 8 installieren
# Abhängigkeiten
sudo apt-get install -y gnupg curl
# MongoDB GPG Key importieren
curl -fsSL https://www.mongodb.org/static/pgp/server-8.0.asc | \
sudo gpg -o /usr/share/keyrings/mongodb-server-8.0.gpg --dearmor
# Repository hinzufügen (Bookworm-Repo für Debian 13)
echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-8.0.gpg ] https://repo.mongodb.org/apt/debian bookworm/mongodb-org/8.0 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-8.0.list
# Installieren
sudo apt-get update
sudo apt-get install -y mongodb-org
# MongoDB starten und aktivieren
sudo systemctl start mongod
sudo systemctl enable mongod
sudo systemctl status mongodOmada Controller herunterladen und installieren
cd /tmp
wget https://static.tp-link.com/upload/software/2024/202411/20241101/Omada_SDN_Controller_v5.15.20.2_linux_x64.deb
sudo dpkg --ignore-depends=jsvc -i Omada_SDN_Controller_v5.15.20.2_linux_x64.debAktueller Download: https://www.tp-link.com/support/download/omada-software-controller/
Controller starten
sudo tpeap start
sudo tpeap statusChromium installieren (optional, für PDF-Export)
sudo apt install -y chromiumController Ersteinrichtung
Web-Interface aufrufen
Im Browser öffnen:
https://localhost:8043Oder von einem anderen Gerät im VLAN 10:
https://<Client-IP>:8043Controller Access einrichten
Beim ersten Aufruf erscheint die Registrierungsseite. Nur den oberen Teil ausfüllen:
| Feld | Eintragen |
|---|---|
| Owner Name | Admin-Benutzername (z.B. admin) |
| Password | Sicheres Passwort |
| Confirm Password | Passwort wiederholen |
| E-Mail für Passwort-Reset |
Cloud Access: Überspringen – die TP-Link ID Felder leer lassen.
Terms: Haken setzen bei “I accept the Terms of Use…”
Auf Next klicken.
Setup Wizard – Schritt 1: Omada Setup Wizard
| Feld | Eintragen |
|---|---|
| Controller Name | Homelab |
| Controller Country/Region | Germany |
| Controller Time Zone | (UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna |
| Controller Update Notification | Optional aktivieren |
| Join User Experience Improvement Program | Deaktivieren (sendet Telemetrie an TP-Link) |
Next klicken.
Setup Wizard – Schritt 2: Create Site
| Feld | Eintragen |
|---|---|
| Site Name | Homelab |
| Site Country/Region | Germany |
| Site Time Zone | (UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna |
| Switch Series | Access Series/ Aggregation (Smart / L2+) |
| Username | Geräte-Login für APs (z.B. admin) |
| Password | Sicheres Passwort (min. 10 Zeichen, Groß-/Kleinbuchstaben, Zahlen, Sonderzeichen, keine aufeinanderfolgenden gleichen Zeichen) |
| Application Scenario | Office |
Hinweis: Der Device Account wird bei Adoption auf die APs gepusht – diese Zugangsdaten für späteren SSH-Zugriff merken.
Next klicken.
Setup Wizard – Schritt 3: Configure Devices
Hier sollte der Access Point aufgelistet werden. Falls nicht:
- AP auf Werkseinstellungen zurücksetzen (Reset-Taste 8–10 Sekunden halten)
- Sicherstellen, dass DHCP auf MGMT-VLAN aktiv ist
- Refresh klicken
Sobald der AP erscheint, diesen auswählen und Next klicken.
Falls Adoption fehlschlägt mit “Device does not respond to adopt commands”:
- Der AP hat vermutlich noch die Standard-IP (192.168.0.254)
- DHCP auf MGMT-VLAN muss aktiv sein, damit der AP eine IP im richtigen Subnetz bekommt
- AP neu starten (Strom trennen), dann erneut Adopt versuchen
Setup Wizard – Schritt 4: Configure WAN Settings Overrides
Diesen Schritt überspringen – WAN läuft über OPNsense, nicht über ein Omada Gateway.
WAN Settings Overrides ausgeschaltet lassen und Next klicken.
Setup Wizard – Schritt 5: Configure Wi-Fi
Erste SSID für den Test anlegen:
| Feld | Eintragen |
|---|---|
| Network Name (SSID) | Homelab |
| Security | WPA-Personal |
| Password | WLAN-Passwort (min. 8 Zeichen) |
| Guest Wi-Fi | Deaktiviert lassen |
Next klicken.
Setup Wizard – Schritt 6: Summary
Einstellungen prüfen und Finish klicken.
VLANs im Controller anlegen
Nach dem Login in die Site “Homelab”:
VLAN für Clients erstellen
- Network Config → VLAN → Add (grüner Button)
- Konfiguration:
| Feld | Wert |
|---|---|
| Name | CLIENTS |
| VLAN ID | 20 |
| VLAN Type | Single |
| DHCP Server Device | Gateway |
| Gateway/Subnet | 192.168.20.1/24 (automatisch erkannt) |
| DHCP Server Enable | Aktivieren |
| DHCP Range | 192.168.20.100 – 192.168.20.200 |
- Next klicken
- Port-Konfiguration: Skip (EAP610 unterstützt dies nicht)
- Finish klicken
VLAN für Gäste erstellen
Gleiche Schritte wiederholen:
| Feld | Wert |
|---|---|
| Name | GUESTS |
| VLAN ID | 30 |
| VLAN Type | Single |
| DHCP Server Device | Gateway |
| Gateway/Subnet | 192.168.30.1/24 |
| DHCP Server Enable | Aktivieren |
| DHCP Range | 192.168.30.100 – 192.168.30.200 |
WLANs mit VLANs verknüpfen
Bestehendes WLAN auf VLAN 20 umstellen
- Network Config → WLAN
- Bei “Homelab” auf Edit klicken
- Runterscrollen zu VLAN
- Auf Custom stellen
- Add VLAN → Radio Button by Network auswählen
- Im Dropdown CLIENTS (VLAN 20) auswählen
- Apply klicken
Gäste-WLAN erstellen
- Network Config → WLAN → Create New Wireless Network
- Konfiguration:
| Feld | Wert |
|---|---|
| Network Name (SSID) | Homelab-Gäste |
| Device Type | EAP und Gateway |
| Band | 2.4 GHz, 5 GHz, 6 GHz (alle auswählen) |
| Guest Network | Deaktiviert (erlaubt Kommunikation zwischen Gästen) |
| Security | WPA-Personal |
| Password | Gäste-WLAN-Passwort |
| VLAN | Custom → by Network → GUESTS (30) |
- Apply klicken
Ergebnis prüfen
Nach der Einrichtung:
- Beide WLAN-SSIDs (“Homelab” und “Homelab-Gäste”) sollten sichtbar sein
- Verbindung mit beiden Netzwerken testen
- In OPNsense unter Services → DHCPv4 → Leases prüfen, ob Geräte IPs aus dem richtigen VLAN erhalten:
- Homelab-Clients: 192.168.20.x
- Homelab-Gäste: 192.168.30.x
Controller später umziehen
Wenn eine VM für den Controller bereit ist:
- Backup erstellen: Settings → Maintenance → Backup → Export
- Auf VM: Controller installieren, beim Setup “Restore from Backup” wählen
- APs re-adopten: Passiert meist automatisch. Falls nicht, per SSH auf AP:
set-inform http://<NEUE-IP>:29814/inform
Troubleshooting
Controller startet nicht:
sudo tail -f /opt/tplink/EAPController/logs/server.log
sudo systemctl status mongodAP wird nicht gefunden:
- DHCP auf MGMT-VLAN muss aktiv sein
- Switch-Port für AP muss VLAN 10 untagged haben
- AP auf Werkseinstellungen zurücksetzen
Adoption schlägt fehl:
- AP und Controller müssen im selben Subnetz sein oder der AP braucht eine Route zum Controller
- Standard-Zugangsdaten nach Reset:
admin/admin
WLAN funktioniert, aber kein Internet:
- Switch-Port für AP muss die WLAN-VLANs tagged haben (VLAN 20, 30)
- Firewall-Regeln in OPNsense prüfen (CLIENTS/GUESTS → WAN erlaubt?)
Phase 18: System Updates
Navigation: System > Firmware > Updates
Updates prüfen:
Check for updatesklicken
Verfügbare Updates installieren:
UpdateButton klicken bei angezeigten Paketen- Warten bis Installation abgeschlossen
- Bei Kernel-Updates: Reboot erforderlich
Regelmäßig prüfen: Mindestens monatlich Updates durchführen
Phase 19: Backup erstellen
Navigation: System > Configuration > Backups
Backup herunterladen:
Download configurationklicken- XML-Datei sicher speichern (z.B. auf NAS, Cloud)
Empfehlung:
- Nach jeder größeren Änderung Backup erstellen
- Backup extern aufbewahren
- Regelmäßig testen ob Restore funktioniert
Zusammenfassung
Was haben wir erreicht:
✅ OPNsense mit PPPoE-Internet-Verbindung
✅ 5 VLANs konfiguriert (10-MGMT, 20-CLIENTS, 30-GUESTS, 40-INFRA, 50-IOT)
✅ Managed Switch (TL-SG2218) mit VLAN-Segmentierung
✅ Notfall-MGMT-Port am Switch (Port 3) für direkten Zugriff
✅ Access Point mit 2 SSIDs (CLIENTS + GUESTS)
✅ Firewall-Regeln für Netzwerk-Isolation
✅ DNS + NTP Zugriff auf allen VLANs
✅ DHCP auf CLIENTS, GUESTS, IOT
✅ DNS Resolver (Unbound) aktiv
✅ Vollständig funktionsfähiges Homelab-Netzwerk
Finale Netzwerk-Topologie
Internet
│
▼
┌─────────────────┐
│ FritzBox 7590 │ Bridge-Modus
└────────┬────────┘
│ WAN
▼
┌─────────────────┐
│ OPNsense FW │ 192.168.10.1 (MGMT)
│ │ 192.168.20.1 (CLIENTS)
│ │ 192.168.30.1 (GUESTS)
│ │ 192.168.40.1 (INFRA)
│ │ 192.168.50.1 (IOT)
└────────┬────────┘
│ LAN (Trunk: VLAN 10,20,30,40,50)
▼
┌─────────────────┐
│ TL-SG2218 │ 192.168.10.2 (MGMT)
│ Managed Switch │
└────────┬────────┘
│
┌────┴─────┬──────────┬──────────┬──────────┬──────────┐
▼ ▼ ▼ ▼ ▼ ▼
┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐
│ AP │ │ MGMT │ │ Server │ │ NAS │ │ IoT #1 │ │ IoT #2 │
│ (P2) │ │ PC │ │ (P4) │ │ (P6) │ │ (P7) │ │ (P8) │
│Trunk: │ │ (P3) │ │INFRA │ │INFRA │ │ IOT │ │ IOT │
│20+30 │ │MGMT 10 │ │ 40 │ │ 40 │ │ 50 │ │ 50 │
└────────┘ └────────┘ └────────┘ └────────┘ └────────┘ └────────┘
│
├─ SSID: HomeNetwork (VLAN 20)
└─ SSID: Gast-WLAN (VLAN 30)Zusammenfassung
Du hast ein professionell segmentiertes Heimnetz aufgebaut:
- OPNsense mit PPPoE-Einwahl (FritzBox nur Bridge)
- Fünf VLANs (MGMT/CLIENTS/GUESTS/INFRA/IOT)
- Managed Switch mit Trunk-Port und Access-Ports
- Omada-AP mit zwei SSIDs, VLAN-zugeordnet
- Firewall-Regeln pro VLAN (DNS/NTP erlaubt, Inter-VLAN gesperrt)
- DNS-Resolver (Unbound), DHCP auf allen Client-VLANs
Das Netz ist jetzt bereit für den nächsten Schritt: Virtualisierung auf einem Server im INFRA-VLAN.
Troubleshooting
OPNsense nicht mehr erreichbar nach Apply Changes:
- Ursache: falsche Interface-IP oder VLAN-Zuweisung gesperrt den Zugriff.
- Lösung: Konsole am System → Option
2) Set interface IP address→ IP temporär zurücksetzen.
PPPoE baut keine Verbindung auf:
- FritzBox-PPPoE-Passthrough aktiv? (Phase 2, Checkbox)
- VLAN-ID korrekt? (Standard Telekom/EWE: 7 — beim Provider erfragen)
- Zugangsdaten korrekt? (Phase 9)
Client bekommt keine IP via DHCP:
- DHCP-Server auf dem Interface aktiv? (
Services > Kea DHCP > Leases DHCPv4) - Switch-Port-PVID korrekt gesetzt? (PVID = VLAN des Ports)
- Firewall-Regel erlaubt Traffic vom VLAN-Interface? (Pass-Regel muss vor dem Standard-Deny stehen)
AP wird im Omada-Controller nicht gefunden:
- DHCP auf MGMT-VLAN aktiv und AP-Port im richtigen VLAN? (Port 2 → PVID 10, VLAN 10 untagged)
- AP auf Werkseinstellungen zurücksetzen (Reset-Taste 8–10 Sekunden)
Switch nach PVID-Änderung nicht mehr erreichbar:
- Erwartet. Nach PVID-Wechsel auf Port 3 → Client braucht IP aus 192.168.10.x, Gateway 192.168.10.1.
- Dann Switch unter
https://192.168.10.2erreichbar.
Achtung Split-DNS: OPNsense ist nach dem Setup über 192.168.10.1 erreichbar — nicht mehr über 192.168.1.1. Merke dir diese Adresse oder trage sie in deinen DNS ein.
Weiterführend
- Was ist ein Homelab? (Serie Teil 0)
- KVM-Virtualisierung auf Debian 13 einrichten (Serie Teil 2)
- VMs & Storage Pools mit libvirt und virt-install (Serie Teil 3)
Changelog
- 2026-06-28 — Veröffentlicht. DHCP von ISC DHCPv4 (legacy) auf Kea DHCP umgestellt (gemäß offizieller OPNsense-Doku); Unbound-Cache-TTL über
Advanced → Cache Settings(Maximum/Minimum TTL); getestet auf OPNsense 25.7.11. - 2026-06-24 — SSL-Warn-IP in Phase 6 (Chrome/Edge) von 192.168.10.1 auf 192.168.1.1 korrigiert (Phase 6 findet vor dem VLAN-Setup statt); fehlendes schließendes ``` in Phase 4 ergänzt; Weiterführend- und Changelog-Abschnitt hinzugefügt.
- 2026-01-15 — Entwurf aus Eigenbetrieb erstellt.