Depois de executar o seguinte para desativar as respostas de ping:
# sysctl net.ipv4.icmp_echo_ignore_all=1
# sysctl -p
Eu obtenho resultados diferentes de ping 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
O ping 127.0.0.1 falha:
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 que esses resultados são diferentes?
O
ping
comando mostra o endereço para o qual resolveu o nome. Nesse caso, resolveu para o endereço IPv6 localhost,::1
. Por outro lado,127.0.0.1
é um endereço IPv4, portanto fazping
uso explicitamente do IPv4.O
sysctl
que você usou afeta apenas pings IPv4, então você obtém respostas para::1
, mas não para127.0.0.1
.O endereço que você obtém da resolução
localhost
depende de como o seu resolvedor de DNS está configurado.localhost
provavelmente está definido em/etc/hosts
, mas em teoria você pode obtê-lo de um servidor de nomes real.Quanto a como descartar pings IPv6, talvez seja necessário examinar
ip6tables
, pois não parece haver um semelhantesysctl
para IPv6. Ou apenas desative o IPv6 totalmente, se você não o estiver usando em sua rede. (Embora, é claro, essa não seja uma ideia muito voltada para o futuro, mas factível se você não a estiver usando atualmente.)127.0.0.1:
127.0.0.1 é o loopback padrão da maioria dos sistemas. Um endereço de loopback é um endereço usado pelo sistema para validar a pilha de rede do sistema operacional.
O endereço de loopback para IPv4 pode ter qualquer valor na sub-rede
127.0.0.0/8
O endereço de loopback para IPv6 pode ter qualquer valor na sub-rede
::1/128
ping
qualquer valor nesse intervalo deve funcionar se sua pilha de rede estiver funcionando em seu sistema operacional.localhost:
localhost
é um nome de host, uma espécie de nome de domínio, mas local para sua própria máquina.Por padrão, esse nome de host aponta para o loopback IPv4 e IPv6, que geralmente é
127.0.0.1
ou::1
.localhost
O endereço pode ser alterado facilmente editando o arquivo/etc/hosts
.Se o seu sistema usar o serviço
systemd-resolved
, esse serviço tratará da maneira como o host local é resolvido.De acordo com a documentação de
systemd-resolved
:ping
Quando você tenta fazer ping em um nome de host ou nome de domínio, ele solicita ao sistema operacional que resolva esse nome de host ou nome de domínio. No seu caso, você desativou,
icmpv4
mas o host local foi resolvido como seu loopback IPv6 e seu loopback IPv4, mas apenas sua resposta de loopback IPv6.A diferença é que, em um caso, você está tentando fazer ping em um IP e, no outro, em um nome de host que pode ter vários valores.
Desative o icmpv6
Se você não precisa do IPv6, aconselho desativá-lo. Isso dobrará todo o trabalho que você precisa fazer no firewall e na configuração de serviços:
Se você ainda deseja suporte a IPv6 e deseja evitar
icmpv6
, pode usarip6tables
:Localhost tem dois endereços, um endereço IPv6 ::1 e um endereço IPv4 127.0.0.1.
IPv6 é o protocolo padrão, então ::1 é sempre preferível a 127.0.0.1. É por isso que você pingou ::1 ao solicitar ping localhost.
Quanto ao motivo pelo qual você pode executar ping em ::1, mas não em 127.0.0.1, seu sysctl desativou apenas pings para IPv4, mas não para IPv6. Tanto quanto eu posso dizer, não há sysctl correspondente para desabilitar pings para IPv6, mas você pode desativá-lo no firewall se realmente precisar (é claro que desativá-lo não é recomendado de qualquer maneira).