Яка різниця між ping localhost і ping 127.0.0.1?


31

Виконавши такі дії, щоб відключити відповіді ping:

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

Я отримую різні результати від 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

Помилка Pinging 127.0.0.1:

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

Чому ці результати різні?

Відповіді:


60

У pingкоманді показує адресу її вирішити ім'я на. В цьому випадку рішення про IPv6 - адреса локального хоста, ::1. З іншого боку, 127.0.0.1це IPv4-адреса, тому вона явно pingвикористовує IPv4.

sysctlВи використовували впливає тільки на IPv4 свистить, так що ви отримаєте відповіді на ::1, але не для 127.0.0.1.

Адреса, яку ви отримаєте від вирішення, localhostзалежить від того, як налаштовано DNS для роздільної здатності . localhostймовірно, встановлено /etc/hosts, але теоретично ви можете отримати це з фактичного сервера імен.


Щодо того, як скинути пінг-адреси IPv6, можливо, вам доведеться вивчити ip6tables, оскільки схоже sysctlна IPv6. Або просто відключіть IPv6 повністю, якщо ви не використовуєте його у своїй мережі. (Хоча, звичайно, це не дуже перспективна ідея, але це можливо, якщо ви все одно не використовуєте її.)


2
Для належного функціонування IPv6 вимагає не блокувати ICMP . ;)
zaTricky

3
@zaTricky, питання стосується лише блокування пінгу. Хоча прикро і не дуже корисно, я не думаю, що це взагалі нічого не повинно зламати. Блокування всіх пакетів ICMP було б, очевидно, набагато гірше, але ніхто навіть не припускав цього, про це згадували лише в двох коментарях тут ...
ilkkachu

Зрозуміло, може бути більш конкретним. "IC-ехо-запит", який зазвичай називають ping, необхідний для належного зв’язку через IPv6. Ви можете заблокувати спонтанні небажані пінг-греси для клієнтів, але якщо ви блокуєте вихідний, ви, ймовірно, порушуєте функціональність IPv6. Не допомагає те, що питання, схоже, змінилося з моменту опублікування відповідей.
zaTricky

33

127.0.0.1:
127.0.0.1 - це зворотний зв'язок за замовчуванням більшості системи. Адреса зворотного зв'язку - це адреса, яка використовується системою для перевірки мережевого стеку ОС.
Адреса зворотного зв'язку для IPv4 може приймати будь-яке значення в підмережі 127.0.0.0/8
. Цифрова адреса для IPv6 може приймати будь-яке значення в підмережі, ::1/128
pingбудь-яке значення в цьому діапазоні має працювати, якщо ваш мережевий стек працює на вашій ОС.

localhost:
localhost це ім'я хоста, це свого роду доменне ім'я, але локальне для вашої машини.
Це ім'я хоста за замовчуванням вказує на ваш IPv4 та IPv6 циклічний зворотний зв'язок, який часто 127.0.0.1або ::1.

localhostадресу можна легко змінити, відредагувавши файл /etc/hosts.
Якщо ваша система використовує послугу systemd-resolved, ця послуга обробляє спосіб вирішення localhost.
Відповідно до документаціїsystemd-resolved :

Імена хостів "localhost" і "localhost.localdomain" (а також будь-яке ім'я хоста, що закінчується на ".localhost" або ".localhost.localdomain") визначаються на IP-адреси 127.0.0.1та::1

ping
Коли ви намагаєтеся пінг-імені або доменного імені, він попросить ОС вирішити це ім'я хоста або доменне ім'я. У вашому випадку ви відключили, icmpv4але localhost вирішено як ваш цикл IPv6 і ваш цикл IPv4, але лише ваш відповідь із петлею IPv6.
Різниця полягає в тому, що в одному випадку ви намагаєтеся ввімкнути IP-адресу, а в іншому - введіть ім'я хоста, яке може приймати кілька значень.

Вимкнути icmpv6
Якщо вам не потрібен IPv6, раджу відключити його. Це подвоїть усю роботу, яку вам потрібно буде виконати над брандмауером та налаштуванням служб:

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

Якщо ви все ще хочете підтримати IPv6 і хочете уникати icmpv6, ви можете скористатися ip6tables:

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

2
З вашим файлом хостів щось не так. Це також повинно бути ::1 localhostв ньому.
Майкл Хемптон

2
Побічна примітка: пам’ятайте, ніж у IPv4, вся мережа 127.0.0.0/8 - це петлі для зворотного зв’язку (так ping 127.100.101.102буде добре).
jjmontes

1
Подані записи localhostне обов'язково потрібні в /etc/hosts. Наприклад, системне вирішення синтезує записи DNS-ресурсів для localhostта localhost.localdomain.
Йохан Мірен

@MichaelHampton Це не повний hostsфайл, але у мене немає ::1 localhostзапущеного ubuntu 17.10
Kiwy

2
"Підмережа" :: 1/128 відповідає лише одному IP, подібно до того, що 127.0.0.1/32 вирішує лише один IP.
zaTricky

9

Localhost має дві адреси, IPv6 адресу :: 1 та IPv4 адресу 127.0.0.1.

IPv6 - протокол за замовчуванням, тому :: 1 завжди надається перевагу над 127.0.0.1. Ось чому ви pinging :: 1, коли просили ping localhost.

Що стосується того, чому ви могли ping :: 1, але не могли ping 127.0.0.1, ваш sysctl має лише відключені pings для IPv4, але не для IPv6. Наскільки я можу сказати, немає відповідного sysctl для відключення пінгів для IPv6, але ви можете вимкнути його в брандмауері, якщо вам це дійсно потрібно (звичайно відключати його все одно не рекомендується).


5
Вимкнути пінг для IPv6 не рекомендується, коли він перерве з'єднання, люди, що підключаються з адреси teredo, більше не можуть дістатися до машини (оскільки вона використовує ping для вибору найближчого тунельного тунельного апарату
teredo

1
Перевагу роздільної здатності імен для IPv6 проти IPv4 можна керувати /etc/gai.confфайлом. За замовчуванням у нього є лише коментарі. Якщо відміняти precedenceрядки в ньому та внести зміни, також запропоновані в коментарях, ви можете отримати дозвіл імені хоста, щоб віддати перевагу IPv4 замість IPv6 за замовчуванням.
telcoM

@telcoM Так, ви можете це зробити. Якщо ви все-таки зробите, це гарна ідея дати чітке попередження для тих, хто може користуватися цією машиною, оскільки зміна пріоритету вводить несподівану поведінку.
Майкл Хемптон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.