Sự khác biệt giữa ping localhost và ping 127.0.0.1 là gì?


31

Sau khi thực hiện các thao tác sau để tắt phản hồi ping:

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

Tôi nhận được các kết quả khác nhau từ ping localhost so với 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

Pinging 127.0.0.1 không thành công:

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

Tại sao những kết quả này khác nhau?

Câu trả lời:


60

Các pingchương trình lệnh địa chỉ nó giải quyết được tên. Trong trường hợp này, nó được phân giải thành địa chỉ IPv6 localhost ::1. Mặt khác, 127.0.0.1là một địa chỉ IPv4, do đó, nó pingsử dụng rõ ràng IPv4.

Việc sysctlbạn đã sử dụng chỉ ảnh hưởng đến ping ping, do đó bạn nhận được trả lời cho::1 , nhưng không phải cho 127.0.0.1.

Địa chỉ bạn nhận được từ việc giải quyết localhosttùy thuộc vào cách DNS của bạn được thiết lập trình phân giải. localhostcó thể được thiết lập /etc/hosts, nhưng trên lý thuyết bạn có thể lấy nó từ một máy chủ tên thực tế.


Về cách loại bỏ ping ping, bạn có thể cần xem xét ip6tables, vì dường như không có sự tương tự sysctlđối với IPv6. Hoặc chỉ vô hiệu hóa hoàn toàn IPv6, nếu bạn không sử dụng nó trong mạng của mình. (Mặc dù tất nhiên đó không phải là một ý tưởng rất có triển vọng, nhưng có thể thực hiện được nếu bạn hiện không sử dụng nó.)


2
IPv6 yêu cầu ICMP không bị chặn để hoạt động đúng. ;)
zaTricky 16/03/18

3
@zaTricky, câu hỏi chỉ đề cập đến việc chặn ping. Mặc dù đáng ghét và không hữu ích lắm, tôi không nghĩ rằng nó sẽ phá vỡ mọi thứ nói chung. Chặn tất cả các gói ICMP rõ ràng sẽ tồi tệ hơn nhiều, nhưng thậm chí không ai cho rằng, nó chỉ được đề cập trong hai bình luận ở đây ...
ilkkachu 16/03/18

Cấp, có thể được cụ thể hơn. "Yêu cầu tiếng vang ICMP", thường được gọi là ping, được yêu cầu để liên lạc đúng cách qua IPv6. Bạn có thể chặn các thao tác ping không mong muốn tự phát cho khách hàng - nhưng nếu bạn chặn bên ngoài thì có lẽ bạn đang phá vỡ chức năng IPv6. Không có ích gì khi câu hỏi dường như đã thay đổi kể từ khi câu trả lời được đăng.
zaTricky

33

127.0.0.1:
127.0.0.1 là loopback mặc định của hầu hết hệ thống. Địa chỉ loopback là một địa chỉ được sử dụng bởi hệ thống để xác thực ngăn xếp mạng của HĐH.
Địa chỉ loopback cho IPv4 có thể nhận bất kỳ giá trị nào trong mạng con 127.0.0.0/8
Địa chỉ loopback cho IPv6 có thể lấy bất kỳ giá trị nào trong mạng con::1/128
ping mọi giá trị trong phạm vi đó sẽ hoạt động nếu ngăn xếp mạng của bạn hoạt động trên HĐH.

localhost:
localhost là tên máy chủ, đây là một loại tên miền nhưng cục bộ cho máy của riêng bạn.
Tên máy chủ này theo mặc định trỏ đến vòng lặp IPv4 và IPv6 thường là 127.0.0.1hoặc ::1.

localhostđịa chỉ có thể được thay đổi dễ dàng bằng cách chỉnh sửa tập tin /etc/hosts.
Nếu hệ thống của bạn sử dụng dịch vụ systemd-resolved, dịch vụ này sẽ xử lý cách giải quyết localhost.
Theo tài liệu củasystemd-resolved :

Tên máy chủ "localhost" và "localhost.localdomain" (cũng như bất kỳ tên máy chủ nào kết thúc bằng ".localhost" hoặc ".localhost.localdomain") được phân giải thành địa chỉ IP 127.0.0.1::1

ping
Khi bạn cố gắng ping tên máy chủ hoặc tên miền, nó sẽ yêu cầu HĐH giải quyết tên máy chủ hoặc tên miền này. Trong trường hợp của bạn, bạn đã vô hiệu hóa icmpv4nhưng localhost được giải quyết dưới dạng vòng lặp IPv6 và vòng lặp IPv4 của bạn nhưng chỉ có câu trả lời vòng lặp IPv6 của bạn.
Sự khác biệt là trong một trường hợp bạn đang cố gắng ping một IP và trong trường hợp khác, bạn ping một tên máy chủ có thể mất một vài giá trị.

Vô hiệu hóa icmpv6
Nếu bạn không cần IPv6, tôi khuyên bạn nên tắt nó. Nó sẽ tăng gấp đôi tất cả công việc bạn cần làm trên tường lửa và định cấu hình dịch vụ:

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

Nếu bạn vẫn muốn hỗ trợ IPv6 và muốn tránh icmpv6, bạn có thể sử dụng ip6tables:

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

2
Có gì đó không ổn với tập tin máy chủ của bạn. Nó cũng nên có ::1 localhosttrong đó.
Michael Hampton

2
Lưu ý bên lề: hãy nhớ hơn trong IPv4, toàn bộ mạng 127.0.0.0/8 là các địa chỉ loopback (vì vậy ping 127.100.101.102cũng sẽ hoạt động tốt).
jjmontes

1
Các mục nhập localhostkhông nhất thiết phải có trong /etc/hosts. Ví dụ, systemd-phân giải tổng hợp các bản ghi tài nguyên DNS cho localhostlocalhost.localdomain.
Johan Myréen

@MichaelHampton Đây không phải là hoststập tin hoàn chỉnh nhưng tôi không ::1 localhostchạy Ubuntu 17.10
Kiwy 15/03/18

2
"Mạng con" :: 1/128 chỉ tương ứng với một IP, giống như 127.0.0.1 / 32 chỉ giải quyết với một IP đó.
zaTricky 16/03/18

9

Localhost có hai địa chỉ, một địa chỉ IPv6 :: 1 và địa chỉ IPv4 127.0.0.1.

IPv6 là giao thức mặc định, vì vậy :: 1 luôn được ưu tiên hơn 127.0.0.1. Đây là lý do tại sao bạn đã ping: 1 khi yêu cầu ping localhost.

Về lý do tại sao bạn có thể ping :: 1 nhưng không thể ping 127.0.0.1, sysctl của bạn chỉ vô hiệu hóa ping cho IPv4, nhưng không cho IPv6. Theo như tôi có thể nói, không có sysctl tương ứng để vô hiệu hóa ping cho IPv6, nhưng bạn có thể vô hiệu hóa nó trong tường lửa thay vào đó nếu bạn thực sự cần (tất nhiên là không nên tắt nó).


5
Việc vô hiệu hóa ping cho IPv6 không được khuyến khích khi nó phá vỡ kết nối, những người kết nối từ địa chỉ teredo không thể truy cập vào máy nữa (vì nó sử dụng ping để chọn máy đường hầm teredo gần nhất)
Ferrybig

1
Tùy chọn phân giải tên cho IPv6 so với IPv4 có thể được kiểm soát bằng /etc/gai.conftệp. Theo mặc định, nó chỉ có ý kiến. Nếu bạn bỏ ghi chú các precedencedòng trong đó và thực hiện thay đổi cũng được đề xuất trong các nhận xét, bạn có thể nhận được độ phân giải tên máy chủ để thích IPv4 thay vì IPv6 mặc định.
telcoM

@telcoM Vâng, bạn có thể làm điều đó. Tuy nhiên, nếu bạn làm vậy, bạn nên đưa ra những cảnh báo nổi bật cho bất kỳ ai có thể sử dụng máy đó, vì việc thay đổi quyền ưu tiên sẽ đưa ra hành vi bất ngờ.
Michael Hampton
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.