To the universal deployment of IPv6
war ein beliebter, ironischer Trinkspruch auf IETF Meetings. Wie universal
das ist, kann man an folgendem sehen. Wenn man den sshd
mit
der Konfig X11Forwarding yes
und X11UseLocalhost yes
startet, dann geht in dem Default-Setup von Ubuntu kein X-Forwarding,
wenn man keine IPv6-Loopback-Addr ([::1]
) auf dem lo
Interface hat.Dazu gibt es keine verdammte Fehlermeldung, ausser
"Failed to allocate internet-domain X11 display socket."
und in der steht nicht, warum. Wenn man dann in die C-sourcen von OpenSSH schaut,
findet man (beim aktuellen OpenSSH) in channel.c
in der Zeile 4744:
for (display_number = x11_display_offset;
display_number < MAX_DISPLAYS;
display_number++) {
...
getaddrinfo(NULL, strport,
&hints, &aitop))
...
sock = socket(ai->ai_family, ai->ai_socktype,
ai->ai_protocol);
...
if (bind(sock, ai->ai_addr, ai->ai_addrlen) == -1) {
debug2_f("bind port %d: %.100s", port,
strerror(errno));
close(sock);
...
}
if (display_number >= MAX_DISPLAYS) {
error("Failed to allocate internet-domain X11 display socket.");
return -1;
}
D.h. der socket
call funktioniert auf einem PoetteringOS ohne IPv6,
wenn die ai_family == AF_INET6
ist, aber das bind
schlaegt fehl, und darauf gibts nur eine Debug-Nachricht auf Level DEBUG2
.
Und weil das keinen Abbruch der Schleife erzwingt, zaehlt die aeussere Schleife
froehlich bis MAX_DISPLAYS
, und stirbt dann mit einer eher obskuren Vehlermehldung.
Wenn man die AddressFamily
vom Default any
auf inet
umstellt, geht wieder alles.
WeheheeeeTeeheEhehhhfFFFF