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 do ping do host local 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 do 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?
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 a pilha de rede estiver funcionando no sistema operacional.localhost:
localhost
é um nome de host, é um tipo de nome de domínio, mas local em sua própria máquina.Esse nome de host, por padrão, aponta para o seu loopback IPv4 e IPv6, que geralmente é
127.0.0.1
ou::1
.localhost
endereço pode ser alterado facilmente editando o arquivo/etc/hosts
.Se o seu sistema usar o serviço
systemd-resolved
, esse serviço manipulará a maneira como o host local é resolvido.De acordo com a documentação de
systemd-resolved
:ping
Quando você tenta executar ping em um nome de host ou domínio, ele solicitará ao sistema operacional que resolva esse nome de host ou nome de domínio. No seu caso, você desativou,
icmpv4
mas o host local é 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 executar ping em um IP e, no outro, em um nome de host que pode assumir vários valores.
Desativar icmpv6
Se você não precisar do IPv6, aconselho a desativá-lo. Dobrará todo o trabalho que você precisará fazer no firewall e na configuração de serviços:
Se você ainda deseja suporte ao IPv6 e deseja evitar
icmpv6
, você pode usarip6tables
:fonte
::1 localhost
nele.ping 127.100.101.102
funcionará).localhost
não são necessariamente necessárias no/etc/hosts
. Por exemplo, resolvido pelo systemd sintetiza registros de recursos DNS paralocalhost
elocalhost.localdomain
.hosts
arquivo completo, mas não tenho::1 localhost
o ubuntu 17.10 em execuçãoO host local possui dois endereços, um endereço IPv6 :: 1 e um endereço IPv4 127.0.0.1.
IPv6 é o protocolo padrão, portanto, :: 1 é sempre preferível a 127.0.0.1. É por isso que você efetuou o ping :: 1 ao solicitar o ping do host local.
Quanto ao motivo pelo qual você pode executar ping :: 1, mas não pode executar o 127.0.0.1, seu sysctl desativou apenas os pings para IPv4, mas não para IPv6. Até onde eu sei, não há sysctl correspondente para desativar pings para IPv6, mas você pode desativá-lo no firewall, se realmente precisar (é claro que desativá-lo não é recomendado).
fonte
/etc/gai.conf
arquivo. Por padrão, ele possui apenas comentários. Se você descomentar asprecedence
linhas contidas nele e fizer as alterações também sugeridas nos comentários, poderá obter a resolução do nome do host para preferir o IPv4 em vez do IPv6 padrão.