Nachdem Sie Folgendes ausgeführt haben, um die Ping-Antworten zu deaktivieren:
# sysctl net.ipv4.icmp_echo_ignore_all=1
# sysctl -p
Ich erhalte unterschiedliche Ergebnisse von pinging 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
Ping 127.0.0.1 schlägt fehl:
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
Warum unterscheiden sich diese Ergebnisse?
127.0.0.1:
127.0.0.1 ist das Standard-Loopback der meisten Systeme. Eine Loopback-Adresse ist eine Adresse, die vom System zum Überprüfen des Netzwerkstapels des Betriebssystems verwendet wird.
Die Loopback-Adresse für IPv4 kann einen beliebigen Wert im Subnetz annehmen.
127.0.0.0/8
Die Loopback-Adresse für IPv6 kann einen beliebigen Wert im Subnetz annehmen. Jeder Wert in diesem
::1/128
ping
Bereich sollte funktionieren, wenn Ihr Netzwerkstapel auf Ihrem Betriebssystem ausgeführt wird.localhost:
localhost
ist ein Hostname, eine Art Domänenname, der jedoch lokal für Ihren eigenen Computer ist.Dieser Hostname verweist standardmäßig auf Ihr IPv4- und IPv6-Loopback, bei dem es sich häufig
127.0.0.1
oder handelt::1
.localhost
Die Adresse kann einfach durch Bearbeiten der Datei geändert werden/etc/hosts
.Wenn Ihr System den Dienst verwendet
systemd-resolved
, behandelt dieser Dienst die Art und Weise, wie localhost aufgelöst wird.Nach der Dokumentation von
systemd-resolved
:Ping
Wenn Sie versuchen, einen Host- oder Domainnamen per Ping zu erreichen, fordert das Betriebssystem das Auflösen dieses Host- oder Domainnamens auf. In Ihrem Fall haben Sie deaktiviert,
icmpv4
aber localhost wird als Ihr IPv6-Loopback und Ihr IPv4-Loopback aufgelöst, aber nur als Ihre IPv6-Loopback-Antwort.Der Unterschied besteht in einem Fall darin, dass Sie versuchen, eine IP zu pingen, und in dem anderen Fall, dass Sie einen Hostnamen pingen, der mehrere Werte annehmen kann.
Deaktivieren
Sie icmpv6 Wenn Sie IPv6 nicht benötigen, empfehlen wir Ihnen, es zu deaktivieren. Es wird die gesamte Arbeit verdoppeln, die Sie für die Firewall und die Konfiguration von Diensten benötigen:
Wenn Sie weiterhin IPv6-Unterstützung benötigen und dies vermeiden möchten
icmpv6
, können Sie Folgendes verwendenip6tables
:quelle
::1 localhost
drin sein.ping 127.100.101.102
funktioniert also auch).localhost
sind in nicht unbedingt erforderlich/etc/hosts
. Beispielsweise synthetisiert systemd-resolved DNS-Ressourceneinträge fürlocalhost
undlocalhost.localdomain
.hosts
Datei, aber ich habe::1 localhost
Ubuntu 17.10Localhost verfügt über zwei Adressen, eine IPv6-Adresse :: 1 und eine IPv4-Adresse 127.0.0.1.
IPv6 ist das Standardprotokoll, daher wird :: 1 gegenüber 127.0.0.1 immer bevorzugt. Aus diesem Grund haben Sie :: 1 gepingt, als Sie gefragt haben, ob Sie localhost pingen möchten.
Was den Grund betrifft, warum Sie :: 1 pingen konnten, 127.0.0.1 aber nicht pingen konnten, hat Ihr Sysctl nur Pings für IPv4 deaktiviert, nicht jedoch für IPv6. Soweit ich das beurteilen kann, gibt es kein entsprechendes Sysctl zum Deaktivieren von Pings für IPv6, aber Sie können es stattdessen in der Firewall deaktivieren, wenn Sie es wirklich benötigen (das Deaktivieren wird natürlich sowieso nicht empfohlen).
quelle
/etc/gai.conf
Datei gesteuert werden. Standardmäßig enthält es nur Kommentare. Wenn Sie die darin enthaltenenprecedence
Zeilen auskommentieren und die Änderung vornehmen, die auch in den Kommentaren vorgeschlagen wird, können Sie die Hostnamenauflösung so einstellen, dass IPv4 anstelle des Standard-IPv6 bevorzugt wird.