OPNsense: Eigene Firewall fürs Homelab mit VLANs

TL;DR

OPNsense übernimmt die PPPoE-Einwahl (FritzBox nur Bridge), fünf VLANs trennen Management, Clients, Gäste, Infrastruktur und IoT, ein Managed Switch trunkt die VLANs und ein Omada-AP strahlt getrennte WLANs aus — ein professionell segmentiertes Heimnetz statt Consumer-Router.

Getestet auf
  • OPNsense 25.7.11 / FritzBox 7590 (Bridge) / TP-Link TL-SG2218 / EAP610 / 2026-06
Inhalt

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.2

Ziel-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

  1. Besuche: https://opnsense.org/download/
  2. Wähle:
    • Architecture: amd64 (für x86-64 Systeme)
    • Image Type: dvd (vollständiges Installations-Image)
    • Mirror: Deutschland oder Europa für schnelleren Download
  3. ISO-Datei herunterladen (ca. 500-700 MB)

Windows: USB-Stick erstellen mit Rufus

  1. Rufus herunterladen: https://rufus.ie/
  2. Rufus starten (Administrator-Rechte)
  3. USB-Stick auswählen im Dropdown “Laufwerk”
  4. SELECT klicken → OPNsense ISO-Datei auswählen
  5. Partitionsschema: MBR (für BIOS und UEFI)
  6. START klicken
  7. Wichtiger Dialog: “ISO-Image-Modus oder DD-Image-Modus?”
    • ⚠️ DD-Image-Modus wählen!
    • ISO-Modus funktioniert nicht zuverlässig
  8. Warnung bestätigen (alle Daten auf USB werden gelöscht)
  9. 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/sdb ist 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.box oder http://192.168.178.1
  • Login:
    • Passwort: Vom Typenschild auf der Rückseite der FritzBox

2. Navigation zu Zugangsdaten

  • Menü links: InternetZugangsdaten

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:

  1. USB-Stick an Firewall-System anschließen
  2. Bildschirm per HDMI/DP/VGA verbinden
  3. Tastatur anschließen (USB)
  4. WAN-Kabel (blau) NOCH NICHT anschließen
  5. Strom anschließen, System NOCH NICHT einschalten

Boot vom USB-Stick

Option A: One-Time-Boot-Menü (empfohlen)

  1. System einschalten
  2. 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
  3. USB-Stick aus Liste auswählen
  4. Enter drücken

Option B: BIOS/UEFI Boot-Reihenfolge ändern

  1. System einschalten
  2. BIOS-Taste drücken (meist DEL, F2, F10)
  3. Boot-Reihenfolge: USB an erste Stelle
  4. 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 root als Login verwenden!
  • Im Live-System ist installer der 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: German auswä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:

  • stripe belassen
  • 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: Yes auswä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 Password auswä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: admin123

Schritt 7: Installation abschließen

Zurück im Menü:

  • Pfeiltasten: Reboot auswä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 configuration

Wenn 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:

  1. WAN-Kabel (blau): FritzBox Port 1 → Firewall WAN-Port
  2. LAN-Kabel (gelb): Firewall LAN-Port → Client-PC
  3. 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:

  1. Win + Rncpa.cpl → Enter
  2. Oder: Systemsteuerung → Netzwerk und Internet → Netzwerkverbindungen

Adapter konfigurieren:

  1. Rechtsklick auf Ethernet (oder aktiver Adapter)
  2. Eigenschaften
  3. 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]
  1. OKOK

Verbindung testen:

ping 192.168.1.1

Erwartung: Antwort von 192.168.1.1

Linux (Debian/Ubuntu/Fedora)

NetworkManager (GUI)
  1. Netzwerk-Icon im System Tray → Wired Settings
  2. Zahnrad-Symbol bei aktivem Adapter
  3. Tab: IPv4
  4. Method: Manual
  5. Add klicken:
    • Address: 192.168.1.2
    • Netmask: 255.255.255.0 (oder /24)
    • Gateway: 192.168.1.1
  6. DNS: 192.168.1.1
  7. 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.1
sudo systemctl restart systemd-networkd

Verbindung testen:

ping -c 4 192.168.1.1

macOS

  1. SystemeinstellungenNetzwerk
  2. Ethernet auswählen (oder aktiver Adapter)
  3. Details…
  4. Tab: TCP/IP
  5. IPv4 konfigurieren: Manuell
    • IPv4-Adresse: 192.168.1.2
    • Teilnetzmaske: 255.255.255.0
    • Router: 192.168.1.1
  6. Tab: DNS
    • DNS-Server: 192.168.1.1
  7. OKAnwenden

Verbindung testen:

ping 192.168.1.1

Phase 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 Sicherheitszertifikat

Grund: Self-signed Certificate (selbst signiert)

Warnung umgehen:

Firefox:

  1. Erweitert klicken
  2. Risiko akzeptieren und fortfahren

Chrome/Edge:

  1. Erweitert klicken
  2. Weiter zu 192.168.1.1 (unsicher)

Safari:

  1. Details anzeigen
  2. 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:

OptionWertErklärung
HostnamefwHostname der Firewall (frei wählbar)
Domainhome.arpaDeine lokale Domain (z.B. home.local oder eigene Domain)
Time zoneEurope/BerlinZeitzone für Deutschland
DNS serversLeer lassenKeine manuellen DNS-Server eintragen
DNS server optionsAllow DNS server list to be overridden by DHCP/PPP on WANDNS 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:

OptionWertErklärung
ProtocolHTTPSSollte bereits Standard sein
HTTP Strict Transport SecurityEnable HTTP Strict Transport SecurityBrowser erzwingt HTTPS
TCP port443Standard HTTPS-Port (nicht ändern)
HTTP Redirect☐ UncheckedKein automatischer Redirect auf HTTPS
DNS Rebind Check☐ UncheckedFür Sicherheit aktiviert lassen
HTTP CompressionHighBei ausreichend CPU-Leistung; sonst Low
Listen InterfacesAll (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.

OptionWertErklärung
Thermal Sensors HardwareIntel Core CPUBei Intel-Hardware; bei AMD entsprechend anpassen
Periodic RRD Backup24 hoursOptional: Tägliches Backup der Performance-Daten
Periodic DHCP Leases Backup24 hoursOptional: Tägliches Backup der DHCP-Leases
Use PowerD☑ CheckedNur wenn Power Saving im BIOS aktiviert
Power ModeHiadaptivePerformance ü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).

OptionWertErklärung
Hardware CRCDisable hardware checksum offloadVerhindert Checksum-Probleme
Hardware TSODisable hardware TCP segmentation offloadVerhindert TCP-Segmentierungs-Probleme
Hardware LRODisable hardware large receive offloadVerhindert Large-Receive-Probleme
VLAN Hardware FilteringDisable VLAN Hardware FilteringVLAN-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

OptionWert
DeviceLeer lassen (automatisch generiert)
Parentigc1 (LAN Interface - bei dir ggf. anderer Name wie re1, em1, igb1)
VLAN tag10
VLAN priorityBest Effort (Standard)
DescriptionMGMT

Save klicken

VLAN 20 - CLIENTS

OptionWert
DeviceLeer lassen
Parentigc1 (LAN Interface)
VLAN tag20
VLAN priorityBest Effort
DescriptionCLIENTS

Save klicken

VLAN 30 - GUESTS

OptionWert
DeviceLeer lassen
Parentigc1 (LAN Interface)
VLAN tag30
VLAN priorityBest Effort
DescriptionGUESTS

Save klicken

VLAN 40 - INFRA

OptionWert
DeviceLeer lassen
Parentigc1 (LAN Interface)
VLAN tag40
VLAN priorityBest Effort
DescriptionINFRA

Save klicken

VLAN 50 - IOT

OptionWert
DeviceLeer lassen
Parentigc1 (LAN Interface)
VLAN tag50
VLAN priorityBest Effort
DescriptionIOT

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)

  1. Network port Dropdown: MGMT on igc1 (VLAN 10) auswählen
  2. Description: MGMT eintragen
  3. + Button klicken (Interface wird zugewiesen)

Interface Assignment: CLIENTS (VLAN 20)

  1. Network port Dropdown: CLIENTS on igc1 (VLAN 20) auswählen
  2. Description: CLIENTS eintragen
  3. + Button klicken

Interface Assignment: GUESTS (VLAN 30)

  1. Network port Dropdown: GUESTS on igc1 (VLAN 30) auswählen
  2. Description: GUESTS eintragen
  3. + Button klicken

Interface Assignment: INFRA (VLAN 40)

  1. Network port Dropdown: INFRA on igc1 (VLAN 40) auswählen
  2. Description: INFRA eintragen
  3. + Button klicken

Interface Assignment: IOT (VLAN 50)

  1. Network port Dropdown: IOT on igc1 (VLAN 50) auswählen
  2. Description: IOT eintragen
  3. + 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:

OptionWertErklärung
EnableEnable interfaceSollte bereits aktiviert sein
LockPrevent interface removalVerhindert versehentliches Entfernen
DescriptionWANStandard-Name
Block private networks☑ CheckedRFC1918-Netze von außen blockieren
Block bogon networks☑ CheckedUngültige IP-Ranges blockieren
IPv4 Configuration TypePPPoEWICHTIG: Von DHCP auf PPPoE ändern!
IPv6 Configuration TypeNoneVorerst 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:

OptionWert
UsernamePPPoE-Benutzername vom Provider
PasswordPPPoE-Passwort vom Provider
MTU1492 (typisch für PPPoE)
MSSLeer 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:

OptionWert
EnableEnable interface
LockPrevent interface removal
DescriptionMGMT
Block private networks☐ Unchecked
Block bogon networks☐ Unchecked
IPv4 Configuration TypeStatic IPv4
IPv6 Configuration TypeNone

IPv4 Configuration:

OptionWert
IPv4 address192.168.10.1
Subnet mask/24
IPv4 gateway rulesDisabled

⚠️ WICHTIG: Speichern ist in Ordnung, aber noch nicht Apply changes drücken.


Interfaces: [CLIENTS] (VLAN 20)

Navigation: Interfaces > [CLIENTS]

OptionWert
EnableEnable interface
LockPrevent interface removal
DescriptionCLIENTS
Block private networks☐ Unchecked
Block bogon networks☐ Unchecked
IPv4 Configuration TypeStatic IPv4
IPv6 Configuration TypeNone
IPv4 address192.168.20.1
Subnet mask/24
IPv4 gateway rulesDisabled

⚠️ WICHTIG: Speichern ist in Ordnung, aber noch nicht Apply changes drücken.


Interfaces: [GUESTS] (VLAN 30)

Navigation: Interfaces > [GUESTS]

OptionWert
EnableEnable interface
LockPrevent interface removal
DescriptionGUESTS
Block private networks☐ Unchecked
Block bogon networks☐ Unchecked
IPv4 Configuration TypeStatic IPv4
IPv6 Configuration TypeNone
IPv4 address192.168.30.1
Subnet mask/24
IPv4 gateway rulesDisabled

⚠️ WICHTIG: Speichern ist in Ordnung, aber noch nicht Apply changes drücken.


Interfaces: [INFRA] (VLAN 40)

Navigation: Interfaces > [INFRA]

OptionWert
EnableEnable interface
LockPrevent interface removal
DescriptionINFRA
Block private networks☐ Unchecked
Block bogon networks☐ Unchecked
IPv4 Configuration TypeStatic IPv4
IPv6 Configuration TypeNone
IPv4 address192.168.40.1
Subnet mask/24
IPv4 gateway rulesDisabled

⚠️ WICHTIG: Speichern ist in Ordnung, aber noch nicht Apply changes drücken.


Interfaces: [IOT] (VLAN 50)

Navigation: Interfaces > [IOT]

OptionWert
EnableEnable interface
LockPrevent interface removal
DescriptionIOT
Block private networks☐ Unchecked
Block bogon networks☐ Unchecked
IPv4 Configuration TypeStatic IPv4
IPv6 Configuration TypeNone
IPv4 address192.168.50.1
Subnet mask/24
IPv4 gateway rulesDisabled

⚠️ 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

OptionWert
Enabled
Bind address127.0.0.1
Bind port8000

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

OptionWertErklärung
Enabled (Service)Kea-DHCPv4-Dienst einschalten
InterfacesMGMT, CLIENTS, GUESTS, IOThier lauscht Kea (INFRA bewusst NICHT)
Valid lifetime4000Lease-Dauer in Sekunden (Standard)
Firewall rulespassende 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.

VLANSubnetPoolsRouters (Gateway)DNS servers
MGMT192.168.10.0/24192.168.10.100 - 192.168.10.200192.168.10.1192.168.10.1
CLIENTS192.168.20.0/24192.168.20.100 - 192.168.20.200192.168.20.1192.168.20.1
GUESTS192.168.30.0/24192.168.30.100 - 192.168.30.200192.168.30.1192.168.30.1
IOT192.168.50.0/24192.168.50.100 - 192.168.50.200192.168.50.1192.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

OptionWertErklärung
EnableEnable UnboundDNS Resolver aktivieren
Listen Port53Standard DNS-Port
Network InterfacesAll (recommended)Auf allen Interfaces lauschen
DNSSEC☐ UncheckedNur wenn Provider DNSSEC unterstützt
Register ISC DHCP4 Leases☑ CheckedDHCP-Clients per Hostname erreichbar
Register DHCP Static Mappings☑ CheckedStatische DHCP-Einträge registrieren
DNS CacheFlush DNS cache during reloadCache bei Änderungen leeren
Local Zone TypetransparentStandard-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:

FeldWertErklärung
Maximum TTL for RRsets and messages3600Obergrenze (Sek.), wie lange irgendein Eintrag gecacht wird. 1 h = guter Kompromiss; 300 für sehr frisch
Minimum TTL for RRsets and messages0Auf 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 messages300wie 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:

OptionWert
Enabled☑ Checked
NamePrivateNetworks
TypeNetwork(s)
Content10.0.0.0/8 (Komma nach jedem Eintrag)
172.16.0.0/12
192.168.0.0/16
DescriptionAll 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

FeldWert
ActionPass
InterfaceMGMT
TCP/IP VersionIPv4
ProtocolTCP
SourceMGMT net
DestinationMGMT net
Destination port rangeFrom: HTTP (80), To: HTTPS (443)
DescriptionAnti-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

FeldWert
ActionPass
InterfaceMGMT
TCP/IP VersionIPv4
ProtocolTCP/UDP
SourceMGMT net
DestinationMGMT address
Destination port rangeFrom: DNS (53), To: DNS (53)
DescriptionAllow DNS to MGMT interface

Save

Regel 3: Allow NTP to MGMT interface

FeldWert
ActionPass
InterfaceMGMT
TCP/IP VersionIPv4
ProtocolUDP
SourceMGMT net
DestinationMGMT address
Destination port rangeFrom: NTP (123), To: NTP (123)
DescriptionAllow NTP to MGMT interface

Save

Regel 4: Allow all from MGMT to any

FeldWert
ActionPass
InterfaceMGMT
TCP/IP VersionIPv4
Protocolany
SourceMGMT net
Destinationany
DescriptionAllow 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

FeldWert
ActionPass
InterfaceCLIENTS
TCP/IP VersionIPv4
ProtocolTCP/UDP
SourceCLIENTS net
DestinationCLIENTS address
Destination port rangeDNS (53)
DescriptionAllow DNS to CLIENTS interface

Save

Regel 2: Allow NTP

FeldWert
ActionPass
InterfaceCLIENTS
TCP/IP VersionIPv4
ProtocolUDP
SourceCLIENTS net
DestinationCLIENTS address
Destination port rangeNTP (123)
DescriptionAllow NTP to CLIENTS interface

Save

Regel 3: Allow ICMP

FeldWert
ActionPass
InterfaceCLIENTS
TCP/IP VersionIPv4
ProtocolICMP
SourceCLIENTS net
Destinationany
DescriptionAllow ICMP from CLIENTS

Save

Regel 4: Block to private networks, allow Internet

FeldWert
ActionPass
InterfaceCLIENTS
TCP/IP VersionIPv4
Protocolany
SourceCLIENTS net
Destination / InvertInvert match aktivieren!
DestinationPrivateNetworks (Alias)
DescriptionAllow 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

FeldWert
ActionPass
InterfaceGUESTS
TCP/IP VersionIPv4
ProtocolTCP/UDP
SourceGUESTS net
DestinationGUESTS address
Destination port rangeDNS (53)
DescriptionAllow DNS to GUESTS interface

Save

Regel 2: Allow NTP

FeldWert
ActionPass
InterfaceGUESTS
TCP/IP VersionIPv4
ProtocolUDP
SourceGUESTS net
DestinationGUESTS address
Destination port rangeNTP (123)
DescriptionAllow NTP to GUESTS interface

Save

Regel 3: Block to private networks, allow Internet

FeldWert
ActionPass
InterfaceGUESTS
TCP/IP VersionIPv4
Protocolany
SourceGUESTS net
Destination / InvertInvert match
DestinationPrivateNetworks
DescriptionAllow 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

FeldWert
ActionPass
InterfaceINFRA
TCP/IP VersionIPv4
ProtocolTCP/UDP
SourceINFRA net
DestinationINFRA address
Destination port rangeDNS (53)
DescriptionAllow DNS to INFRA interface

Save

Regel 2: Allow NTP

FeldWert
ActionPass
InterfaceINFRA
TCP/IP VersionIPv4
ProtocolUDP
SourceINFRA net
DestinationINFRA address
Destination port rangeNTP (123)
DescriptionAllow 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

FeldWert
ActionPass
InterfaceIOT
TCP/IP VersionIPv4
ProtocolTCP/UDP
SourceIOT net
DestinationIOT address
Destination port rangeDNS (53)
DescriptionAllow DNS to IOT interface

Save

Regel 2: Allow NTP

FeldWert
ActionPass
InterfaceIOT
TCP/IP VersionIPv4
ProtocolUDP
SourceIOT net
DestinationIOT address
Destination port rangeNTP (123)
DescriptionAllow NTP to IOT interface

Save

Regel 3: Block to private networks, allow Internet

FeldWert
ActionPass
InterfaceIOT
TCP/IP VersionIPv4
Protocolany
SourceIOT net
Destination / InvertInvert match
DestinationPrivateNetworks
DescriptionAllow Internet, block private networks

Save

Apply changes


Vorbereitung

Hardware:

  • TP-Link TL-SG2218 (18 Port Managed Switch (16x RJ45, 2x SFP)
  • Client-PC für Konfiguration

Initial-Verbindung:

  1. Switch mit Strom versorgen
  2. Client-PC per Kabel an Port 3 des Switches (wird unser MGMT Access Port)
  3. Client-PC statische IP setzen: 192.168.0.10/24 (Default-IP des Switches: 192.168.0.1)

Zugriff:

  • Browser: http://192.168.0.1 oder https://192.168.0.1
  • Login: admin / admin (Standard - nach Login ändern!)

Switch Management-IP ändern

Navigation: L3 FeaturesInterfacesAdd

Neue IP für MGMT VLAN:

OptionWert
Interface ID10
IP Address ModeStatic
IP Address192.168.10.2
Subnet Mask255.255.255.0
Default Gateway192.168.10.1
Admin StatusEnable
Interface NameMGMT

VLAN Konfiguration

Navigation: L2 FeaturesVLAN802.1Q VLAN

Standard: Alle Ports sind in VLAN 1 (Untagged) - wie bei unmanaged Switch.

VLAN 10 - MGMT erstellen

Add Button klicken:

FeldWert
VLAN ID10
VLAN NameMGMT

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.10 genommen und brauch 192.168.10.1 als 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:

FeldWert
VLAN ID20
VLAN NameCLIENTS

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:

FeldWert
VLAN ID30
VLAN NameGUESTS

Untagged Ports: Keine

Tagged Ports:

  • ☑ Port 1 (Trunk zu OPNsense)
  • ☑ Port 2 (Trunk zu Access Point)

Apply

VLAN 40 - INFRA erstellen

Add Button:

FeldWert
VLAN ID40
VLAN NameINFRA

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:

FeldWert
VLAN ID50
VLAN NameIOT

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

PortGerätModusVLANsPVIDBeschreibung
1OPNsense LANTrunk10,20,30,40,50 (Tagged)1Hauptverbindung zur Firewall
2Access PointTrunk20,30 (Tagged)1WiFi für CLIENTS + GUESTS
3Management PCAccess10 (Untagged)10MGMT VLAN - Notfall-Zugriff
4Server 1Access40 (Untagged)40INFRA VLAN
5Server 2Access40 (Untagged)40INFRA VLAN
6NAS/StorageAccess40 (Untagged)40INFRA VLAN
7IoT Device 1Access50 (Untagged)50IOT VLAN
8IoT Device 2Access50 (Untagged)50IOT VLAN
9-18ReserveAccess1 (Untagged)1Unbenutzt - 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:

  1. Port 1: OPNsense LAN-Port (igc1/re1) → Switch Port 1 (Trunk) - falls nicht bereits in Phase 15 nach der Konfiguration des VLAN 10 (MGMT)
  2. Port 2: Access Point → Switch Port 2 (Trunk)
  3. Port 3: Management-PC bleibt angeschlossen (MGMT VLAN)
  4. Port 4-6: Server/NAS → Switch Port 4-6 (INFRA VLAN)
  5. 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]

OptionWert
EnableEnable interface deaktivieren!

SaveApply 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+)

KomponenteVersion
JavaOpenJDK 17+ (Debian 13 liefert Java 21)
MongoDB7 oder 8
JSVC1.0.15+

System aktualisieren

sudo apt update && sudo apt upgrade -y

OpenJDK 21 installieren

sudo apt install -y openjdk-21-jre-headless
java -version

JSVC installieren

sudo apt install -y jsvc
jsvc -version

MongoDB 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 mongod

Omada 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.deb

Aktueller Download: https://www.tp-link.com/support/download/omada-software-controller/

Controller starten

sudo tpeap start
sudo tpeap status

Chromium installieren (optional, für PDF-Export)

sudo apt install -y chromium

Controller Ersteinrichtung

Web-Interface aufrufen

Im Browser öffnen:

https://localhost:8043

Oder von einem anderen Gerät im VLAN 10:

https://<Client-IP>:8043

Controller Access einrichten

Beim ersten Aufruf erscheint die Registrierungsseite. Nur den oberen Teil ausfüllen:

FeldEintragen
Owner NameAdmin-Benutzername (z.B. admin)
PasswordSicheres Passwort
Confirm PasswordPasswort wiederholen
EmailE-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

FeldEintragen
Controller NameHomelab
Controller Country/RegionGermany
Controller Time Zone(UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna
Controller Update NotificationOptional aktivieren
Join User Experience Improvement ProgramDeaktivieren (sendet Telemetrie an TP-Link)

Next klicken.

Setup Wizard – Schritt 2: Create Site

FeldEintragen
Site NameHomelab
Site Country/RegionGermany
Site Time Zone(UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna
Switch SeriesAccess Series/ Aggregation (Smart / L2+)
UsernameGeräte-Login für APs (z.B. admin)
PasswordSicheres Passwort (min. 10 Zeichen, Groß-/Kleinbuchstaben, Zahlen, Sonderzeichen, keine aufeinanderfolgenden gleichen Zeichen)
Application ScenarioOffice

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:

FeldEintragen
Network Name (SSID)Homelab
SecurityWPA-Personal
PasswordWLAN-Passwort (min. 8 Zeichen)
Guest Wi-FiDeaktiviert 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

  1. Network Config → VLAN → Add (grüner Button)
  2. Konfiguration:
FeldWert
NameCLIENTS
VLAN ID20
VLAN TypeSingle
DHCP Server DeviceGateway
Gateway/Subnet192.168.20.1/24 (automatisch erkannt)
DHCP Server EnableAktivieren
DHCP Range192.168.20.100192.168.20.200
  1. Next klicken
  2. Port-Konfiguration: Skip (EAP610 unterstützt dies nicht)
  3. Finish klicken

VLAN für Gäste erstellen

Gleiche Schritte wiederholen:

FeldWert
NameGUESTS
VLAN ID30
VLAN TypeSingle
DHCP Server DeviceGateway
Gateway/Subnet192.168.30.1/24
DHCP Server EnableAktivieren
DHCP Range192.168.30.100192.168.30.200

WLANs mit VLANs verknüpfen

Bestehendes WLAN auf VLAN 20 umstellen

  1. Network Config → WLAN
  2. Bei “Homelab” auf Edit klicken
  3. Runterscrollen zu VLAN
  4. Auf Custom stellen
  5. Add VLAN → Radio Button by Network auswählen
  6. Im Dropdown CLIENTS (VLAN 20) auswählen
  7. Apply klicken

Gäste-WLAN erstellen

  1. Network Config → WLAN → Create New Wireless Network
  2. Konfiguration:
FeldWert
Network Name (SSID)Homelab-Gäste
Device TypeEAP und Gateway
Band2.4 GHz, 5 GHz, 6 GHz (alle auswählen)
Guest NetworkDeaktiviert (erlaubt Kommunikation zwischen Gästen)
SecurityWPA-Personal
PasswordGäste-WLAN-Passwort
VLANCustomby NetworkGUESTS (30)
  1. 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:

  1. Backup erstellen: Settings → Maintenance → Backup → Export
  2. Auf VM: Controller installieren, beim Setup “Restore from Backup” wählen
  3. 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 mongod

AP 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 updates klicken

Verfügbare Updates installieren:

  • Update Button 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 configuration klicken
  • 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.2 erreichbar.

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


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.