Après avoir exécuté ce qui suit pour désactiver les réponses ping:
# sysctl net.ipv4.icmp_echo_ignore_all=1
# sysctl -p
J'obtiens des résultats différents en envoyant une requête 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
Le ping 127.0.0.1 échoue:
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
Pourquoi ces résultats sont-ils différents?
127.0.0.1:
127.0.0.1 est le bouclage par défaut de la plupart des systèmes. Une adresse de bouclage est une adresse utilisée par le système pour valider la pile réseau du système d'exploitation.
L'adresse de bouclage pour IPv4 peut prendre n'importe quelle valeur dans le sous-réseau
127.0.0.0/8
L'adresse de bouclage pour IPv6 peut prendre n'importe quelle valeur dans le sous-réseau,
::1/128
ping
n'importe quelle valeur dans cette plage devrait fonctionner si votre pile réseau fonctionne sur votre système d'exploitation.localhost:
localhost
est un nom d'hôte, c'est une sorte de nom de domaine mais local sur votre propre machine.Ce nom d'hôte pointe par défaut vers votre bouclage IPv4 et IPv6 qui est souvent
127.0.0.1
ou::1
.localhost
l'adresse peut être facilement modifiée en modifiant le fichier/etc/hosts
.Si votre système utilise le service
systemd-resolved
, ce service gérera la façon dont localhost est résolu.Selon la documentation de
systemd-resolved
:ping
Lorsque vous essayez d'envoyer une requête ping à un nom d'hôte ou à un nom de domaine, il demandera au système d'exploitation de résoudre ce nom d'hôte ou ce nom de domaine. Dans votre cas, vous avez désactivé
icmpv4
mais localhost est résolu comme votre bouclage IPv6 et votre bouclage IPv4 mais uniquement votre réponse de bouclage IPv6.La différence est que dans un cas, vous essayez d'envoyer une requête ping à une adresse IP et dans l'autre, vous envoyez une requête ping à un nom d'hôte qui peut prendre plusieurs valeurs.
Désactivez icmpv6
Si vous n'avez pas besoin d'IPv6, je vous conseille de le désactiver. Il doublera tout le travail que vous auriez besoin de faire sur le pare-feu et la configuration des services:
Si vous voulez toujours le support IPv6 et que vous voulez éviter
icmpv6
, vous pouvez utiliserip6tables
:la source
::1 localhost
figurer.ping 127.100.101.102
fonctionnera également).localhost
ne sont pas nécessairement nécessaires dans/etc/hosts
. Par exemple, résolu par systemd synthétise les enregistrements de ressources DNS pourlocalhost
etlocalhost.localdomain
.hosts
fichier complet mais je n'ai pas::1 localhost
exécuté ubuntu 17.10Localhost a deux adresses, une adresse IPv6 :: 1 et une adresse IPv4 127.0.0.1.
IPv6 est le protocole par défaut, donc :: 1 est toujours préféré à 127.0.0.1. C'est pourquoi vous avez pingé :: 1 lorsque vous demandez à ping localhost.
Quant à savoir pourquoi vous pouviez ping :: 1 mais pas ping 127.0.0.1, votre sysctl a seulement désactivé les pings pour IPv4, mais pas pour IPv6. Pour autant que je sache, il n'y a pas de sysctl correspondant pour désactiver les pings pour IPv6, mais vous pouvez le désactiver dans le pare-feu à la place si vous en avez vraiment besoin (bien sûr, le désactiver n'est pas recommandé de toute façon).
la source
/etc/gai.conf
fichier. Par défaut, il n'a que des commentaires. Si vous décommentez lesprecedence
lignes qu'il contient et apportez la modification également suggérée dans les commentaires, vous pouvez obtenir la résolution du nom d'hôte pour préférer IPv4 au lieu de l'IPv6 par défaut.