Setelah menjalankan yang berikut untuk menonaktifkan balasan ping:
# sysctl net.ipv4.icmp_echo_ignore_all=1
# sysctl -p
Saya mendapatkan hasil berbeda dari melakukan ping 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
Gagal melakukan ping 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
Mengapa hasil ini berbeda?
127.0.0.1:
127.0.0.1 adalah loopback default dari kebanyakan sistem. Alamat loopback adalah alamat yang digunakan oleh sistem untuk memvalidasi tumpukan jaringan OS.
Alamat loopback untuk IPv4 dapat mengambil nilai apa pun di subnet
127.0.0.0/8
Alamat loopback untuk IPv6 dapat mengambil nilai apa pun di subnet
::1/128
ping
nilai apa pun dalam rentang tersebut harus berfungsi jika tumpukan jaringan Anda berfungsi pada OS Anda.localhost:
localhost
adalah nama host, ini semacam nama domain tetapi lokal untuk mesin Anda sendiri.Nama host ini secara default menunjuk ke loopback IPv4 dan IPv6 Anda yang sering
127.0.0.1
atau::1
.localhost
alamat dapat diubah dengan mudah dengan mengedit file/etc/hosts
.Jika sistem Anda menggunakan layanan
systemd-resolved
, layanan ini akan menangani cara localhost diselesaikan.Menurut dokumentasi
systemd-resolved
:ping
Ketika Anda mencoba melakukan ping nama host atau nama domain, OS akan meminta OS untuk menyelesaikan nama host atau nama domain ini. Dalam kasus Anda, Anda dinonaktifkan
icmpv4
tetapi localhost diselesaikan sebagai loopback IPv6 dan loopback IPv6, tetapi hanya jawaban loopback IPv6.Perbedaannya adalah dalam satu kasus Anda mencoba untuk melakukan ping IP dan dalam kasus lain Anda melakukan ping nama host yang bisa mengambil beberapa nilai.
Nonaktifkan icmpv6
Jika Anda tidak membutuhkan IPv6, saya sarankan Anda untuk menonaktifkannya. Ini akan menggandakan semua pekerjaan yang perlu Anda lakukan pada firewall dan mengkonfigurasi layanan:
Jika Anda masih menginginkan dukungan IPv6 dan ingin menghindari
icmpv6
, Anda dapat menggunakanip6tables
:sumber
::1 localhost
di dalamnya.ping 127.100.101.102
akan bekerja juga).localhost
belum tentu diperlukan di/etc/hosts
. Sebagai contoh, systemd-resolved mensintesis catatan sumber daya DNS untuklocalhost
danlocalhost.localdomain
.hosts
file yang lengkap tapi saya tidak::1 localhost
menjalankan ubuntu 17.10Localhost memiliki dua alamat, alamat IPv6 :: 1 dan alamat IPv4 127.0.0.1.
IPv6 adalah protokol default, jadi :: 1 selalu lebih disukai daripada 127.0.0.1. Inilah sebabnya mengapa Anda telah melakukan ping :: 1 ketika meminta untuk melakukan ping localhost.
Adapun mengapa Anda bisa melakukan ping :: 1 tetapi tidak bisa melakukan ping 127.0.0.1, sysctl Anda hanya menonaktifkan ping untuk IPv4, tetapi tidak untuk IPv6. Sejauh yang saya tahu, tidak ada sysctl yang sesuai untuk menonaktifkan ping untuk IPv6, tetapi Anda dapat menonaktifkannya di firewall jika Anda benar-benar perlu (tentu saja menonaktifkan itu tidak dianjurkan pula).
sumber
/etc/gai.conf
file. Secara default, ini hanya memiliki komentar. Jika Anda menghapus tanda komentarprecedence
baris di dalamnya dan membuat perubahan yang juga disarankan di komentar, Anda bisa mendapatkan resolusi nama host untuk lebih memilih IPv4 daripada IPv6 default.