Fiber7 & Unifi Security Gateway (USG) mit DHCPv6 Prefix Delegation (DHCPv6-PD)

Manuelle Anleitung für DHCPv6-PD Unterstützung mit der Unifi Security Gateway (USG) via config.gateway.json.

Die Init7 benutzt auf ihren Fiber7 standard IPv4 (DHCPv4) und IPv6 (DHCPv6-PD PD=Prefix Delegation)

Voraussetzung

  • Unifi Controller Version muss mindestens 5.4.11 sein für die manuelle Konfiguration mit config.gateway.json
  • DHCPv6-PD auf der USG funktioniert auch nur wenn ihr direkt mit Init7 verbunden seid. Es funktioniert nicht hinter einem anderen Router.

IPv6 Test vor der Konfiguration

Testseite aufrufen vom lokalen Gerät in euerem Netzwerk: https://test-ipv6.com/

Resultat

0 von 10 Tests waren erfolgreich.

Es ist Zeit IPv6 mit DHCPv6-PD einzurichten…

Manuelle Konfiguration mit config.gateway.json

Für spezielle Konfigurationen gibt es die Datei config.gateway.json. Die Datei auf dem Unifi Controller erlaubt eine persistente Konfiguration auch bei erneuter Provisionierung.

Die Datei config.gateway.json ist standardmässig nicht vorhanden und muss am richtigen Ort erstellt werden.

Basispfad Unifi Controller "Site"

Auf Unifi Controller können mehrere "Seiten" eingerichtet werden. Um die richtige Seite zu finden könnt ihr in der URL nachschauen:

https://UnifiController:8443/manage/site/<sitenname>/dashboard

# Meine Unifi Controller Dashbord URL:
https://UnifiController:8443/manage/site/default/dashboard

Da ich nur eine "site" habe, hat diese noch den Namen default.

Die Basispfade für den UC und die verschiedenen Betriebsysteme sind hier dokumentiert: https://help.ubnt.com/hc/en-us/articles/115004872967

Mein UC ist auf Ubunutu installiert und somit is mein Unifi Basispfad:

/usr/lib/unifi

Der Basispfad zur "site":

/usr/lib/unifi/data/sites/default

Die Datei config.gateway.json auf dem Unifi Controller anlegen für die gewünschte Seite:

vim /usr/lib/unifi/data/sites/default/config.gateway.json

Folgendes einfügen oder vom Link USG JSON config kopieren):

Hinweis: Diese Konfiguration funktioniert nur wenn eth0 euer WAN-Interface ist (Standardkonfiguration). Ansonsten müsst ihr die Konfiguration entsprechend anpassen.
Für VLAN müsst ihr auch etwas anpasssen, siehe die VLAN Notiz unter "Manual Configuration with .JSON File" Link.

Wichtig: Die Konfiguration vor dem Provisionieren nochmals durch einen JSON Validator laufen lassen. Die Syntax muss korrekt sein, ansonsten gibt einen boot loop auf der USG!

{
  "firewall": {
    "ipv6-name": {
      "wan_in-6": {
        "default-action": "drop",
        "description": "wan_in",
        "enable-default-log": "''",
         "rule": {
          "1": {
            "action": "accept",
            "description": "Allow Enabled/Related state",
            "state": {
              "established": "enable",
              "related": "enable"
            }
          },
          "2": {
            "action": "drop",
            "description": "Drop Invalid state",
            "log": "enable",
            "state": {
              "invalid": "enable"
            }
          },
          "5": {
            "action": "accept",
            "description": "Allow ICMPv6",
            "log": "enable",
            "protocol": "icmpv6"
          }
        }
      },
      "wan_local-6": {
        "default-action": "drop",
        "description": "wan_local",
        "enable-default-log": "''",
        "rule": {
          "1": {
            "action": "accept",
            "description": "Allow Enabled/Related state",
            "state": {
              "established": "enable",
              "related": "enable"
            }
          },
          "2": {
            "action": "drop",
            "description": "Drop Invalid state",
            "log": "enable",
            "state": {
              "invalid": "enable"
            }
          },
          "5": {
            "action": "accept",
            "description": "Allow ICMPv6",
            "log": "enable",
            "protocol": "icmpv6"
          },
          "6": {
            "action": "accept",
            "description": "DHCPv6",
            "destination": {
              "port": "546"
            },
            "protocol": "udp",
            "source": {
              "port": "547"
            }
          }
        }
      }
    }
  },
  "interfaces": {
    "ethernet": {
      "eth0": {
        "dhcpv6-pd": {
          "pd": {
            "0": {
              "interface": {
                "eth1": "''"
              },
              "prefix-length": "48"
            }
          },
          "rapid-commit": "enable"
        },
        "firewall": {
          "in": {
            "ipv6-name": "wan_in-6"
          },
          "local": {
            "ipv6-name": "wan_local-6"
          }
        }
      },
      "eth1": {
        "ipv6": {
          "dup-addr-detect-transmits": "1",
          "router-advert": {
            "cur-hop-limit": "64",
            "link-mtu": "0",
            "managed-flag": "true",
            "max-interval": "600",
            "other-config-flag": "false",
            "prefix": {
              "::/48": {
                "autonomous-flag": "true",
                "on-link-flag": "true",
                "valid-lifetime": "2592000"
              }
            },
            "reachable-time": "0",
            "retrans-timer": "0",
            "send-advert": "true"
          }
        }
      }
    }
  }
}

Folgendes müsst ihr auf 48 anpassen (bin nicht sicher ob beides angepasst werden muss, aber so funktioniert es bei mir):

…
"prefix-length": "48"
…
"prefix": {
  "::/48": {
…

Jetzt die Provisionierung auf der USG forcieren: https://help.ubnt.com/hc/en-us/articles/115002913728-UniFi-How-to-Trigger-a-Provision

Testen auf der USG direkt

 ssh <user>@<USG-IP>

Mit show interfaces solltet ihr etwa sowas sehen (Die IPv4 & IPv6 Adressen habe ich alle verändert):

Codes: S - State, L - Link, u - Up, D - Down, A - Admin Down
Interface    IP Address                        S/L  Description
---------    ----------                        ---  -----------
eth0         XXX.XXX.XXX.XXX/24                  u/u
             123a:b12:c1234:dd:abcd:blah:blah:1111/128
eth1         192.168.XXX.XXX/24                   u/u
             123a:b12:d321:00:dcba:blah:654:1234/64
eth2         -                                 A/D
lo           127.0.0.1/8                       u/u
             ::1/128

show ipv6 route sollte etwas dies anzeigen:

Codes: K - kernel route, C - connected, S - static, R - RIPng, O - OSPFv3,
       I - ISIS, B - BGP, * - FIB route.

K>* ::/0 via fe80::aaa:xyzz:0123:12bf, eth0
C>* ::1/128 is directly connected, lo
C>* 123a:b12:c1234:dd:abcd:blah:blah:1111/128 is directly connected, eth0
C>* 123a:b12:d321::/64 is directly connected, eth1
C * fe80::/64 is directly connected, eth0
C>* fe80::/64 is directly connected, eth1

Und dies sollte zwingend funktionieren ping6 google.ch:

Lokal testen

Auch eure lokalen Geräte sollten IPv6 jetzt unterstützen. Dazu könnt ihr erneut auf diese Seite gehen: https://test-ipv6.com/

Resultat

10 von 10 Tests waren erfolgreich.

Super!! Jetzt funktioniert IPv6 auf allen Geräten. Die USG nutzt nun DHCPv6-PD mit Fiber7.

Ich kenne mich noch nicht so gut aus mit IPv6. Komischerweise zeigt mit die USG noch immer …/64 an und auch die clients bei der prefix length. Ich hoffe dies kann mir mal jemand genauer erklären.

Unifi Controller Version 5.7 soll IPv6 um einiges besser unterstützen und auch via User Interface konfigurierbar sein. Siehe hier: https://matthijs.hoekstraonline.net/2016/11/27/how-to-enable-ipv6-from-comcast-on-your-unify-security-gateway/

Urpsrünglicher Artikel: