Einleitung

In diesem Artikel erkläre ich, wie man Ad-Guard home als Docker Container auf Unraid betreibt, das hinter einer OPNsense steht und per IPv6 eine feste IP-Adresse erhalten soll. IPv4 wurde bereits konfiguriert, hier geht es nur um den IPv4-Teil. Wir wollen also einen funktionierenden Dual-Stack Betrieb.

Was ist das Ziel?

Wir möchten unseren Clients per DHCPv6 einen festen DNS-Server zuweisen, um die Ad-Block Möglichkeit nicht nur per IPv4, sondern auch per IPv6 nutzen zu können.

Der Ad-Guard Container bekommt dabei eine ULA (Unique Local Address) zugewiesen, die auch über mehrere Subnetze (VLANs) erreichbar ist.

Zielgruppe dieses Artikels

Dieser Artikel ist an alle gerichtet, die ihre OPNSense mit IPv4 bereits fertig konfiguriert haben und in der Konfiguration mit VLANs vertraut sind. Ebenso solltet ihr euch mit Unraid auskennen, was die dortige Konfiguration der Netzwerke angeht.

Die Umgebung

In diesem Szenario haben wir einen Dual-Stack Internet-Anschluss von der Telekom. Vom Provider erhalten wir ein delegiertes IPv6-Subnet, das wir an unsere OPNsense weitergeben, und dahinter an die entspr. VLANs. IPv4 wurde in diesem Beispiel bereits fertig konfiguriert. Ich werde hier also nicht erklären, wie ihr die OPNsense generell hinter der FRITZ!Box einrichten müsst.

Wir werden ULA (Unique Local Addresses) aus dem Adressbereich fc00::/7 an unserer OPNSense konfigurieren, um dem Ad-Guard Container eine feste IP zuweisen zu können. Das öffentliche Subnetz das wir von unserem ISP erhalten, ändert sich regelmäßig. Deswegen ist es nicht geeignet, dem Ad-Guard eine feste IP-Adresse zuzuweisen.

Warum ULA?

Wie bereits erwähnt ändert sich das zugewiesene öffentliche IPv6-Präfix regelmäßig, weswegen dieser Adressbereich leider nicht in Frage kommt für unseren Ad-Guard. Schließlich sollen unsere Clients den Container immer unter derselben IP erreichen können.

Wenn wir IPv6 nutzen, haben wir 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.

Bedeutet also auch: Wer nur ein Subnetz verwendet, kann alternativ auch eine Link-Lokale Adresse für den Ad-Guard verwenden.

Netzbereiche / VLANs

Wir verwenden in diesem Beispiel folgende Netzbereiche, bzw. VLANs:

  • FRITZ!Box: Subnetz 192.168.20.0/24
  • OPNSense:
    • Management Subnetz: 192.168.21.0/24
    • VLAN 22 für interne Geräte: Subnetz 192.168.22.0/24
    • VLAN 23 für Gäste: Subnetz 192.168.23.0/24

Eingesetzte Hard- und Software-Versionen

  • FRITZ!Box 7590 mit FRITZ!OS 8.21 (Webinterface auf Deutsch)
  • OPNsense 25.7.7_4 (Webinterface auf Englisch)
  • Unraid 7.20 (Webinterface auf Englisch)

Zur FRITZ!Box findet man die meisten Anleitungen auf Deutsch, da diese im deutschsprachigen Raum einfach sehr verbreitet ist. Deshalb ist das Webinterface meiner FRITZ!Box auf Deutsch eingestellt.

Hinweis: Damit Unraid dem Ad-Guard Container eine Adresse aus dem ULA-Bereich zuweisen kann, wird mindestens Unraid 7.20 benötigt. Siehe Release Notes.

Schaubild

Das Bild habe ich mit mermaid erstellt, so ganz zufrieden bin ich damit noch nicht ;-)

    architecture-beta
    group group_server(server)[Unraid Server]
    group group_vlan22(server)[VLAN22_Intern]
    group group_vlan23(server)[VLAN23_Gast]

    service wan(internet)[ISP Deutsche Telekom]
    service fritzbox(internet)[FRITZBox 7590]
    service opnsense(internet)[OPNSense]
    service unraid(server)[Unraid] in group_server
    service dhcp(server)[DHCP] in group_server
    service adguard(logos:docker-icon)[AdGuard VLAN22] in group_server
    service client1(logos:linux-tux)[Client 1] in group_vlan22
    service client2(logos:linux-tux)[Client 2] in group_vlan23

    wan:R --> L:fritzbox
    fritzbox:R --> L:opnsense
    opnsense:R --> L:unraid
    unraid:B --> T:adguard
    unraid:R --> L:dhcp
    dhcp:T --> B:client1
    client1:L --> R:adguard
    dhcp:B --> T:client2
    client2:L --> R:adguard

Konfiguration der FRITZ!Box

Im ersten Schritt stellen wir sicher, dass IPv6 an der FRITZ!Box korrekt konfiguriert ist.

  • Öffne das Webinterface der FRITZ!Box
  • Heimnetz > Netzwerk > Netzwerkeinstellungen > Erweiterte Netzwerkeinstellungen ändern > IPv6

Passe die Einstellungen entspr. an:

(Ohne Sektion):

  • Router Advertisement im LAN aktiv
    • Unique Local Addresses (ULA) immer zuweisen
    • Auch IPv6-Präfixe zulassen, die andere IPv6-Router im Heimnetz bekanntgeben
    • Diese FRITZ!Box stellt den Standard-Internetzugang zur Verfügung

Sektion “DNSv6-Server im Heimnetz”:

  • DNSv6-Server auch über Router Advertisement bekanntgeben (RFC 5006)

Sektion “DHCPv6-Server im Heimnetz”:

  • DHCPv6-Server in der FRITZ!Box für das Heimnetz aktivieren
    • DNS-Server und IPv6-Präfix (IA_PD) zuweisen

Navigiere jetzt nochmal zu: Heimnetz > Netzwerk > Netzwerkeinstellungen > Erweiterte Netzwerkeinstellungen ändern > IPv6

Scrolle auf der Seite ganz nach unten, hier solltest du die Überschrift “Verwendete IPv6 Präfixe” sehen können.

Ganz unten sind drei Subnetze zu sehen:

  • Heimnetz: 2003:de:…/64
  • Delegiert: 2003:de:…/60
  • WAN: 2003:de:…/64

Das Netzerk das uns delegierte wurde, benötigen wir dann nachher.

Bei mir hat es etwas gedauert, bis der "Delegiert"-Teil aufgetaucht ist. Sollte er auch nach einigen
Minuten noch nicht erscheinen, hat es bei mir geholfen die OPNsense einmal neu zu starten.

Konfiguration der OPNsense

IPv6 auf dem WAN Interface aktivieren

Das Interface kann bei dir ggf. anders heißen, es ist das WAN-Interface gemeint welches mit deiner FRITZ!Box verbunden ist.

  • Interfaces > [WAN]
    • IPv6 Configuration Type: DHCPv6
    • Prefix delegation size: 60
    • Request prefix only
    • Send prefix hint

Weitere Interfaces konfigurieren

Diesen Schritt führst du bei beiden Interfaces durch: VLAN22_Intern, VLAN23_Gast.

  • Interfaces > [INTERFACE_NAME]
    • IPv6 Configuration Type: Track Interface
    • Parent interface: WAN
    • Assign prefix ID: 2
    • Manual configuration: Allow manual adjustment of DHCPv6 and Router Advertisements
Bei der Prefix-ID fange ich bei 2 an zu zählen, da dies zu meinem 22er VLAN passt. Ihr könnt hier natürlich
auch mit 1 anfangen und dann hochzählen.

Router Advertisements (RA) konfigurieren

Diesen Schritt führst du bei beiden Interfaces durch: VLAN22_Intern, VLAN23_Gast.

  • Services > Router Advertisements > [INTERFACE_NAME]
    • Router Advertisements: Assisted
    • Router Priority: Normal
    • Source Address: Automatic
    • Advertise Default Gateway
    • Advertise Routes: Nichts eintragen
    • DNS options
      • Use the DNS configuration of the DHCPv6 server
      • Do not send any DNS configuration to clients

Firewall-Regel für WAN anlegen

Hier ist es jetzt wichtig, die ICMPv6-Pakete 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 > [DEIN_WAN_INTERFACE] > Neue Regel anlegen
    • Interface: [DEIN_WAN_INTERFACE]
    • Direction: in
    • TCP/IP Version: IPv6
    • Protocol: IPV6-ICCMP
    • ICMP6 Type: any
    • Source: [DEIN WAN Netzwerk, z.B. WAN net]
    • Destination: any
    • Description: Erlaube eingehendes ICMPv6 für Router Advertisements (RA)

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.

In meinem Beispiel ist es über den Generator dieses Subnet geworden: fdb8:003d:eb48::/48

Daraus werden 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 (+)

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

OPNSense - Virtual IPs

Router Advertisements konfigurieren

Router Advertisements aktivieren auf den beiden VLAN-Interfaces:

  • Services –> Router Advertisements –> [INTERFACE_NAME] –>
    • Router Advertisements: Assisted
    • Router Priority: Normal
    • Source Address: Automatic
    • Advertise Default Gateway
    • Advertise Routes: Nichts eintragen
    • DNS options:
      • Use the DNS configuration of the DHCPv6 server
      • Do not send any DNS configuration to clients
    • Minimum Interval: 200 (Standard)
    • Maximum Interval: 600 (Standard)

DHCPv6 konfigurieren

Das muss wieder an allen Interfaces eingerichtet werden, die IPv6 nutzen sollen. Außer der WAN-Schnittstelle, bei der bitte nicht.

  • Services > ISC DHCPv6 > [DEIN_INTERFACE]
    • Enable DHCPv6 server on VLAN22_Intern interface
    • Range: From: ::1:00 to: ::1:ffff
    • DNS servers: fdb8:3d:eb48:1:ffff::10

Das ist die Konfiguration am Beispiel des Interface VLAN22_Intern:

OPNSense DHCPv6

Firewall-Regel konfigurieren

Damit Clients aus dem Gast-VLAN (23) auch auf den AdGuard Container im VLAN22 zugreifen können, müssen wir noch eine entspr. Firewall-Regel erstellen.

In diesem Fall erstelle ich eine Regel, die sowohl IPv4 als auch IPv6 erlaubt.

Firewall > Rules > VLAN23_Gast > Add

  • Action: Pass
  • Interface: VLAN23_Gast
  • Direction: in
  • TCP/IP Version: IPv4+IPv6
  • Protocol: TCP/UDP
  • Source: VLAN23_Gast net
  • Destination: <IP-Adresse(n) des ADGuard Containers>
  • Destination Port Range: from DNS to DNS
  • Description: Erlaube Zugriff auf AdGuard

Konfiguration von Unraid

VM Manager und Docker-Dienst stoppen

Damit Änderungen am Netzwerk gemacht werden können, müssen zuerst der VM Manager und der Docker-Dienst gestoppt werden:

  • Settings > VM Manager > Enable VMs: No > APPLY
  • Settings > Docker > Enable Docker: No > APPLY

IPv6 aktivieren

Damit sich der Unraid-Server entspr. IP-Adressen per IPv6 besorgt, müssen wir es entspr aktivieren

  • Settings > Network Settings > Interface eth0
  • Network protocol: IPv4 + IPv6
  • IPv6 address assignment: Automatic
  • IPv6 privacy extensions: Disabled

Wenn man anschließend auf den INFO-Button klickt, sieht man die zugewiesenen IP-Adressen. Hier sollte jetzt unser öffentliches Subnet 2003… und unser ULA-Subnet fdb8… auftauchen.

Docker-Dienst konfigurieren

  • Settings > Docker > “Advanced View” aktivieren

    • IPv6 custom network on interface br0 (optional)
  • Enable Docker: Yes > Auf APPLY klicken

So sehen die Netzwerke in meiner Konstellation aus:

Docker - Netzwerkübersicht

Hinweis: Das Interface br0.24 benutze ich für meine DMZ, spielt aber für diese Anleitung keine Rolle.

VM Manager und Docker-Dienst starten

Anschließend können der VM Manager und der Docker-Dienst wieder gestartet werden:

  • Settings > VM Manager > Enable VMs: Yes > Auf APPLY klicken
  • Settings > Docker > Enable Docker: Yes > Auf APPLY klicken

ADGuard Container konfigurieren

Nun vergeben wir dem AdGuard Container eine feste IP-Adresse aus dem ULA-Bereich, den wir uns vorhin rausgesucht haben. Die IPv4-Adresse bleibt erhalten und wir fügen ihm nun eine zusätzliche IP hinzu.

  • Docker > Auf den AdGuard-Home Container klicken > edit
  • Fixed IP address (optional): <IPv4-Adresse>, fdb8:3d:eb48:2:ffff::10

Unter dieser IPv6-Adresse wird der AdGuard-Container dann also erreichbar sein. Damit die Clients das auch mitbekommen, müssen wir diese Adresse jetzt noch in der OPNsense im DHCPv6 eintragen.

IP-Adresse vom AdGguard prüfen:

Nun prüfen wir, ob der AdGuard Container wirklich auch die entspr. IP-Adresse erhalten hat.

  • AdGuard Webinterface öffnen > Einrichtungsassistent

Hier sollte man nun neben vielen anderen Adressen auch unsere konfigurierte ULA sehen: fdb8:3d:eb48:1:ffff::10

Verbindung prüfen

Jetzt kannst du dich mit einem beliebigen Client im entspr. VLAN einwählen und prüfen, welche IP-Adressen du erhalten hast. Im VLAN22 (Intern) sollten z.B. folgende Adressen vorhanden

  • 2003:de:… (mind. eine, ggf. auch mehrere): Das ist die global gültige Adresse
  • fdb8:3d:eb48:2:…: Das ist die ULA (Unique local address)
  • fe80:…: Das ist die nicht routbare link-lokale Adresse

Prüfe die DNS-Auflösung auf eine beliebige externe Adresse, z.B. unter Linux:

host heise.de

Die Anfrage sollte nun im AdGuard erscheinen. Die kannst du einsehen, wenn du dich an der Webseite anmeldest und auf das “Abfrageprotokoll” klickst.