Jaka jest różnica między ping localhost a ping 127.0.0.1?


31

Po wykonaniu następujących czynności, aby wyłączyć odpowiedzi ping:

# sysctl net.ipv4.icmp_echo_ignore_all=1
# sysctl -p

Otrzymuję różne wyniki z pingowania 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

Pingowanie 127.0.0.1 kończy się niepowodzeniem:

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

Dlaczego te wyniki są różne?

Odpowiedzi:


60

Do pingpodaje komunikat adres to rozwiązane nazwę na. W tym przypadku jest rozwiązany na adres IPv6 localhost ::1. Z drugiej strony 127.0.0.1jest adresem IPv4, więc wyraźnie pingkorzysta z IPv4.

sysctlTylko używany wpływa pingi IPv4, więc można uzyskać odpowiedzi na ::1, ale nie 127.0.0.1.

Adres uzyskiwany z rozwiązania localhostzależy od konfiguracji serwera DNS. localhostjest prawdopodobnie ustawiony /etc/hosts, ale teoretycznie można go uzyskać z rzeczywistego serwera nazw.


Jeśli chodzi o upuszczanie pingów IPv6, być może trzeba zajrzeć ip6tables, ponieważ nie wydaje się, że jest podobny w sysctlprzypadku IPv6. Lub po prostu całkowicie wyłącz IPv6, jeśli nie używasz go w sieci. (Chociaż oczywiście nie jest to zbyt przyszłościowy pomysł, ale wykonalny, jeśli i tak go nie używasz.)


2
IPv6 wymaga, aby ICMP nie był blokowany, aby działał poprawnie. ;)
zaTricky

3
@zaTricky, pytanie dotyczyło tylko blokowania ping. Choć jest wstrętny i niezbyt przydatny, nie sądzę, że powinien on w ogóle coś psować. Zablokowanie wszystkich pakietów ICMP byłoby oczywiście znacznie gorsze, ale nikt nawet nie sugerował, że zostało to wspomniane tylko w dwóch komentarzach tutaj ...
ilkkachu

To prawda, może być bardziej szczegółowe. „Żądanie echa ICMP”, powszechnie określane jako ping, jest wymagane do poprawnej komunikacji przez IPv6. Państwo może blokować niechciane spontaniczne przedostała ping klientów - ale jeśli zablokować wychodzące jesteś prawdopodobnie łamiąc funkcjonalności IPv6. Nie pomaga to, że pytanie zmieniło się od czasu opublikowania odpowiedzi.
zaTricky

33

127.0.0.1:
127.0.0.1 jest domyślnym sprzężeniem zwrotnym większości systemów. Adres sprzężenia zwrotnego to adres używany przez system do sprawdzania poprawności stosu sieciowego systemu operacyjnego.
Adres pętli zwrotnej dla IPv4 może przyjmować dowolną wartość w podsieci 127.0.0.0/8
Adres pętli zwrotnej dla IPv6 może przyjmować dowolną wartość w podsieci, ::1/128
pingkażda wartość w tym zakresie powinna działać, jeśli stos sieci działa na systemie operacyjnym.

localhost:
localhost to nazwa hosta, to rodzaj nazwy domeny, ale lokalnej dla twojego komputera.
Ta nazwa hosta domyślnie wskazuje sprzężenie zwrotne IPv4 i IPv6, które często 127.0.0.1lub ::1.

localhostadres można łatwo zmienić edytując plik /etc/hosts.
Jeśli twój system korzysta z usługi systemd-resolved, ta usługa będzie obsługiwać sposób rozwiązania localhost.
Zgodnie z dokumentacjąsystemd-resolved :

Nazwy hostów „localhost” i „localhost.localdomain” (jak również każda nazwa hosta kończąca się na „.localhost” lub „.localhost.localdomain”) są tłumaczone na adresy IP 127.0.0.1i::1

ping
Podczas próby pingowania nazwy hosta lub nazwy domeny poprosi system operacyjny o rozpoznanie tej nazwy hosta lub nazwy domeny. W twoim przypadku wyłączyłeś, icmpv4ale localhost jest rozpoznawany jako pętla zwrotna IPv6 i pętla zwrotna IPv4, ale tylko odpowiedź pętli zwrotnej IPv6.
Różnica polega na tym, że w jednym przypadku próbujesz wysłać polecenie ping do adresu IP, a w innym przypadku pingujesz nazwę hosta, która może przyjąć kilka wartości.

Wyłącz icmpv6
Jeśli nie potrzebujesz IPv6, radzę go wyłączyć. Podwoi to całą pracę, którą należy wykonać przy zaporze ogniowej i konfigurowaniu usług:

sysctl -w net.ipv6.conf.all.disable_ipv6=0

Jeśli nadal chcesz obsługiwać IPv6 i chcesz tego uniknąć icmpv6, możesz użyć ip6tables:

ip6tables -A INPUT -p icmpv6 --icmpv6-type echo-request -j DROP

2
Coś jest nie tak z plikiem hostów. Powinien też ::1 localhostw nim być.
Michael Hampton

2
Uwaga dodatkowa: pamiętaj, że w IPv4 cała sieć 127.0.0.0/8 to adresy pętli zwrotnej (więc też ping 127.100.101.102będzie działać).
jjmontes

1
Wpisy do localhostniekoniecznie są potrzebne w /etc/hosts. Na przykład systemd-resolved syntetyzuje rekordy zasobów DNS dla localhosti localhost.localdomain.
Johan Myréen

@MichaelHampton To nie jest kompletny hostsplik, ale nie mam ::1 localhostUbuntu 17.10
Kiwy

2
„Podsieć” :: 1/128 odpowiada tylko jednemu adresowi IP, podobnie jak 127.0.0.1/32 dotyczy tylko tego jednego adresu IP.
zaTricky

9

Host lokalny ma dwa adresy, adres IPv6 :: 1 i adres IPv4 127.0.0.1.

IPv6 jest domyślnym protokołem, więc :: 1 zawsze jest preferowane zamiast 127.0.0.1. Dlatego pingowałeś :: 1, gdy pytasz o ping localhost.

Jeśli chodzi o to, dlaczego możesz pingować :: 1, ale nie możesz pingować 127.0.0.1, twój sysctl wyłączył pingowanie tylko dla IPv4, ale nie dla IPv6. O ile mogę stwierdzić, nie ma odpowiedniego sysctl do wyłączenia pingów dla IPv6, ale możesz je wyłączyć w firewallu, jeśli naprawdę potrzebujesz (oczywiście wyłączenie go i tak nie jest zalecane).


5
Wyłączenie pingi dla IPv6 jest źle poinformowani co to przerwać łączność, osoby łączące z teredo adres nie może dotrzeć do urządzenia (ponieważ wykorzystuje ping, aby wybrać najbliższy anycast maszynę teredo tunelu)
Ferrybig

1
Za pomocą /etc/gai.confpliku można kontrolować preferencje rozpoznawania nazw dla IPv6 vs. IPv4 . Domyślnie ma tylko komentarze. Jeśli odkomentujesz zawarte w nim precedencewiersze i dokonasz zmiany sugerowanej także w komentarzach, możesz uzyskać rozpoznawanie nazw hostów zamiast IPv4 zamiast domyślnego IPv6.
telcoM

@telcoM Tak, możesz to zrobić. Jeśli to zrobisz, dobrym pomysłem jest dawanie wyraźnych ostrzeżeń każdemu, kto może korzystać z tego komputera, ponieważ zmiana pierwszeństwa powoduje nieoczekiwane zachowanie.
Michael Hampton
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.