m-net DS-Lite Anschluss mit pfSense
This post is in German as it describes the configuration of pfSense for a German ISP — the details are probably only interesting if you live in Germany.
Ich habe zu Hause jetzt auf einen m-net “Glasfaseranschluss” gewechselt. Technisch handelt es sich dabei um einen “fiber-to-the-buiding” Anschluss, bei dem im Keller ein (vermutlich) 10GBit Glasfaserkabel auf (in meinem Fall) bis zu 16 Teilnehmer aufgeteilt wird; die Kommunikation zwischen dem Kasten im Keller (APL/IAD) und einem Gerät in meiner Wohnung (m-net liefert eine fritzBox mit) passiert durch eine DSL-Technik, in meinem Fall mit G.fast.
Ich will keine fritzBox als Netzzentrale verwenden, da ich die 100%ige Kontrolle haben möchte und die fritzBox denkt einfach zu sehr mit. Daher wollte ich weiterhin eine pfSense als Router/Firewall verwenden. Die Hauptschwierigkeit dabei ist, das man von m-net nur noch einen IPv6-Anschluss bekommt und jede IPv4-Verbindung darüber tunneln muss.
Ich möchte hier zusammenfassen, wie ich das alles zum Laufen brachte:
- Statt der fritzBox ein “dummes” Modem verwenden
- Die pfSense konfigurieren per PPPoE eine Internetverbindung aufzubauen
- Die pfSense konfigurieren über diese Verbindung dann IPv4-Pakete zu tunneln
Klingt zunächst mal alles ganz einfach, aber der Reihe nach.
Das Modem
Ich kannte aus anderen Projekten die Produkte der Firma DrayTek und in der Tat gibt es ein G.fast-kompatibles Modell, den Vigor166. Das Gerät wird als Modem konfiguriert ausgeliefert, versucht also nicht sich ins Internet einzuwählen.
Die einzige Einstellung, die ich vornehmen musste ist die VLAN-id, die m-net in meinen Anschlusseinstellungen als 40 angibt:
Update 2022-02-20: Von einem Leser habe ich erfahren, dass die Verbindung auch mit einem “EchoLife HG8012H” funktioniert: Hier kann man VLAN nicht im Gerät einstellen, sondern muss den Switch oder die PfSense konfigurieren, so dass PPPoE über VLAN 40 läuft.
IPv6 per PPPoE
Auch das war im Prinzip einfach; m-net zeigt wie vorgeschrieben die Zugangsdaten im Kundenportal an:
Im m-net-Forum (das man erst nach Anmeldung und Freischaltung lesen kann) gibt es sogar Konfigurationsvorschläge; konkret bedeutet das, dass man in der pfSense die IPv4-Konfiguration auf “PPPoE” und die IPv6-Konfiguration auf “DHCPv6” stellt:
Die PPPoE-Konfiguration ist einfach, hier müssen die Daten von der m-net-Seite eingegeben werden:
Für DHCPv6 ist es wichtig einzustellen, dass a) die Abfrage durch die IPv4 Verbindung geschieht, b) dass ein Prefix von 56 bit verlangt werden soll und c) dieser Prefix auch in der Abfrage wirklich verlangt wird:
Damit dann Geräte im LAN diese IPv6-Verbindung auch wirklich nutzen können, muss man auf dem LAN-Interface noch einstellen, dass es sich seine IPv6-Adresse vom WAN-Interface holen soll:
Wenn man dann noch IPv6 DNS-Server für den pfSense DNS-Forwarder einträgt, hat man schon halbes Internet (die modernere Hälfte) — vorausgesetzt die firewall-Regeln lassen auch IPv6-Traffic zu.
AFTR/DS-Lite/IPv4 over IPv6
Das hat mir mehr Kopfzerbrechen bereitet. Es gibt einen Forumspost von 2016 im m-net-Forum in dem jemand beschreibt, wie man die Einstellungen auf der Konsole der pfSense durchführen kann. Inzwischen hat die pfSense auch die nötigen Features um es per Konfigurationoberfläche einzurichten.
Man legt also ein “GIF”-Interface mit folgenden Einstellungen an:
Gotchas dabei:
- Die “Remote Address” ist die DNS-Auflösung von
aftr.prod.m-online.net
(siehe Zugangsdaten oben) — trägt man hier einen DNS-Namen ein, kommt die Fehlermeldung:
die mich in dem Moment noch nicht direkt an “IP statt Name” denken ließ… - Die IP-Adressen
192.0.0.2
und192.0.0.1
sind einfach so — das liest man auch überall im Internet, wenn man nach AFTR sucht. Die Maske/29
taucht in dem RFC auch auf. - Das lokale Interface muss eines sein, dass eine öffentliche IPv6-Adresse hat. Das WAN-Interface hat aber nur eine link-local! Deswegen musste ich hier das LAN-Interface angeben. Das hat mir am meisten Zeit gekostet (abgesehen vom Warten auf die Freischaltung im Forum), da ich gesehen habe, dass Pakete zum AFTR-Gateway gesendet werden (meine Einstellungen also offensichtlich korrekt sind), aber keine Pakete zurück kamen…
Dann konnte ich das Gateway der Verbindung (192.0.0.1
) als default-Gateway eintragen und hatte sofort V4-Internet (Update 2021-11-30: siehe ganz unten für einen Hinweis!).
Ich musste auch kein NAT konfigurieren, da der Traffic sowieso in ein CG-NAT läuft.
Ich hoffe, dass jemand diesen Post findet, bevor so viel Zeit verschwendet ist, wie ich es tun musste :-D
Update 2021-11-30: Danke an Marc für den folgenden Hinweis: Wichtig ist, dass man nicht nur das GRE gif0
erstellt, sondern dem auch noch über “Interface Assignments” ein Interface zur konfiguration zuweist; erst dann taucht das gateway unter “System->Routing” auf und kann als default gateway eingestellt werden.
Update 2023-01-11: Danke an Sebastian für den folgenden Hinweis: Er musste bei einem Anschluss der Deutsche Giganetz auch noch die MSS des GIF-Interfaces auf 1492 setzen, um Probleme mit Fragmentierung zu vermeiden.