Desafortunadamente, esto difiere según el sistema operativo que esté utilizando.
En Microsoft Windows, la vinculación de un socket ::
solo se vincula a los puertos IPv6. Por lo tanto, para escuchar en todas las direcciones tanto en IPv4 como en IPv6, debe vincularse 0.0.0.0
también ::
. El siguiente extracto es de un cuadro de Vista:
C:\>netstat -an | find "445"
TCP 0.0.0.0:445 0.0.0.0:0 LISTENING
TCP [::]:445 [::]:0 LISTENING
El ejemplo que doy es el puerto 445, que se usa para el tráfico SMB cuando no se usa NetBIOS. Como puede ver, es vinculante para ambos 0.0.0.0
y ::
para que, respectivamente, funcionen los clientes IPv4 e IPv6.
En Linux, ::
incluye las direcciones compatibles con IPv4, como has adivinado correctamente, por lo que 0.0.0.0
no es necesario vincularlas . Escribí un programa simple de Python que solo se une a un AF_INET6
socket ::
. Aunque no me uní a un AF_INET
socket (IPv4), todavía acepta conexiones de clientes IPv4. Si, por ejemplo, se 10.1.1.3
conecta a él, aparecerá como una conexión desde ::ffff:10.1.1.3
.
Excepto que se pone peludo. Lo anterior no se aplica en Linux si /proc/sys/net/ipv6/bindv6only
está configurado en 1
, en cuyo caso el comportamiento es exactamente el mismo que el de Windows: el enlace ::
solo escuchará las solicitudes de IPv6. Si también quiere escuchar las solicitudes de IPv4, deberá crear un AF_INET
socket y escuchar 0.0.0.0
también. Afortunadamente, el valor predeterminado para bindv6only
es 0
, por lo que hay muy pocas posibilidades de que tenga que lidiar con esto (excepto si usa Debian, que en realidad es el predeterminado bindv6only = 1
).
Todo esto es útil para saber si verifica si un servicio está habilitado para IPv6 y si también está habilitado para IPv4. Aquí está mi servidor SSH:
$ netstat -64ln | grep 22
tcp6 0 0 :::22 :::* LISTEN
Como puede ver, SSH solo está escuchando en el ::
puerto 22. Sin embargo, no solo está escuchando clientes IPv6: funciona bien desde clientes IPv4, debido al enlace compatible con IPv4. Para probar esto, si nos fijamos en esto:
$ cat /proc/sys/net/ipv6/bindv6only
0
bindv6only
está deshabilitado (el valor predeterminado). Si eso se configurara como 1
, entonces tendría que alentar a SSH a escuchar 0.0.0.0
también (o en su lugar).
Disculpas por no tener información sobre el lado de Mac OS X de las cosas. Lo he usado en el pasado, pero prefiero la estética de GNOME, así que no lo he usado en mucho tiempo. Sin embargo, supongo que el comportamiento es el mismo que el de Linux.
Espero que esto ayude.