Si está haciendo muchos retoques de red, configurando aplicaciones basadas en LAN y herramientas de servidor, o simplemente curioso, es probable que haya notado que hay una diferencia entre el host local y la dirección IP local. Sigue leyendo para conocer las diferencias.
La sesión de preguntas y respuestas de hoy nos llega por cortesía de SuperUser, una subdivisión de Stack Exchange, una agrupación impulsada por la comunidad de sitios web de preguntas y respuestas.
¿De qué vamos a hablar?
La pregunta
El lector superusuario Diogo quiere saber por qué el comando ping trata el localhost y la dirección IP local de manera diferente cuando, en la superficie, parecen ser lo mismo:
El uso de cmd y ping en Windows me dio los siguientes resultados:
Haciendo ping a “localhost”:
Pinging “192.168.0.10” (dirección IP local):
¿No son ambas situaciones exactamente iguales?
Quiero decir, estoy haciendo ping a la misma interfaz, la misma máquina y la misma dirección. ¿Por qué obtengo resultados tan diferentes?
Obviamente hay una diferencia de algún tipo, pero ¿qué está pasando exactamente cuando cambias entre los dos?
La respuesta
El colaborador de SuperUser, Tom Wijsman, ofrece la siguiente visión de las sutiles diferencias entre los dos:
No está haciendo ping a la misma interfaz, sin ninguna interfaz física, todavía tiene un “host local”.
Usted
localhost
se utiliza para referirse a su computadora desde su IP “interna”, no desde ninguna IP “externa” de su computadora. Por lo tanto, los paquetes ping no pasan a través de ninguna interfaz de red física; solo a través de una interfaz de bucle virtual que envía directamente los paquetes de puerto a puerto sin ningún salto físico.Es posible que aún se pregunte por qué
localhost
está resolviendo::1
, mientras que tradicionalmente esperaríamos que se resolviera a la dirección IPv4127.0.0.1
. Tenga en cuenta que.localhost
es tradicionalmente un TLD (ver RFC 2606) que apunta de nuevo a la dirección IP de bucle invertido (para IPv4, consulte RFC 3330, especialmente 127.0.0.0/8).Mirando hacia arriba
localhost
Usandonslookup
nos da:
nslookup localhost
... Name: localhost Addresses: ::1 127.0.0.1
Por lo tanto, Windows prefiere usar la dirección IP de bucle IPv6
::1
(ver RFC 2373) ya que se enumera en primer lugar.Bien, entonces, de dónde viene, veamos el archivo hosts.
type %WINDIR%/System32/Drivers/Etc/Hosts
... # localhost name resolution is handled within DNS itself. # 127.0.0.1 localhost # ::1 localhost ...
Hmm, tenemos que mirar la configuración de DNS de Windows.
Este artículo de KB nos habla de una configuración que afecta a lo que Prefiere Windows, enfatizada en negrita:
- En el Editor del Registro, busque y, a continuación, haga clic en la siguiente subclave del Registro:
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Tcpip6/Parameters
- Haga doble clic en DisabledComponents para modificar la entrada DisabledComponents. Nota: Si la entrada DisabledComponents no está disponible, debe crearla. Para ello, siga estos pasos:
- En el menú Edición, seleccione Nuevo y, a continuación, haga clic en Valor DWORD (32 bits).
- Escriba DisabledComponents y, a continuación, presione ENTRAR.
- Haga doble clic en DisabledComponents.
- Escriba cualquiera de los valores siguientes en el campo Datos del valor: para configurar el protocolo IPv6 al estado deseado y, a continuación, haga clic en Aceptar:
- Tipo
para habilitar todos los componentes IPv6. (Configuración predeterminada de Windows)
- Tipo
0xffffffff
para deshabilitar todos los componentes IPv6, excepto la interfaz de bucle invertido IPv6. Este valor también configura Windows para que prefiera usar el Protocolo de Internet versión 4 (IPv4) en lugar de IPv6 modificando las entradas de la tabla de directivas de prefijos. Para obtener más información, vea Selección de direcciones de origen y destino.- Tipo
0x20
para preferir IPv4 sobre IPv6 modificando las entradas de la tabla de directivas de prefijos.- Tipo
0x10
Para deshabilitar IPv6 en todas las interfaces que no son de túnel (tanto en LAN como en protocolo punto a punto) [PPP] interfaces).- Tipo
0x01
para deshabilitar IPv6 en todas las interfaces de túnel. Estos incluyen Intra-Site Automatic Tunnel Addressing Protocol (ISATAP), 6to4 y Teredo.- Tipo
0x11
para deshabilitar todas las interfaces IPv6 excepto la interfaz de bucle invertido IPv6.- Reinicie el equipo para que esta configuración surta efecto.
¿Qué es esta tabla de directivas de prefijos?
netsh interface ipv6 show prefixpolicies
(oprefixpolicy
en versiones anteriores)Precedence Label Prefix ---------- ----- -------------------------------- 50 0 ::1/128 45 13 fc00::/7 40 1 ::/0 10 4 ::ffff:0:0/96 7 14 2002::/16 5 5 2001::/32 1 11 fec0::/10 1 12 3ffe::/16 1 10 ::/96
Esta tabla decide qué prefijos tienen prioridad sobre otros prefijos durante las resoluciones de DNS.
Ah, así que usando ese KB podríamos agregar entradas aquí que denotan que IPv4 tiene mayor precedencia que IPv6.
Nota: No hay ninguna razón para anular este comportamiento, a menos que esté experimentando problemas de compatibilidad. Cambiar esta configuración en nuestro Windows Server rompió nuestro servidor de correo, por lo que debe manejarse con cuidado …
No hay nada que nos guste más que una respuesta completa e informativa con un documento de soporte vinculadouments de sobra. Claramente, el host local y la dirección IP local son entidades distintas, sirven para diferentes propósitos, y ahora todos sabemos por qué.
¿Tienes algo que añadir a la explicación? Sonido apagado en los comentarios. ¿Desea leer más respuestas de otros usuarios expertos en tecnología de Stack Exchange? Echa un vistazo al hilo de discusión completo aquí.