QVINTVS · SCRIBET

Kein IPv6 auf Raspberry Pi

Nachdem mir mein als All-Round-Netzwerkgerät dienender Raspberry Pi vollständig und nachhaltig mitsamt SD-Karten-Schredderung (!) abgesetürzt ist, hatte ich nach dem Neuaufsetzen mit ArchlinuxARM Probleme mit IPv6.

Das Problem

Der Pi hatte einfach kein IPv6. So richtig gar keins, also nicht nur keine globale IPv6-Adresse. Äußern tat sich das in folgendem, außerordentlich seltsamen Verhalten:

% ping6 ::1
socket: Address family not supported by protocol

Etwas derartiges hatte ich noch nie gesehen. Linux kann IPv6 seit Urzeiten, und es liegt ganz bestimmt nicht an einer veralteten Kernel-Verison:

% uname -a
Linux avalon.internal.immobilien-concepte.eu 3.6.11-12-ARCH+ #1 PREEMPT Tue Jun 11 16:09:48 CDT 2013 armv6l GNU/Linux

Also etwas Ursachenforschung betrieben. Was sagt ip addr list?

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo

Da fehlt das erwartete ::1. Schnell nochmal geschaut, ob die /etc/hosts in Ordnung war, ich hatte in ihr herumgepfuscht:

#
# /etc/hosts: static lookup table for host names
#

#<ip-address>	<hostname.domain.org>	<hostname>
127.0.0.1	localhost.localdomain	localhost
::1		localhost.localdomain	localhost

10.37.59.129	avalon.internal.immobilien-concepte.eu	avalon

# End of file

Das sieht gut aus. Damit war ich erst einmal überfragt. Ich durchsuchte das Internet nach der Fehlermeldung und landete auf verschiedenen Websites, die behaupteten, man müsse das ipv6-Kernelmodul laden:

# modprobe ipv6

Der Effekt ist gleich null. Was auch nicht verwundert, denn ArchLinux hat das ipv6-Modul fest in den Kernel einkompiliert. Selbst wenn man wollte, könnte man es nicht blacklisten, um ein Laden zu verhindern.

Die Lösung

Die Lösung fand ich indirekt im ArchWiki-Artikel über das Abschalten von IPv6. Dort wird von einer Kerneloption ipv6.disable gesprochen. Ich hatte jedoch an der Kernel-Kommandozeile des Pis überhaupt nichts geändert; ich wusste ja nicht einmal, wie das geht. Immerhin bootet der Pi ja nicht über ein BIOS nach GRUB (wo man einfach das linux-Kommando in der grub.cfg bearbeiten könnte). Aus einer Mischung von Not und Neugierde heraus warf ich einen Blick in das, was sich beim Pi unter /boot verbirgt. Dort gibt es eine Datei /boot/cmdline.txt. Und siehe da:

% cat /boot/cmdline.txt 
ipv6.disable=1 selinux=0 plymouth.enable=0 smsc95xx.turbo_mode=N dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p5 rootfstype=ext4 elevator=noop rootwait

Eine solche Bevormundung ist ja unerhört. Warum soll ich mit dem Pi kein IPv6 benutzen?! Folgerichtig habe ich ipv6.disale=1 restlos aus der Datei getilgt. Nach einem Reboot funktionierte dann mei IPv6 auch wieder:

% ping6 ::1
PING ::1(::1) 56 data bytes
64 bytes from ::1: icmp_seq=1 ttl=64 time=0.190 ms
64 bytes from ::1: icmp_seq=2 ttl=64 time=0.184 ms

Valete.