Im Zuge meiner Unitymedia Umstellung habe ich auch native IPv6 Konnektivität (via DHCPv6 + Prefix Delegation) erhalten, welche ich zuvor mit einem Tunnel von Hurricane Electric realisiert hatte. Auf der Fritzbox selbst funktioniert die Dual-Stack Adressierung logischerweise out-of-the-box. Ich nutze allerdings den Bridge-Modus, um meine eigene Firewall hinter der Fritzbox zu betreiben. Dies geht allerdings nur in Business-Verträgen, wie ich neulich festgestellt habe.
Klemme ich mein Linux Notebook an diesen Bridge-Port, bekomme ich ebenfalls sofort eine Dual Stack Adressierung. JunOS verhält sich dabei aber deutlich anders als andere Router/Firewalls.
IPv6 flow mode aktivieren
IPv6 ist ebenfalls wie MPLS und das ISO Protokoll per default deaktiviert. Falls es noch nicht aktiv ist, muss es natürlich eingeschaltet werden. Dabei verwende ich den Flow-Mode, da das Gerät bei mir die Funktion der stateful Firewall übernimmt.
set security forwarding-options family inet6 mode flow-based
Systemdefaults setzen
system { host-name Resistance; domain-name commander1024.de; domain-search commander1024.de; time-zone Europe/Berlin; no-redirects; no-redirects-ipv6; internet-options { path-mtu-discovery; no-source-quench; tcp-drop-synfin-set; no-ipv6-reject-zero-hop-limit; }
DHCPv6 Client konfigurieren
Bei der Konfiguration des DHCPv6 Clients gilt es unbedingt zu beachten, dass die SRX Branch Series (3xx) maximal 3 ‚update router-advertisement‘ Statements beinhalten darf. Mehr als 3 Netze/VLANs können mit einer kleinen SRX also nicht mit dynamischer IPv6 Adressierung ausgestattet werden. Eine dieser komplett sinnlosen, künstlichen Beschränkungen, denen mein ganzer Hass sicher ist.
interfaces { ge-0/0/0 { description "WAN @Unitymedia"; unit 0 { family inet { dhcp-client { client-identifier { prefix { host-name; } } retransmission-attempt 6; retransmission-interval 5; vendor-id ether; } } family inet6 { dhcpv6-client { client-type stateful; client-ia-type ia-na; client-ia-type ia-pd; rapid-commit; prefix-delegating { preferred-prefix-length 59; } update-router-advertisement { interface ae0.100 { other-stateful-configuration; } } client-identifier duid-type duid-ll; update-server; retransmission-attempt 6; } } } }
Der wichtigste Punkt – meiner Meinung – ist, dass der router-advertisement Client so konfiguriert werden muss, wie er die Einstellungen vom Server erwartet. Weicht die config von den Servereinstellungen ab, schlägt die Adressvergabe fehl. Zumindest bin ich hieran fast verzweifelt.
protocols { router-advertisement { interface ge-0/0/0.0 { managed-configuration; other-stateful-configuration; current-hop-limit 64; default-lifetime 1800; } }
Ob Konflikte zwischen erwarteter und gelieferter Konfiguration bestehen, lässt sich mit ’show ipv6 router-advertisement conflicts‘ anzeigen. Gibt es keine, bleibt die Ausgabe leer. Natürlich lassen sich auch alle RA-Infos (aller Interfaces) ausgeben. Hier drin schlummert auch die link-lokale Adresse des Routers, die ich später noch konfigurieren muss.
Commander1024@Resistance> show ipv6 router-advertisement Interface: ge-0/0/0.0 Advertisements sent: 1535, last sent 00:02:50 ago Solicits received: 0 Advertisements received: 197752 Solicited router advertisement unicast: Disable Advertisement from fe80::201:5cff:fe79:a846, heard 00:00:02 ago Managed: 1 Other configuration: 1 Reachable time: 3600000 ms Default lifetime: 1800 sec Retransmit timer: 2000 ms Current hop limit: 0
Commander1024@Resistance> show dhcpv6 client binding detail Client Interface/Id: ge-0/0/0.0 Hardware Address: f4:a7:39:22:94:00 State: BOUND(DHCPV6_CLIENT_STATE_BOUND) ClientType: STATEFUL Lease Expires: 2019-08-11 10:09:34 CEST Lease Expires in: 1114292 seconds Lease Start: 2019-07-28 10:09:34 CEST Bind Type: IA_NA IA_PD Preferred prefix length 59 Sub prefix length 64 Client DUID: LL0x3-f4:a7:39:22:94:00 Rapid Commit: On Server Identifier: fe80::201:5cff:fe79:a846 Update Server Yes Client IP Address: 2a02:908:d00:8:d4bf:31b9:ba8e:510b/128 Client IP Prefix: 2a02:908:d8a:cea0::/59 DHCP options: Name: server-identifier, Value: LL_TIME0x1-0x15b982b6-00:21:28:c0:a9:35 Update RA interfaces: Interface: ae0.100 RA Prefix: 2a02:908:d8a:cea0::/64 Interface: ae0.254 RA Prefix: 2a02:908:d8a:cea1::/64 Interface: ge-0/0/3.0 RA Prefix: 2a02:908:d8a:cea2::/64
Interne Interfaces konfigurieren
IPv6 muss auf den internen Interfaces nicht konfiguriert werden, da die Prefixes bereits durch den DHCPv6 Client zugeteilt wurden:
Commander1024@Resistance# show interfaces ae0 unit 100 description "trusted LAN"; vlan-id 100; family inet { address 192.168.122.1/24; }
Default route hinzufügen
Ich habe es nicht hinbekommen, dass die vom DHCPv6 Server gelernte Default Route auch wirklich in die Routingtabelle eingetragen wird. Ich musste sie daher händisch setzen. Als Next-Hop verwendet ich die link-lokale Adresse des „entfernten“ Unitymedia Routers. Das kann freilich nur so lange funktionieren, wie die sich nicht ändert.
routing-options { rib inet6.0 { static { route ::/0 { qualified-next-hop fe80::201:5cff:fe79:a846 { interface ge-0/0/0.0; } } } }
Firewall konfigurieren
security-zone untrust { screen untrust-screen; interfaces { ge-0/0/0.0 { host-inbound-traffic { system-services { dhcp; dhcpv6; ssh; ping; ike; https; ident-reset; } protocols { router-discovery; } } } } }
policies { from-zone trust to-zone untrust { policy deny-untrust-dns { description "Deny direct communication with external DNS server"; match { source-address any; destination-address any; application [ junos-dns-udp junos-dns-tcp ]; } then { reject; } } policy trust-to-untrust { match { source-address any; destination-address any; application any; } then { permit; count; } } } }