OPNSense Teil 1: OPNSense hinter FritzBox im Dual-Stack
Inhaltsverzeichnis:
Einleitung
Hier erkläre ich, wie ich meine OPNSense Firewall hinter einer FRITZ!Box 7590 und einem Dual-Stack Internet-Anschluss der Telekom eingerichtet habe. Dabei kommen mehrere VLANs zum Einsatz:
- Intern (VLAN 22) - IPv4+IPv6
- Gast (VLAN 23) - IPv4+IPv6
- DMZ (VLAN 24) - IPv4 (only)
Bei der DMZ habe ich mich entschieden, kein IPv6 zu verwenden, sondern meine internen Dienste nur per IPv4 erreichbar zu machen. Das macht es weniger komplex, außerdem benötige ich für meine Anforderungen keine extern erreichbaren Dienste per IPv6.
Unsere zwei internen Netzwerke (VLAN22 und VLAN23) sollen also komplett mit IPv4 und IPv6-Adressen (Dual-Stack) ausgestattet werden:
- Globale Adressen (2003:de::): Die Adressen, mit denen jeder Client mit dem Internet kommuniziert
- ULA (unique local addresses) (fdb8::): Lokal gültige Adressen die über die verschiedenen Subnetze erreichbar sind
- link-lokale Adressen (fe80::): Lokale Adressen, die nur innerhalb des eigenen Subnetzes Gültigkeit haben
Unsere DNS-Anfragen sollen zu einem zentralen Server (AdGuard) weitergeleitet werden, dieser bekommt feste IP-Adressen zugewiesen. Statt AdGuard kann es genauso gut auch ein pi-hole sein.
Der AdGuard Container läuft in diesem Beispiel auf einem Unraid Server unter Docker.
Disclaimer
Ich versuche hier, eine Anleitung für das Einrichten einer OPNSense hinter einer FRITZ!Box so detailliert wie
möglich zu zeigen.
Wenn ihr euch bisher noch nicht mit IPv6, einer OPNSense usw. beschäftigt habt, werdet ihr nicht drum herum kommen,
euch tiefergehender mit diesen Themen zu beschäftigen, da sich eure Umgebung sicher in der ein oder anderen Weise
von meiner unterscheidet und sich die Anleitung evtl. nicht 1:1 bei euch anwenden lässt.
Seid also nicht frustriert wenn etwas nicht auf Anhieb funktioniert - das ging mir ganz genauso. Je tiefer man aber
in die Materie einsteigt, desto mehr versteht man davon, und irgend wann fängt es dann an, Spaß zu machen ;-)
Ihr könnt euch auch gerne über die Kommentarfunktion oder per E-Mail bei mir melden. Vielleicht kann ich euch ja helfen.
Verwendete Komponenten und Software-Versionen
- Internet-Anschluss: Dual-Stack Anschluss von der Deutschen Telekom
- Modem/Internet-Zugang: FRITZ!Box 7590 (FritzOS 8.21)
- Hardware für OPNSense:
- NRG Systems IPU451
- Intel Celeron N5105 Japser Lake
- 4x Intel i226V 2.5GBit
- 8GB DDR4-3200
- NRG Systems IPU451
- OPNSense Software Version 26.1.11_10-amd64
- VLAN-fähiger Switch: TP-Link TL-SG116E
- WLAN Access Point: Zyxel NWA50AX
- DNS Werbefilter: AdGuard (kann genauso gut auch ein pi-hole sein)
- Auf die Konfiguration des AdGuard gehe ich in Teil 2 dieses Tutorials ein
Wozu ULA?
Wozu sollen wir eigentlich ULA einrichten, wo wir doch schon link-lokale und globale Adressen haben?
Das zugewiesene öffentliche IPv6-Präfix unsere Providers ändert sich immer mal wieder, weswegen dieser Adressbereich leider nicht in Frage kommt für eine fest IP unseres AdGuard. Schließlich sollen unsere Clients den AdGuard immer unter derselben IP erreichen können.
Wenn wir IPv6 nutzen, haben wir zwar immer auch automatisch link-lokale Adressen (fe80::/10) im Einsatz, aber diese werden nicht über Subnetze geroutet. Da wir mehrere VLANs verwenden, ist dies auch keine Option. Also brauchen wir in diesem Szenario zusätzlich ULA.
Schaubild
Tipp: Zum Vergrößern das Bild in neuem Tab öffnen.

Konfiguration der FRITZ!Box
Die FRITZ!Box 7590 wird so konfiguriert, dass sie den Zugang zum Internet aufbaut und ein delegiertes IPv6-Subnetz (das wir von der Telekom bekommen) an unsere OPNSense weitergibt. Aus diesem Subnetz können wir dann weitere Subnetze für unsere dahinter liegenden VLANs bilden.
IPv6 konfigurieren
Heimnetz > Netzwerk > Netzwerkeinstellungen > Erweiterte Netzwerkeinstellugen änden > IPv6
- Router Advertisements im LAN aktiv
- Unique Local Addresses (ULAs) immer zuweisen
- Auch IPv6-Präfixe zulassen, die andere IPv6-Router im Heimnetz bekanntgeben
- Diese FRITZ!Box stellt den Standard-Internetzugang zur Verfügung
- Priorität: Hoch
DNSv6-Server im Heimnetz
- DNSv6-Server auch über Router Advertisement bekanntgeben (RFC 5006)
Erklärung: Da wir unseren eigenen DNSv6-Server (AdGuard) später im Netzwerk bekannt machen wollen, brauchen wir dieses Häkchen nicht zu setzen.
DHCPv6-Server im Heimnetz
- DHCPv6-Server in der FRITZ!Box für das Heimnetz aktivieren
- DNS-Server und IPv6-Präfix (IA_PD) zuweisen
OPNsense als Exposed Host konfigurieren
Die Funktion der Firewall soll in diesem Szenario nicht die FRITZ!Box übernehmen, sondern unsere OPNSense. Deswegen konfigurieren wir unsere OPNSense als “Exposed Host”, was bedeutet, dass alle Anfragen aus dem Internet dirket zur OPNSense durchgereicht werden. Zumindest für IPv4, bei IPv6 kann die FRITZ!Box weiter jeglichen eingehenden Verkehr vorher blockieren.
- Webinterface der FRITZ!Box öffnen
- Internet > Freigaben > Gerät für Freigabe hinzufügen
- OPNsense hinzufügen und Häkchen entspr. setzen:
IPv4-Einstellungen
- Dieses Gerät komplett für den Internetzugriff über IPv4 freigeben (Exposed Host)
IPv6-Einstellungen
- PING6 freigeben
- Firewall für delegierte IPv6-Präfixe dieses Gerätes öffnen > Erklärung: Das sorgt dann dafür, dass später das “Delegiert”-Netzwerk (siehe weiter unten) in der FB auftaucht
- Dieses Gerät komplett für den Internetzugriff über IPv6 freigeben (Exposed Host)
Da ich keine Dienste von außen per IPv6 erreichbar machen möchte, setze ich das letzte Häkchen nicht. Wollt Ihr auch IPv6 komplett zu eurer OPNSense durchleiten, könnt ihr das natürlich setzen.
IPv6-Präfixe prüfen
- Heimnetz > Netzwerk > Netzwerkeinstellungen > Erweiterte Netzwerkeinstellungen ändern > IPv6
Ganz unten auf der Seite findet man dann diese Infos:
Verwendete IPv6-Präfixe
Heimnetz: 2003:de:f73b:5400::/64
Delegiert: 2003:de:f73b:54f0:: / 60
WAN: 2003:de:f7ff:3be2::/64
Hinweis: Es kann etwas dauern bis der Netzwerkbereich hinter “Delegiert” auftaucht, ggf. die Seite einmal neu laden.
OPNSense konfigurieren
**Hinweis**
Leider habe ich zur Grundinstallation der OPNSense keine detailliertere Schritt-für-Schritt-Anleitung.
Wenn ich die Möglichkeit habe, liefere ich das nach. Allzu schwierig ist das aber nicht.
Hier die relevanten Punkte: Bei der Installation der OPNSense konfiguriert ihr ETH0 als WAN-Interface, ETH1 als Management Interface. Die Interfaces ETH2 und ETH3 sind bei meinem Setup nicht in Verwendung.
Das WAN-Interface bekommt die IP-Adresse 192.168.20.254 (das ist das Netzwerk der FRITZ!Box), das Management Interface die IP-Adresse 192.168.21.1 (wie oben im Bild zu sehen).
Gateway zur FRITZ!Box einrichten
Ggf. ist das bei euch dann auch schon konfiguriert, wenn ihr es im Installer entspr. konfiguriert habt.
- Webinterface der OPNSense öffnen
- System > Gateways > Configuration > Auf das “+"-Symbol klicken
- Interface: WAN
- IP Address: 192.168.20.1
- Description: WAN Gateway
WAN-Interface konfigurieren
- Webinterface der OPNSense öffnen
- Interfaces > [WAN]
- IPv4 address: 192.168.20.254
- Block private networks
- Block bogon networks
- IPv4 address: 192.168.20.254
- IPv4 gateway rules: WAN_GW - 192.168.20.1
Zur Erklärung: Da die FRITZ!Box an ihrem LAN-Port ja aus einem privaten Adressbereich (RFC 1918) heraus mit uns redet (192.168.22.0/24) dürfen wir private Netzwerke nicht blockieren. Deswegen müssen die Häkchen bei “Block private networks” und “Block bogon networks” raus.
VLANs anlegen
- Webinterface der OPNSense öffnen
- Interfaces > Devices > VLAN > +
- Device: Name des Device, z.B. vlan22
- Parent: Das Management-Interface (LAN_MGMT)
- VLAN tag: 22
- VLAN priority: Best Effort (0, default)
- Description: VLAN22 - Intern
Interfaces > Assignments > Assign a new interface >
- Device auswählen und Beschreibung eingeben
- Auf “Add” klicken
Interfaces > [VLAN22_Intern]
- Enable Interface
- Prevent interface removal
- IPv4 Configuration Type: Static IPv4
- IPv6 Configuration Type: Track Interface (Legacy)
- IPv4 adress: 192.168.22.1/24
- IPv4 gateway rules: Disabled
- Parent interface: WAN
- Assign prefix ID: 2
- Optional interface ID: <Leer>
- Allow manual adjustment of DHCPv6 and router Advertisements
Interfaces > [VLAN23_Gast]
- Enable Interface
- Prevent interface removal
- IPv4 Configuration Type: Static IPv4
- IPv6 Configuration Type: Track Interface (Legacy)
- IPv4 adress: 192.168.23.1/24
- IPv4 gateway rules: Disabled
- Parent interface: WAN
- Assign prefix ID: 3
- Optional interface ID: <Leer>
- Allow manual adjustment of DHCPv6 and router Advertisements
Interfaces > [VLAN24_DMZ]
- Enable Interface
- Prevent interface removal
- IPv4 Configuration Type: Static IPv4
- IPv6 Configuration Type: None
- IPv4 adress: 192.168.24.1/24
- IPv4 gateway rules: Disabled
**Prefix ID**
Die Prefix ID bestimmt die Unterteilung der IPv6-Subnetze. Aus der Prefix ID 2 wird z.B. das Netzwerk
fdb8:003d:eb48:2::1/64, aus der Prefix ID 3 wird fdb8:003d:eb48:3::1/64.
IPv6 am WAN-Interface konfigurieren
- Interfaces > [WAN]
- Enable Interface
- Prevent interface removal
- Block private networks
- Block bogon networks
- IPv4 Configuration Type: Static IPv4
- IPv6 Configuration Type: DHCPv6
- IPv4 address: 192.168.20.254/24
- IPv4 gateway rules: WAN_GW - 192.168.20.1
- Prefix delegation size: 60 (Ja, wirklich 60 - nicht 64!)
- Request prefix only
- Send prefix hint
- Optional prefix ID: <Leer>
- Optional interface ID: <Leer>
Firewall-Regel für WAN anlegen
Hier ist es wichtig, die ICMPv6-Pakete von der FRITZ!Box durch zu lassen, da darüber z.B. die Router Advertisements (RA) von der Fritz!Box empfangen werden können. Darin steckt z.B. die Info über den IPv6-Gateway.
Firewall > Rules [new] > Mit + eine neue Regel anlegen
- Enabled
- Description: Erlaube eingehendes ICMPv6 für Router Advertisements (RA)
- Invert Interface
- Interface: WAN
- Quick
- Action: Pass
- Direction: In
- Version: IPv6
- Protocol: IPv6-ICMP
- ICMPv6 type: Any
- Invert Source
- Source: WAN net
- Source Port: any
- Invert Destination
- Destination: any
- Invert Destination
- Destination: any
- Destination Port: any
- Log
- Gateway: None
ULA Subnet generieren
Nun müssen wir uns ein ULA-Subnet generieren. Ich habe dafür die Webseite https://unique-local-ipv6.com verwendet. Da dieses Subnetz nicht im Internet geroutet wird, haben wir freie Auswahl bei diesem Subnetz.
In meinem Beispiel ist es über den Generator dieses Subnet geworden: fdb8:003d:eb48::/48
Daraus werden dann diese Subnets, die wir für unsere VLANs verwenden:
- LAN (VLAN22): fdb8:003d:eb48:2::1/64
- Gast (VLAN23): fdb8:003d:eb48:3::1/64
Du kannst hier natürlich auch mit fdb8:003d:eb48:1::1/64 anfangen.
Ich fange hier wieder mit der 2 an, damit es zu meinem VLAN22 dazu passt. Macht es für mich einfach weniger verwirrend.
Virtual IPs anlegen
Nun legen wir für beiden Netzbereiche virtuelle IP-Adressen an, d.h. du führst diesen Schritt zweimal aus (für VLAN22_Intern und VLAN23_Gast). Für jedes VLAN benötigen wir eine entspr. virtuelle IP.
-
Interfaces > Virtual IPs > Settings > Auf das Plus-Symbol (+) klicken
- Mode: IP Alias
- Interface: [INTERFACE_NAME]
- Network / Address: fdb8:003d:eb48:2::1/64, bzw. fdb8:003d:eb48:3::1/64
Wenn du alles fertig hast, solltest du zwei Einträge sehen:

Router Advertisements konfigurieren
Die Router Advertisements sorgen dafür, dass bestimmte Optionen für die IPv6-Clients bekannt gemacht werden können, diese werden vom Router regelmäßig ins Netzwerk “gebrüllt”. Darüber können wir dann später auch unseren DNS-Server bekannt machen.
- Services > Router Advertisements
- Auf das “+"-Symbol klicken
- Enabled
- Interface: LAN_MGMT
- Mode: Assisted
- Minimum interval: 200 (Standard)
- Maximum interval: 600 (Standard)
- Recursive DNS Servers (RRDNS): <Leer>
- DNS Search List (DNSSL): <Leer>
Das Gleiche führst du jetzt noch für VLAN22_Intern und VLAN23_Gast durch.
Adressen und routen prüfen
- Webinterface der OPNSense öffnen
- Interfaces > Overview
Hier siehst du nun alle Interfaces und ihre Adressen. Alle Interfaces die du angelegt hast, sowie das WAN-Interface sollten nun jeweils eine IPv4-Adresse haben, sowie mehrere IPv6-Adressen.

| Adresse | Beschreibung |
|---|---|
| 2003:de:… | Die global gültige IPv4-Adresse |
| fe80::… | Die link-lokale Adresse, nur gültig im eigenen Subnet (VLAN) |
| fdb8:3d:eb48:… | Die ULA (unique local address), die nur im internen Netzwerk, aber über Subnetze hinweg Gültigkeit hat |
Wichtig ist auch, dass beim WAN-Interface unbedingt ein IPv6-Gateway aus dem fe80::-Bereich angezeigt wird, denn das ist die IPv6-Route deiner Clients raus ins Internet, bzw. in andere Subnetze.
Tests durchführen
- Webinterface der OPNSense öffnen
- Interfaces > Diagnostics > Ping: Hier kannst du einen IPv6-Host von der OPNSense aus anpingen.
ODER:
- Per SSH auf die OPNsense zugreifen und einen Ping auf einen beliebigen IPv6-Host (per DNS-Name) absetzen.
Troubleshooting
Routen anzeigen:
netstat -nr
tcpdump auf WAN-Interface:
tcpdump -i ue0 -Q in ip6 -nN
Netzwerk-Switch konfigurieren
Nun müssen wir den Switch konfigurieren, an den unsere Clients angeschlossen werden sollen. Das funktioniert natürlich bei jedem Hesteller etwas anders.
Die TP-Link Switches bieten im Webinterface zwei Optionen für 802.1Q an:
-
VLAN -> 802.1Q VLAN: Wenn ein VLAN konfiguriert wird, muss der Uplink-Port (bei uns die 1) dort immer als Tagged hinterlegt sein. Bei dem Port an dem dann die Clients angeschlossen werden und das entspr. VLAN erhalten sollen, muss dieser auf das entspr. VLAN mit “Untagged” gestellt sein.
-
VLAN -> 802.1Q PVID Setting: Steht für Port VLAN ID und gibt an, welches VLAN an dem Port anliegen soll, wenn dort ein Paket ohne VLAN-Tag ankommt. Bei dem Port bei dem ein VLAN angelegt sein soll, muss also die entspr. PVID hinterlegt werden.
Nun geht’s also an die Konfiguration:
- Webinterface öffnen
- VLAN > 802.1Q VLAN
| Port | VLAN 22 | VLAN 23 | VLAN 24 | Kommentar |
|---|---|---|---|---|
| 1 | Tagged | Tagged | Tagged | Trunk Port: Es sollen alle VLANS kommunizieren können |
| 2 | Untagged | Not Member | Not Member | Direkt angeschlossener Client soll in VLAN 22, deswegen untagged |
| 3 | Untagged | Not Member | Not Member | Direkt angeschlossener Client soll in VLAN 22, deswegen untagged |
| 4 | Untagged | Not Member | Not Member | Direkt angeschlossener Client soll in VLAN 22, deswegen untagged |
| 5 | Not Member | Not Member | Not Member | |
| 6 | Not Member | Not Member | Not Member | |
| 7 | Not Member | Not Member | Not Member | |
| 8 | Not Member | Untagged | Not Member | Direkt angeschlossener Client soll in VLAN 23, deswegen untagged |
| 9 | Not Member | Not Member | Not Member | |
| 10 | Not Member | Not Member | Untagged | Direkt angeschlossener Webserver soll in VLAN 24, deswegen untagged |
| 11 | Not Member | Not Member | Not Member | |
| 12 | Not Member | Not Member | Not Member | |
| 13 | Not Member | Not Member | Not Member | |
| 14 | Not Member | Not Member | Not Member | |
| 15 | Not Member | Not Member | Not Member | |
| 16 | Tagged | Tagged | Not Member | Uplink zum Access Point, dieser soll VLAN 22 + 23 bereitstellen |
- VLAN > 802.1Q PVID Setting
| Port | PVID |
|---|---|
| 1 | 1 |
| 2 | 22 |
| 3 | 22 |
| 4 | 22 |
| 5 | 22 |
| 6 | 22 |
| 7 | 1 |
| 8 | 23 |
| 9 | 1 |
| 10 | 24 |
| 11 | 22 |
| 12 | 22 |
| 13 | 22 |
| 14 | 22 |
| 15 | 12 |
| 16 | 1 |