pfSense/OPNsense: Statisches IPv6 Routing hinter Fritz!Box

Achtung! Dieser Artikel ist älter als ein Jahr. Der Inhalt ist möglicherweise nicht mehr aktuell!

Mein ISP stellt mir nun glücklicherweise eine statisches IPv6 Prefix zur Vergügung. Wie ich dieses nun hinter meine OPNSense bekommen habe schreibe ich hier zusammen.
Dies ist ein Follop-Up zu meinem Artikel pfSense/OPNsense: IPv6 Delegation hinter Fritz!Box - 2019 Version.

Netzstruktur

Das Netz sieht wie folgt aus:

[Fritz!Box 7590]  <--L2-->  [OPNSense/WAN] --> L2: DMZ
										   --> L2: LAN
										   --> L2: GUEST

Die Fritz!Box bekommt vom ISP das Prefix 2001:0DB8:37f:b000::/56. Dieses Prefix soll hinter der OPNSense erreichbar sein. Die Fritz!Box und das OPNSense WAN Interface sind im gleichen Layer 2 Netz. Die dahinterliegenden Layer 2 Netze sollen aus dem zugeteilten Adressspace jeweils /64er Netze erhalten.

Nun könnte man das via DHCPv6 machen, dann ist es so semi-statisch. In diesem Artikel also nur das knallharte statische Routing.

Folgender Netzaufbau ist geplant:

Zugeteiltes Netz: 2001:0DB8:37f:b000::/56

Sipcalc sagt dazu:
	:-$ sipcalc 2001:0DB8:37f:b000::/56
	-[ipv6 : 2001:0DB8:37f:b000::/56] - 0

	[IPV6 INFO]
	Expanded Address	- 2001:0db8:037f:b000:0000:0000:0000:0000
	Compressed address	- 2001:db8:37f:b000::
	Subnet prefix (masked)	- 2001:db8:37f:b000:0:0:0:0/56
	Address ID (masked)	- 0:0:0:0:0:0:0:0/56
	Prefix address		- ffff:ffff:ffff:ff00:0:0:0:0
	Prefix length		- 56
	Address type		- Aggregatable Global Unicast Addresses
	Network range		- 2001:0db8:037f:b000:0000:0000:0000:0000 -
				  2001:0db8:037f:b0ff:ffff:ffff:ffff:ffff

Folgende Netze sollen rausgelöst werden:

WAN:   2001:0db8:037f:b000::/64
   GW: 2001:0db8:037f:b000:5054:ff:fe22:c14e

LAN:   2001:0db8:037f:b002::/64
   GW: 2001:0db8:037f:b002:5054:FF:FE4B:DB65

GUEST: 2001:0db8:037f:b003::/64
   GW: 2001:0db8:037f:b003:5054:FF:FEFA:32FF

Der aufmerksame Leser hat es vielleicht bemerkt: Es gibt kein 2001:0db8:037f:b001::/64! Und genau das Problem hat mich knappe zwei Stunden gekostet!
AVM nimmt das zugeteilte Prefix und schneidet zwei Netze raus: Ein Netz für LAN und ein Netz für den Gastzugang. Die OPNSense hängt an LAN1 der Fritz!Box. Aber es gibt keinen Gastzugang auf der Fritz!Box. Trotzdem wird ein ganzes /64 reserviert. Und kann auch so nicht geroutet werden, aber dazu später mehr.

Immer merken: Das zweite /64 kann nicht geroutet werden!

Die GW Adresse ist dabei die Interface IP an der OPNSense.

Konfiguration der OPNSense

IPv6 Gateway anlegen

Wer DHCPv6 nutzt hat hier eine Erleichterung: Es wird ein IPv6 Gateway benötigt. Analog zum IPv4 Gateway. Dieses konfiguriert man unter System -> Gateways -> Single.

Den Namen kann man frei eintragen.
Interface wird auf WAN gestellt.
Adress Family ist logischerweise IPv6.
Der Haken bei Default Gateway muss gesetzt werden.
Als IP Adresse wird die Link-Local Adresse der Fritz!Box eingetragen. Ehrlich gesagt habe ich diese nirgendwo direkt in der Fritz!Box gefunden. Ich hab meine aus einem Netwerktrace.

Man kann sie wie folgt rausfinden:

Meine ist zum Beispiel 44:4e:6d:26:0d:c6. Diese kann man nun in dieses Tool werfen um die Link-Local Adresse herauszufinden. Bei mir resultiert das in fe80::464e:6dff:fe26:dc6.

Warum nun die Link-Local Adresse? Bei IPv6 geht der Traffic im selben Layer 2 Netz immer über die Link-Local Adresse. Zwischen OPNSense WAN und Fritz!Box LAN ist eine Layer 2 Verbindung vorhanden.

Interface Configs

Als erstes konfiguriert man die Interfaces. Dabei stellt man in der Interface Config IPv6 Configuration Type auf Static IPv6.
Als IP Adresse wird die jeweilige oben ausgesuchte Adresse eingetragen und als Netzmaske 64 ausgewählt.
Wenn man das WAN Interface konfiguriert, dann wird als IPv6 Upstream Gateway das oben angelegte Gateway ausgewählt. Bei allen anderen Interfaces lässt man das Feld Auto-detect drinnen.

Firewall Regeln

Jetzt ist es an der Zeit eine WAN Firewall Rule anzulegen, die ICMPv6 auf die WAN Adresse erlaubt. Diese wird später zum Testen benötigt.

Konfiguration der Fritz!Box

DHCPv6 und ULA deaktivieren

Wir wollen kein DHCPv6 und kein ULA. Deshalb wird das unter Heimnetz -> Netzwerk -> Abschnitt IP-Adressen -> IPv6-Adressen deaktiviert:

Abschnitt Unique Local Adresses: Option Keine Unique Local Addresses (ULA) zuweisen auswählen
Abschnitt Weitere IPv6-Router im Heimnetz: Ich würde den Haken bei Auch IPv6-Präfixe zulassen, die andere IPv6-Router im Heimnetz bekanntgeben setzen und bei Diese FRITZ!Box stellt den Standard-Internetzugang zur Verfügung entfernen.
Abschnitt DNSv6-Server im Heimnetz: Den Haken bei DNSv6-Server auch über Router Advertisement bekanntgeben (RFC 5006) entfernen.

Abschnitt DHCPv6-Server im Heimnetz: Die Option DHCPv6-Server in der FRITZ!Box deaktivieren auswählen und die letze Suboption (Das M- und das O-Flag in den Router Advertisement-Nachrichten der FRITZ!Box aktivieren (SLAAC nicht möglich)) auswählen.

Das ganze nicht vergessen zu speichern!

Statische Routen anlegen

Damit die Fritz!Box bei ankommenden Paketen aus den obigen Subnetzen das Routing an die OPNSense durchführen kann brauchen wir statische Routen. Diese konfiguriert man unter Heimnetz -> Netzwerk -> Abschnitt Statische Routingtabelle -> IPv6-Routen.

Als allererstes braucht man die Route zum WAN Interface der OPNSense. Wir erinnern uns: Layer 2 im IPv6 ist immer über die Link-Local Adresse. Die Link-Local Adresse des OPNSense WAN interfaces findet man unter Interfaces -> Overview -> WAN. In meinem Fall ist dass die fe80::5054:ff:fe22:c14e.

Die erste Route teilt der Fritz!Box mit, dass Pakete in das WAN /64er Netz über die Link-Local Adresse an die OPNSense geroutet wird:

IPv6-Netzwerk: 2001:0db8:037f:b000::
Prefixlänge: 64
Gateway: fe80::5054:ff:fe22:c14e

Nun müssen wir noch die anderen Netze zum WAN Interface der OPNSense routen. Bevor ihr weiter lest: Welche Adresse tragen wir nun als Gateway ein? Die “richtige” Gateway IP-Adresse des WAN Interfaces oder die Link-Local Adresse des WAN Interfaces?

Richtig! Die “richtige” Gateway IP-Adresse. Alle anderen Netze außer das WAN Netz müssen über den Layer 3 geroutet werden. Nur das WAN Netz liegt als Layer 2 an. Alle anderen Netze sind Layer 3 Netze.

Funfact: Auf der Hilfeseite zu diesem Abschnitt steht bei “Gateway”:

Das ist nicht ganz richtig. So sollte es dann aussehen:

Das wäre es auch schon gewesen. Pings an die WAN Adresse zum Beispiel sollten nun von einem externen Server möglich sein.

Troubleshooting:

Ping: From 2001:XX::f: icmp_seq=68 Destination unreachable: Administratively prohibited

Der Filter in der Fritz!Box ist noch an. Ggf. die OPNSense unter Internet -> Freigaben -> (Objekt der OPNSense bearbeiten) -> Dieses Gerät komplett für den Internetzugriff über IPv6 freigeben (Exposed Host). anhaken.

Ping: From 2001:XX::f: icmp_seq=10 Destination unreachable: Address unreachable

Drei mögliche Probleme:

Am besten in dieser Reihenfolge prüfen.

Gedanken: Statische Route vs. Router Advertisement

Im Artikel schreibe ich, dass ich den Haken bei Auch IPv6-Präfixe zulassen, die andere IPv6-Router im Heimnetz bekanntgeben setzen soll. Wenn ich das richtig lese, dann akzeptiert die Fritz!Box ebenfalls Prefixe, die andere Router im Netz announcen.
Ich habe das mal versucht und stattt statischer Routen via RA (Router only) auf dem WAN Interface die Netze an der Firewall bekannt zu geben. Leider hat das die Fritz!Box total ignoriert.

Hier ein tcpdump Auszug (mit geänderter IPv6):

00:00:13.029774 IP6 (hlim 255, next-header ICMPv6 (58) payload length: 112) _gateway > ff02::1: [icmp6 sum ok] ICMP6, router advertisement, length 112
   hop limit 64, Flags [none], pref high, router lifetime 0s, reachable time 0s, retrans time 0s
     prefix info option (3), length 32 (4): 2001:0db8:037f:b00b::/64, Flags [onlink, auto, router], valid time 7203s, pref. time 0s
       0x0000:  40e0 0000 1c23 0000 0000 0000 0000 2001
       0x0010:  16e0 037f b000 0000 0000 0000 0000
     route info option (24), length 24 (3):  2001:0db8:037f:b00b::/64, pref=medium, lifetime=0s
       0x0000:  4000 0000 0000 2001 16e0 037f b00b 0000
       0x0010:  0000 0000 0000
     dnssl option (31), length 24 (3):  lifetime 0s, domain(s): veloc1ty.lan.
       0x0000:  0000 0000 0000 0876 656c 6f63 3174 7903
       0x0010:  6c61 6e00 0000
     mtu option (5), length 8 (1):  1500
       0x0000:  0000 0000 05dc
     source link-address option (1), length 8 (1): 52:54:00:22:c1:4e
       0x0000:  5254 0022 c14e

Wenn das ein AVM Mitarbeiter liest: Ich hätte hierzu gerne mehr Informationen. Ich nehme an, dass das Prefix nicht im selben Netz liegen darf, dass die Fritz!Box “verwaltet”.

Router Advertisements kann man übrigens mit folgendem tcpdump Filter anschauen: tcpdump -vvvv -ttt -i brWAN icmp6 and 'ip6[40] = 134'. (Quelle)


Du hast einen Kommentar, einen Wunsch oder eine Verbesserung? Schreib mir doch eine E-Mail! Die Infos dazu stehen hier.

🖇️ = Link zu anderer Webseite
🔐 = Webseite nutzt HTTPS (verschlüsselter Transportweg)
Zurück