Unifi USG ipv6 bei PPPOE Verbindung zu T-Online

Problem:
Clients erhalten keine ipv6 Adressen aus dem von der Telekom zugewiesenem Prefix.
Auf der Konsole des USG ist ersichtlich, dass die internen Netze keine ipv6 zugewiesen bekommen haben:

admin@USG01:~$ show interfaces
Codes: S - State, L - Link, u - Up, D - Down, A - Admin Down
Interface IP Address S/L Description
--------- ---------- --- -----------
eth0 - u/u WAN
eth0.7 - u/u WAN
eth1 10.11.1.254/24 u/u LAN
eth2 - A/D
lo 127.0.0.1/8 u/u
::1/128
pppoe2 87.185.44.41 u/u
2003:d1:xxxx:yyyy:4f7:5a4f:23f9:3a7f/64

Eventuell funktioniert es auch nach der Grundkonfiguration aber spätestens nach dem ersten Neustart der USG kommt es zu dem beschriebenem Verhalten.

Die Ursache ist ein Fehler in der vom Kontroller generierten Konfiguration.
Es existiert ein dhcp-pd Tag auf dem WAN-Interface eth0 und auf dem PPPOE0 bzw. PPPOE2 Interface.
(PPPOE0 wird verwendet, wenn der WAN-Zugang ohne VLAN eingerichtet wurde, PPPOE2 wenn im WAN-Zugang VLAN 7 eingetragen wurde.
Ich verwende hier im weiteren Verlauf nur PPPOE2)

Durch die Eingabe folgender Befehle auf der USG kann das Problem (kurzzeitig, da nicht permanent) behoben werden:

configure
delete interfaces ethernet eth0 vif 7 dhcpv6-pd
commit
exit
release dhcpv6-pd interface pppoe2
delete dhcpv6-pd duid
renew dhcpv6-pd interface pppoe2

Um die Änderung permanent zu machen müssen wir etwas in die Trickkiste greifen.
Zwar besteht die Möglichkeit durch eine config.gateway.json Modifikationen an der Konfiguration vorzunehmen.
Möglich sind allerdings nur Modfikationen / Ergänzungen an der generierten Konfiguration. Das Entfernen des überflüssigen Tags ist hierüber leider nicht möglich.

Wir erzeugen also folgendes Script im Verzeichnis /config/scripts/post-config.d (anlegen, falls noch nicht vorhanden) der USG:

 
#!/bin/vbash
# wird beim Neustart und durch einen CRON JOB gestartet, der beim Provisionieren erstellt wird

readonly logFile="/var/log/postprovision.log"

source /opt/vyatta/etc/functions/script-template

configure > ${logFile}

#cronjob löschen, der dieses Script aufgerufen hat
delete system task-scheduler task postprovision >> ${logFile}

# DHCP-PD auf eth0 Interface entfernen (liegt auf pppoe0)
delete interfaces ethernet eth0 vif 7 dhcpv6-pd >> ${logFile}
commit
exit

#Neue IPV6 Adressen beziehen
release dhcpv6-pd interface pppoe2 >> ${logFile}
delete dhcpv6-pd duid >> ${logFile}
renew dhcpv6-pd interface pppoe2 >> ${logFile}

Und machen dieses Script ausführbar…

chmod +x /config/scripts/post-config.d/dhcp.sh

Das Script wird jetzt nach jedem Neustart der USG aufgerufen 🙂

Des weiteren legen wir eine config.gateway.json mit folgendem Inhalt an und platzieren sie auf dem Unifi Controller (z.B. dem Cloud-Key im Verzeichnis /srv/unifi/data/sites/default)
Details dazu findet man hier

{
"system":{
"task-scheduler":{
"task":{
"postprovision":{
"executable":{
"path":"/config/scripts/post-config.d/dhcp.sh"
},
"interval":"2m"
}
}
}
},
"interfaces":{
"ethernet":{
"eth0":{
"vif":{
"7":{
"pppoe":{
"2":{
"dhcpv6-pd":{
"prefix-only":"''"
}
}
}
}
}
}
}
}
}

Die config.gateway.json legt einen Task an, der einmalig 2 Minuten nach dem Neuprovisionieren des USG gestartet wird und das oben angelegte Script ausführt.
Zusätzlich wird noch ein prefix-only Tag auf das PPPOE2 Interface gesetzt, welches verhindert, dass die CPU Last des USG auf 100% ansteigt
Weitere Infos zu diesem Fehler Feature finden sich hier.

Author: Stefan

Comments

  1. Pingback: UniFi IPv6 and Dual Stack PPPoE – Words

Comments are closed.