Lo primero decir que desconozco si esto sucede en versiones de kernel actuales. El problema lo he encontrado en un CentOS 6 con kernel 2.6.32-504.16.2.el6.x86_64.
Al hacer X11 forwarding contra este sistema, la variable $DISPLAY no quedaba establecida pese a tener todo bien configurado: xauth, sshd_config, etc. Buscando trazas en el debug de la conexión ssh (-vv) tampoco aparecía ningún error relevante. Finalmente, he encontrado un bug antiguo de debian que reproducía exactamente lo que me estaba pasando.
El problema, a grandes rasgos, tiene origen en tener ipv6 deshabilitado a nivel de sysctl y habilitado en el kernel. Esto provoca que openssh-server al hacer un getaddrinfo()
devuelva primero IPv6 en lugar de Ipv4, como el sistema no tiene ipv6 no termina de negociar bien la redirección X11.
La solución es sencilla, añadir la siguiente directiva (sólo utilizar IPv4) en el archivo de configuración del servidor openssh /etc/sshd/sshd_config
#AddressFamily any #ListenAddress 0.0.0.0 #ListenAddress :: AddressFamily inet
AddressFamily: Specifies which address family should be used by sshd(8). Valid arguments are «any», «inet» (use IPv4 only), or «inet6» (use IPv6 only). The default is «any».
Y reiniciar ssh:
/etc/init.d/sshd restart