
Als Kunde, der bei Netcup FreeBSD-Rootserver auf KVM/QEMU-Basis einsetzt, habe ich schnell gemerkt, dass meine IPv6-Verbindung nicht stabil ist.
Symptome
- Direkt nach dem Boot funktioniert IPv6 wie gewünscht
- Nach einiger Zeit brechen Verbindungen zusammen — sowohl eingehend als auch ausgehend
- Verbindungen haben „Startprobleme“ — ein Ping läuft erst ein paar Mal ins Leere, dann funktioniert plötzlich alles wieder für einen Moment
Ein Ping auf die IPv6-Adresse des Netcup-Gateways stellt die Konnektivität kurzzeitig her. Das deutet sofort auf ein NDP-Problem (Neighbor Discovery Protocol) hin.
Diagnose
FreeBSD behandelt Neighbor Solicitations anders als Linux. Netcups Netzwerk-Setup kommt damit offenbar nicht klar — unter Linux funktioniert IPv6 problemfrei, unter FreeBSD (und NetBSD) nicht. Die ICMPv6-Statistiken zeigen das Problem deutlich:
netstat -s -picmp6 | grep -i neighbor
neighbor solicitation: 29 # Output: wenige eigene Anfragen
neighbor advertisement: 10 # Output: wenige eigene Antworten
neighbor solicitation: 633 # Input: Flut eingehender Anfragen
neighbor advertisement: 25 # Input: wenige Antworten zurück
423 bad neighbor solicitation messages # <-- das Problem
633 eingehende Neighbor Solicitations, davon 423 als „bad" verworfen. FreeBSD verwirft die Anfragen, weil sie nicht von einer On-Link-Adresse kommen — ein Verhalten, das FreeBSD aus Sicherheitsgründen seit einem Security Advisory von 2008 erzwingt.
Lösung
FreeBSD anweisen, Neighbor Discovery nach RFC 4861 zu machen — das akzeptiert auch Solicitations von Off-Link-Adressen, wie es Netcups Router sendet. Zum Testen:
sysctl net.inet6.icmp6.nd6_onlink_ns_rfc4861=1
Funktioniert es, den Eintrag in /etc/sysctl.conf permanent machen:
net.inet6.icmp6.nd6_onlink_ns_rfc4861=1
Wichtig: FreeBSD hat dieses Verhalten aus Sicherheitsgründen deaktiviert. Die strenge Prüfung schützt gegen NDP-Spoofing-Angriffe. Auf einem VPS bei einem vertrauenswürdigen Hoster ist das Risiko überschaubar — auf einem System in einem offenen Netzwerk sollte man abwägen.
Netcup-Support
Ich habe einige Zeit mit dem Support verbracht. Das Problem wurde mir bestätigt — es liege an den Core-Routern, ein Update sei geplant, aber ohne Termin. Mein System wurde auf verschiedene Hosts verschoben, ohne Besserung. Das Problem ist im Netcup-Forum bekannt und betrifft alle BSD-Systeme. Aus meiner Sicht lässt Netcups Setup keine einfache Lösung zu, daher bleibt der sysctl-Workaround.
Fragen? Einfach melden.
Schreibe einen Kommentar