wide-dhcpv6-client und radvd nach ppp starten

Einrichten des lokalen Netzes, Verbindung zu anderen Computern und Diensten.
Antworten
reox
Beiträge: 2464
Registriert: 06.06.2006 22:09:47
Lizenz eigener Beiträge: MIT Lizenz

wide-dhcpv6-client und radvd nach ppp starten

Beitrag von reox » 29.11.2020 12:53:53

Ich erhalte seit neustem IPv6 Adressen vom Provider. Der verwendet hier PPPoE um die Verbindung herzustellen, dann nehme ich dhcp6c um den prefix zu erhalten und radvd um diesen zu verteilen.
Leider ist das ganze nicht reboot sicher, denn bei einem Neustart schlägt der Start von wide-dhcpv6-client sowie radvd fehl, da eben ppp0 noch nicht existiert. Radvd ist auch noch ein Spezialfall, da ich den prefix ja nicht kenne und deshalb ::/64 verwende - das klappt aber dazu muss auf dem interface bereits das prefix delegiert worden sein.
Ich hab versucht mit einem post-up die beiden dienste neu zu starten, allerdings führt das nur dazu, dass bei einem neustart das network target für 5min hängt und dann erst der Boot weitergeht. Interessanterweise wird dabei auch ppp0 zwar aktiv, aber deaktiviert sich dann weil offenbar post-up fehlschlägt.
radvd kennt zwar das IgnoreIfMissing, aber ich müsste ja trotzdem bei erfolgreicher delegierung zumindest ein reload aussenden. Außerdem ist ja das lokale LAN interface schon da... also bei radvd gehts ja nur darum, dass er den prefix selber erkennen muss.
Bei wide-dhcpv6-client finde ich gar nichts, was mir helfen würde. Offenbar erwartet er das interface und wenn es nicht da ist dann macht beendet der sich mit einem fehler.

Auch interessant ist noch die Frage wie man die sysctl parameter für das interface korrekt setzt. Wenn es zur bootzeit nicht da ist, meint sysctl es setzt sie nicht, weil es das interface nicht kennt.
Laut anderen Foren sollte man das als udev regel machen. Macht es Sinn in die udev regel auch den dhcp6c und radvd aufzunehmen?
Oder gibt es eine elegantere Lösung?

edit: Ich hab jetzt folgendes probiert:

Code: Alles auswählen

# systemctl disable wide-dhcpv6-client
# systemctl disable radvd
und eine datei /etc/ppp/ipv6-up.d/10-fixscripts angelegt:

Code: Alles auswählen

#!/bin/sh
# The environment is cleared before executing this script.
PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin
export PATH

sleep 2
systemctl restart wide-dhcpv6-client.service
# Give some time to add the prefixes
sleep 2
systemctl restart radvd.service
das scheint auf jeden fall zu klappen und nach einem reboot sind prefixes da und werden auch verteilt.
Vermutlich kann man noch ein äquivalentes script in ipv6-down.d anlegen und die dienste wieder stoppen.

Antworten