Después de ejecutar lo siguiente para deshabilitar las respuestas de ping:
# sysctl net.ipv4.icmp_echo_ignore_all=1
# sysctl -p
Obtengo resultados diferentes al hacer ping a localhost vs. 127.0.0.1
# ping -c 3 localhost
PING localhost(localhost (::1)) 56 data bytes
64 bytes from localhost (::1): icmp_seq=1 ttl=64 time=0.029 ms
64 bytes from localhost (::1): icmp_seq=2 ttl=64 time=0.035 ms
64 bytes from localhost (::1): icmp_seq=3 ttl=64 time=0.101 ms
--- localhost ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2042ms
rtt min/avg/max/mdev = 0.047/0.072/0.101/0.022 ms
Pinging 127.0.0.1 falla:
ping -c 3 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
--- 127.0.0.1 ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 2032ms
¿Por qué son diferentes estos resultados?
127.0.0.1:
127.0.0.1 es el loopback predeterminado de la mayoría de los sistemas. Una dirección de bucle invertido es una dirección utilizada por el sistema para validar la pila de red del sistema operativo.
La dirección de bucle de retorno para IPv4 podría tomar cualquier valor en la subred.
127.0.0.0/8
La dirección de bucle de retorno para IPv6 podría tomar cualquier valor en la subred,
::1/128
ping
cualquier valor en ese rango debería funcionar si su pila de red funciona en su sistema operativo.localhost:
localhost
es un nombre de host, es una especie de nombre de dominio pero local para su propia máquina.Este nombre de host apunta de forma predeterminada a su bucle invertido IPv4 e IPv6, que a menudo es
127.0.0.1
o::1
.localhost
la dirección podría cambiarse fácilmente editando el archivo/etc/hosts
.Si su sistema usa el servicio
systemd-resolved
, este servicio manejará la forma en que se resuelve localhost.De acuerdo con la documentación de
systemd-resolved
:ping
Cuando intente hacer ping a un nombre de host o nombre de dominio, le pedirá al sistema operativo que resuelva este nombre de host o nombre de dominio. En tu caso, deshabilitaste
icmpv4
pero localhost se resuelve como su bucle invertido IPv6 y su bucle invertido IPv4 pero solo su respuesta de bucle invertido IPv6.La diferencia es que en un caso está intentando hacer ping a una IP y en el otro caso hace ping a un nombre de host que podría tomar varios valores.
Desactivar icmpv6
Si no necesita IPv6, le aconsejo que lo desactive. Duplicará todo el trabajo que necesitaría hacer en el firewall y los servicios de configuración:
Si aún desea compatibilidad con IPv6 y desea evitarlo
icmpv6
, puede usarip6tables
:fuente
::1 localhost
.ping 127.100.101.102
funcionará).localhost
no son necesariamente necesarias en/etc/hosts
. Por ejemplo, systemd-resolve sintetiza registros de recursos DNS paralocalhost
ylocalhost.localdomain
.hosts
archivo completo pero no tengo::1 localhost
corriendo ubuntu 17.10Localhost tiene dos direcciones, una dirección IPv6 :: 1 y una dirección IPv4 127.0.0.1.
IPv6 es el protocolo predeterminado, por lo que :: 1 siempre se prefiere a 127.0.0.1. Esta es la razón por la que ha pinchado :: 1 al solicitar hacer ping a localhost.
En cuanto a por qué podría hacer ping :: 1 pero no pudo hacer ping 127.0.0.1, su sysctl solo ha deshabilitado los pings para IPv4, pero no para IPv6. Por lo que puedo decir, no hay un sysctl correspondiente para deshabilitar pings para IPv6, pero puede deshabilitarlo en el firewall si realmente lo necesita (por supuesto, deshabilitarlo no se recomienda de todos modos).
fuente
/etc/gai.conf
archivo. Por defecto, solo tiene comentarios. Si descomenta lasprecedence
líneas y realiza el cambio también sugerido en los comentarios, puede obtener la resolución del nombre de host para preferir IPv4 en lugar del IPv6 predeterminado.