Como todos sabemos, la dirección IPv4 para localhost
es 127.0.0.1
(dirección de bucle invertido). ¿Para qué localhost
y para qué es la dirección IPv6 0.0.0.0
? Necesito bloquear algunos servidores de anuncios.
Como todos sabemos, la dirección IPv4 para
localhost
es127.0.0.1
(dirección de bucle invertido).
En realidad, cualquier dirección IPv4 127.0.0.0/8
es una dirección de bucle invertido.
En IPv6, el análogo directo del rango de loopback es ::1/128
. Entonces ::1
(forma larga 0:0:0:0:0:0:0:1
) es la única dirección de loopback IPv6.
Si bien el nombre de host localhost
normalmente se resolverá en 127.0.0.1
o ::1
, he visto casos en los que alguien lo ha vinculado a una dirección IP que no es una dirección de bucle invertido. Esto es un poco loco ... pero a veces la gente lo hace.
Digo "esto es una locura" porque es probable que rompa las suposiciones de las aplicaciones al hacer esto; por ejemplo, una aplicación puede intentar realizar una búsqueda inversa en la IP de loopback y no obtener el resultado esperado. En el peor de los casos, una aplicación puede terminar enviando tráfico sensible a través de una red insegura por accidente ... aunque probablemente también deba cometer otros errores para "lograrlo".
Bloquear 0.0.0.0
no tiene sentido. En IPv4 nunca se enruta. El equivalente en IPv6 es la ::
dirección (forma larga 0:0:0:0:0:0:0:0
) ... que tampoco se enruta nunca.
Las direcciones 0.0.0.0
y ::
están reservadas para significar "cualquier dirección". Entonces, por ejemplo, un programa que proporciona un servicio web puede vincularse al 0.0.0.0
puerto 80 para aceptar conexiones HTTP a través de cualquiera de las direcciones IPv4 del host. Estas direcciones no son válidas como dirección de origen o destino para un paquete IP.
Finalmente, algunos comentarios preguntaban sobre ::/128
versus ::/0
versus ::
.
Cual es esta diferencia?
Estrictamente hablando, los dos primeros son notación CIDR, no direcciones IPv6. En realidad, están especificando un rango de direcciones IP. Un CIDR consta de una dirección IP y un número adicional que especifica el número de bits en una máscara de red. Los dos juntos especifican un rango de direcciones; es decir, el conjunto de direcciones formadas ignorando los bits enmascarados de la dirección dada.
Entonces:
::
significa solo la dirección IPv6 0:0:0:0:0:0:0:0
::/128
significa 0:0:0:0:0:0:0:0
con una máscara de red que consta de 128 bits. Esto da un rango de red con exactamente una dirección.::/0
significa 0:0:0:0:0:0:0:0
con una máscara de red que consta de 0 bits. Esto da un rango de red con 2 128 direcciones; es decir, ¡es todo el espacio de direcciones IPv6!Para obtener más información, lea las páginas de Wikipedia sobre direcciones IPv4 e IPv6 y la notación CIDR:
::1
es la dirección de loopback en IPv6.
Dentro de una URL, use corchetes []
:
http://[::1]/
http://[::1]:80/
Encerrar el literal IPv6 entre corchetes para su uso en una URL se define en RFC 2732 - Formato para direcciones IPv6 literales en URL .
El localhost ipv6 es ::1
. La dirección no especificada es ::
. Esto se define en la sección 2.5 del RFC 4291 .
En aras de la exhaustividad: existen direcciones IPv6 asignadas a IPv4 , donde puede incrustar una dirección IPv4 en una dirección IPv6 (puede que no sea compatible con todos los equipos IPv6).
Ejemplo: ejecuto un servidor en mi máquina, al que se puede acceder a través de http://127.0.0.1:19983/solr
. Si accedo a él a través de una dirección IPv6 asignada a IPv4, entonces accedo a través de http://[::ffff:127.0.0.1]:19983/solr
(que se convertirá a http://[::ffff:7f00:1]:19983/solr
)
Para usar en un /etc/hosts
como una técnica simple de bloqueo de anuncios para hacer que un dominio no se resuelva, la dirección 0.0.0.0 se ha utilizado ampliamente porque hace que la solicitud falle inmediatamente sin siquiera intentarlo, porque no es una dirección válida o enrutable. Esto es en comparación con el uso de 127.0.0.1 en ese lugar, donde al menos verificará si su propia computadora está escuchando en el puerto solicitado 80 antes de fallar con 'conexión rechazada'. Cualquiera de esas direcciones que se utilizan en el archivo de hosts para el dominio evitará que se intenten solicitudes a través de la red real, pero 0.0.0.0 ha ganado el favor porque es más 'óptimo' por la razón anterior. Las IP "127" intentarán llegar a su propia computadora, y cualquier otra IP hará que se envíe una solicitud al enrutador para intentar enrutarla, pero para 0.0.0.0 allí '
Dicho todo esto, tener cualquier IP en su archivo de hosts para que el dominio sea bloqueado es suficiente, y no necesitaría ni querría poner también una dirección ipv6 en su archivo de hosts a menos que, posiblemente, no lo haga tener ipv4 habilitado en absoluto. Sin embargo, me sorprendería mucho si ese fuera el caso. Y aún así, creo que si el host aparece en / etc / hosts con una dirección ipv4 incorrecta cuando no tiene ipv4 habilitado, aún obtendría el resultado que está buscando, que es que falle, en lugar de buscar el DNS real de, por ejemplo, adserver-example.com y recuperar una IP v4 o v6.