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.