IPV6 privacy extensions in Ubuntu 11.04 (und 11.10) unbrauchbar

Leider brechen langandauernde Verbindungen / stateful connections nach Aktivierung der IPv6 privacy extensions in obigen Versionen öfters mal zusammenbrechen.

Hintergrund: Beim Würfeln des Postfix (der temporären Hostadresse) verwendet Linux zwei Timer: valid lifetime und preferred lifetime. Solange die preferred lifetime nicht abgelaufen ist, verwendet der Kernel für rausgehende Verbindungen diese Adresse. Im Hintergrund wird daneben noch eine Liste geführt mit abgelaufenen IPv6-Hostadressen für die aber noch Verbindungen akzeptiert werden (valid lifetime).

In dem betroffenen System sind beide Werte große genug, daß dies auch für lange Verbindungen kein Problem darstellen sollte:

$ sysctl net.ipv6.conf.eth1.temp_valid_lft
net.ipv6.conf.eth1.temp_valid_lft = 604800

$ sysctl net.ipv6.conf.eth1.temp_prefered_lft
net.ipv6.conf.eth1.temp_prefered_lft = 86400

Obwohl das System vor nicht allzulanger Zeit gebootet wurde zeigt ein ip -6 addr show bereits mehrere temporäre IPv6-Adressen mit verdächtig kurzen Lebenszeiten:

inet6 2002:55b4:2d3b:1:3059:12ab:caf1:8475/64 scope global temporary dynamic
valid_lft 245sec preferred_lft 65sec
inet6 2002:55b4:2d3b:1:98f4:ba60:7ed3:dbba/64 scope global temporary deprecated dynamic
valid_lft 155sec preferred_lft 0sec
inet6 2002:55b4:2d3b:1:607a:bd6c:25d4:f4b8/64 scope global temporary deprecated dynamic
valid_lft 43sec preferred_lft 0sec

Es hat sich rausgestellt, daß der Kernel die definierten Werte mit der Lebenszeit der Router-Advertisements überschreibt und dies auch dann tut, wenn vor dem Ablauf des alten ein neues Advertisement empfangen wurde.

Offenbar ist das Ganze sogar in RFC3041 so gefordert. Seit Kernel-Version 3.2 ist das neuere RFC4941 implementiert, daß diese Schwachstelle ausbessert. Leider sind damit ohne Kernel-Update die Privacy-Extensions auf älteren Systemen ziemlich untauglich. Aber immerhin scheint das Problem in einer Vorabversion von Ubuntu 12.04 behoben zu sein.