fli4l hinter FRITZ!Box mit IPv4/IPv6 Full Dual Stack

Im Ticket

Error rendering macro 'jira' : Unable to locate Jira server for this macro. It may be due to Application Link configuration.
wurde diese Konstellation als Feature angefragt und damit in Zusammenhang stehende Probleme bereits kommentiert. Die konkrete Konfiguration wird auf dieser Seite hier beschrieben.

Konzept

Die FRITZ!Box, ggf. vom ISP gestellt, enthält das Modem für den jeweiligen Anschluss (Kabel, VDSL) und macht VoIP-Telefonie. Client-Geräte (Laptops, Server, Smartphones usw.) werden nicht an die FRITZ!Box gehängt, das einzige Gerät hinter der FRITZ!Box ist der fli4l-Router. Das LAN beginnt hinter dem fli4l-Router. WLAN macht entweder der fli4l-Router selbst oder ein hinter dem fli4l-Router angeschlossener separater Access Point. Das WLAN der FRITZ!Box wird deaktiviert (Ggf. könnte man hier noch den Gast-Zugang der FRITZ!Box für Teilnehmer vorsehen, die nicht ins LAN sollen.)

Der ISP schaltet IPv4 mit einer öffentlichen Adresse und IPv6 mit einem öffentlichen Subnetz bestimmter Größe. In den vorgestellten Beispielen liefert 1&1 über das Netz der Telekom an VDSL ein /56 und Vodafone ein /62 am Kabelanschluss mit Businessvertrag.

Konfiguration

FRITZ!Box

Die Konfiguration wird am Beispiel eine FRITZ!Box 7412 von 1&1 gezeigt. Das ist die Minimal-Variante ohne WLAN, die man ohne Aufpreis zu einem VDSL-Anschluss dazu bekommt. Nach dem Einloggen findet man beispielsweise folgende Seite vor:

Leicht zu sehen sind die öffentliche IP-Adresse 79.197.155.30 aus dem Netz der Deutsche Telekom AG. Für IPv6 bekommt die Fritz!Box selbst die Adresse 2003:d8:3bf:c76:cece:1eff:fe02:7f22, das IPv6-Subnetz zum Delegieren an nachgelagerte Router wird hier nicht angezeigt, die FRITZ!Box zeigt dies aber beim Menüpunkt Internet unter Online-Monitor an. Hier habe ich derzeit das IPv6-Präfix 2003:d8:3cc:7c00::/56 bekommen, was 256 verschiedene /64 Netze ermöglichen würde. Nett. (Lächeln)

IPv4

Die Einrichtung für IPv4 kann zunächst so übernommen werden. Ggf. passt man die Adresse für das Subnetz an. Werkseitig benutzt die FRITZ!Box hier stets 192.168.178.0/24 – ich ändere hier immer das dritte Oktett auf einen von random.org gelieferten Wert.

Den fli4l richtet man als DHCP-Client ein und konfiguriert ihn in der FRITZ!Box als sogenannten Exposed Host. (Im folgenden Screenshot ist sandy der fli4l-Router.) Das bedeutet, dass in der FRITZ!Box keine einzelnen Portforwardings für einzelne von außen erreichbare Dienste konfiguriert werden müssen, sondern IPv4-Anfragen von außen alle direkt beim fli4l landen, dessen Paketfilter dann entsprechend eingerichtet werden muss. Für den fli4l sieht das in Bezug auf IPv4-Portforwardings dann so aus, als hinge er direkt am Internet.

IPv6

Die Einrichtung von IPv6 in der FRITZ!Box erfordert mehrere Schritte. Zunächst lässt man die FRITZ!Box überhaupt erstmal Prefixe deligieren. Dazu klickt man in den Netzwerkeinstellungen nicht auf "IPv4-Adressen" sondern rechts daneben auf den Button "IPv6-Adressen" (siehe Screenshot oben).

Hier ist nun der DHCPv6-Server für das Heimnetz zu aktivieren und die Option "DNS-Server, Präfix (IA_PD) und IPv6-Adresse (IA_NA) zuweisen" zu wählen. Der fli4l-Router wird diese Information dann bei DHCPv6-Client beziehen.

Was noch fehlt, ist eine Öffnung der Firewall der FRITZ!Box für delegierte Netze. Leider ist die Freigabe dafür erst seit FRITZ!OS 6.83 (Frage) möglich, dort sieht das dann so aus:

Man klickt auf die Freigabeoptionen des fli4l-Routers und wählt bei den IPv6-Einstellungen mindestens "Firewall für delegierte IPv6-Präfixe dieses Gerätes öffnen." Nur so wird es später möglich sein aus dem Internet von außen über IPv6 auf Rechner hinter dem fli4l-Router zuzugreifen. PING6 will man auch freigeben. ICMPv6 zu sperren ist eher hinderlich für sauber funktionierende IPv6-Verbindungen. Die Freigabe als Exposed Host ist jedoch für IPv6 nicht nötig. Zugriff direkt auf den fli4l-Router will man in der Regel nicht aus dem Internet erlauben.

fli4l

IPv4

Die Konfiguration für das veraltete IP-Protokoll unterscheidet sich hier nicht von bekannten Setups. Es kann ganz normal parallel zu der Konfiguration für das aktuelle Protokoll eingerichtet werden.

IPv6

Für IPv6 sind auf dem fli4l-Router Einstellungen in verschiedenen Konfigurationsdateien nötig. Zunächst braucht es ab fli4l 4.0 einen geeigneten circuit für DHCPv6 über Ethernet. Das Interface CIRC_1_DHCP_DEV ist natürlich genau das, wo das von der Fritz!Box kommende Kabel eingesteckt wurde. Beispiel für einen entsprechenden Abschnitt in circuits.txt:

CIRC[] {
  NAME='Fritz-IPv6'
  TYPE='dhcp'
  PROTOCOLS='ipv6'
  USEPEERDNS='yes'
  ENABLED='yes'
  UP='yes'
  DHCP_DEV='eth0'
  DHCP_PREFIX_LENGTH='60'
  NETS_IPV6[]='::/0'
}

In der base.txt ist natürlich OPT_IPV6='yes' zu setzen. Zusätzlich muss ein Netz für die Clients definiert werden:

IPV6_NET[1]='{Fritz-IPv6}+::1:0:0:0:1/64'
{
  DEV='br0'
  ADVERTISE='yes'
  ADVERTISE_DNS='yes'
}

Als IPV6_NET_1_DEV setzt man das Client-seitige Interface, das kann auch IP_NET_1_DEV sein, wenn man hier das gleiche Interface wie für ein bestimmtes IPv4-Interface haben will.

Was noch fehlt, sind die Einstellungen für den Paketfilter (Firewall). Viele Regeln sind hier nicht nötig, zusätzlich zu den Defaults benutze ich folgende:

PF6_INPUT[]='[fe80::0/10] ACCEPT'
PF6_INPUT[]='IPV6_NET_1 ACCEPT'
PF6_INPUT[]='tmpl:samba DROP NOLOG'
{
  COMMENT='no samba traffic allowed'
}

PF6_FORWARD[]='tmpl:samba DROP'
PF6_FORWARD[]='IPV6_NET_1 ACCEPT'
PF6_FORWARD[]='prot:icmpv6:echo-request any {Fritz-IPv6.prefix} ACCEPT'
{
  COMMENT='ICMPv6 Echo Request'
}

Bei den Paketfilterregeln sollte man wie auch bei IPv4 entsprechend sorgfältig vorgehen, auch die o.g. Config sollte nochmal gegen die eigenen Anforderungen geprüft werden! Optional kann man auch in dns_dhcp.txt noch Hosts anlegen, falls man im Netz hinter dem fli4l-Router Server o.ä. laufen hat. Für den reinen Client-Zugriff ist das nicht nötig.