15%

Hemat 15% di Semua Layanan Hosting

Uji kemampuanmu dan dapatkan Diskon pada paket hosting apa saja

Gunakan kode:

Skills
Memulai
07.10.2024

Cara Mengedit File Hosts di Linux: Panduan Teknis Lengkap

File `/etc/hosts` di Linux adalah tabel pencarian statis yang memetakan nama host ke alamat IP, diproses oleh sistem operasi *sebelum* kueri DNS apa pun dikirim. Dengan menambahkan atau memodifikasi entri dalam file ini, Anda dapat mengganti resolusi DNS untuk domain tertentu pada basis per-mesin — tanpa menyentuh server DNS, router, atau pengaturan registrar Anda.

Mekanisme ini dikendalikan oleh Name Service Switch (NSS), dikonfigurasi di `/etc/nsswitch.conf`. Baris `hosts:` default biasanya berbunyi `files dns`, artinya sistem berkonsultasi dengan `/etc/hosts` terlebih dahulu, kemudian beralih ke resolver DNS yang didefinisikan di `/etc/resolv.conf`. Memahami urutan ini sangat penting: jika nama host ada di `/etc/hosts`, kueri DNS tidak pernah meninggalkan mesin.

Apa Itu File Hosts dan Cara Kerjanya

File `/etc/hosts` mendahului sistem DNS modern sepenuhnya. Pada era ARPANET awal, satu file `HOSTS.TXT` yang dikelola oleh Stanford Research Institute didistribusikan ke setiap mesin yang terhubung ke jaringan. `/etc/hosts` saat ini adalah keturunan langsung dari konsep tersebut — lapisan penggantian lokal yang otoritatif yang masih dihormati oleh setiap sistem operasi yang sesuai dengan POSIX.

Setiap baris non-komentar dalam file mengikuti sintaks ini:

“`

IP_address canonical_hostname [alias1] [alias2] …

“`

  • Baris yang dimulai dengan `#` adalah komentar dan diabaikan.
  • Spasi putih (spasi atau tab) memisahkan bidang.
  • Satu alamat IP dapat dipetakan ke beberapa nama host pada baris yang sama.
  • Entri IPv4 dan IPv6 dapat berdampingan dalam file yang sama.

File `/etc/hosts` default minimal pada instalasi Linux baru terlihat seperti ini:

“`

127.0.0.1 localhost

127.0.1.1 myhostname.local myhostname

::1 localhost ip6-localhost ip6-loopback

ff02::1 ip6-allnodes

ff02::2 ip6-allrouters

“`

Entri `127.0.1.1` khusus untuk Debian/Ubuntu dan memetakan FQDN mesin ke alamat loopback ketika IP statis tidak ditetapkan. Menghapusnya dapat merusak alat seperti `sudo` yang bergantung pada resolusi nama host.

Mengapa Anda Perlu Mengedit File Hosts

Kasus penggunaan mencakup dari kenyamanan pengembang sederhana hingga tugas infrastruktur yang kritis terhadap keamanan:

Lingkungan pengembangan dan staging lokal

Arahkan domain produksi (misalnya, `myapp.com`) ke `127.0.0.1` atau IP LAN saat membangun atau menguji, tanpa memodifikasi catatan DNS langsung. Ini adalah kasus penggunaan paling umum bagi pengembang yang menjalankan lingkungan VPS Hosting secara lokal atau di server jarak jauh.

Pengujian aplikasi multi-server

Saat memigrasikan situs ke server baru, arahkan domain ke IP server baru hanya di mesin lokal Anda. Anda dapat memverifikasi bahwa lingkungan baru berfungsi penuh sebelum memperbarui catatan DNS publik — menghilangkan risiko downtime.

Memblokir domain berbahaya atau yang tidak diinginkan

Mengalihkan domain ke `0.0.0.0` (lebih disukai daripada `127.0.0.1` untuk pemblokiran) menyebabkan koneksi gagal segera tanpa menunggu koneksi yang ditolak di localhost. Proyek seperti `StevenBlack/hosts` mengumpulkan jutaan domain iklan, pelacak, dan malware ke dalam satu daftar blokir berformat hosts.

Jaringan container dan microservice

Di lingkungan Docker atau LXC tanpa resolver DNS khusus, entri `/etc/hosts` di dalam container (atau di host) menyediakan penemuan layanan yang ringan. Flag `–add-host` Docker menyuntikkan entri langsung ke `/etc/hosts` container saat runtime.

Mengganti split-horizon DNS

Di jaringan perusahaan di mana DNS internal dan eksternal mengembalikan catatan berbeda untuk nama host yang sama, entri file hosts memberi Anda kontrol deterministik pada mesin tertentu.

Pengujian validasi sertifikat SSL

Saat menguji deployment SSL Certificates baru di server staging, mengarahkan domain ke IP staging di `/etc/hosts` memungkinkan Anda memverifikasi handshake TLS penuh, rantai sertifikat, dan perilaku pengalihan HTTPS sebelum go-live.

Langkah demi Langkah: Cara Mengedit File Hosts di Linux

Langkah 1: Buka Terminal

Akses emulator terminal. Pada distribusi desktop, pintasan `Ctrl + Alt + T` berfungsi di GNOME, KDE, dan XFCE. Di server tanpa antarmuka grafis, Anda sudah berada dalam sesi shell melalui SSH.

Konfirmasi pengguna saat ini dan tingkat hak akses Anda:

“`bash

whoami

id

“`

Langkah 2: Buat Cadangan File Hosts Saat Ini

Selalu buat cadangan dengan cap waktu sebelum memodifikasi file sistem apa pun. `hosts.backup` generik dapat ditimpa secara tidak sengaja; cap waktu tidak ambigu:

“`bash

sudo cp /etc/hosts /etc/hosts.bak.$(date +%Y%m%d_%H%M%S)

“`

Verifikasi bahwa cadangan telah dibuat:

“`bash

ls -lh /etc/hosts*

“`

Langkah 3: Periksa Izin dan Kepemilikan File

Sebelum mengedit, konfirmasi kepemilikan dan izin file saat ini:

“`bash

ls -la /etc/hosts

“`

Output yang diharapkan:

“`

-rw-r–r– 1 root root 221 Jan 10 09:00 /etc/hosts

“`

File harus dimiliki oleh `root:root` dengan izin `644`. Jika izin berbeda, selidiki sebelum melanjutkan — `/etc/hosts` yang dapat ditulis oleh semua orang adalah kerentanan keamanan.

Langkah 4: Buka File Hosts dengan Editor Teks

Menggunakan nano (direkomendasikan untuk sebagian besar pengguna):

“`bash

sudo nano /etc/hosts

“`

Menggunakan vim:

“`bash

sudo vim /etc/hosts

“`

Menggunakan gedit (GUI, desktop GNOME):

“`bash

sudo gedit /etc/hosts

“`

Menggunakan tee untuk penambahan non-interaktif/terskrip (tidak memerlukan editor):

“`bash

echo "192.168.1.50 staging.myapp.com" | sudo tee -a /etc/hosts

“`

Flag `-a` menambahkan ke file daripada menimpanya. Ini adalah metode paling aman untuk skrip otomasi dan playbook Ansible.

Langkah 5: Tambah, Modifikasi, atau Hapus Entri

Navigasikan ke akhir file dan tambahkan entri Anda. Ikuti aturan pemformatan ini dengan ketat:

  • Satu entri per baris.
  • Alamat IP terlebih dahulu, kemudian satu atau lebih nama host yang dipisahkan oleh spasi putih.
  • Gunakan `#` sebaris untuk memberi anotasi pada entri sebagai referensi di masa mendatang.

Alihkan domain ke server pengembangan lokal:

“`

127.0.0.1 myproject.local # Local dev – remove before production

“`

Arahkan domain ke server staging jarak jauh:

“`

203.0.113.45 staging.myapp.com # Staging server – pre-DNS cutover

“`

Blokir domain (metode yang disukai menggunakan 0.0.0.0):

“`

0.0.0.0 ads.example.com

0.0.0.0 tracker.analytics-provider.com

“`

Tambahkan entri IPv6:

“`

::1 ipv6-service.local

“`

Petakan beberapa alias ke satu IP (berguna untuk virtual host):

“`

127.0.0.1 app.local api.local static.local

“`

Langkah 6: Simpan dan Keluar dari Editor

Di nano:

  • Simpan: `Ctrl + O`, kemudian `Enter` untuk mengonfirmasi nama file.
  • Keluar: `Ctrl + X`.

Di vim:

  • Kembali ke mode normal: `Esc`
  • Simpan dan keluar: `:wq` kemudian `Enter`
  • Keluar tanpa menyimpan: `:q!` kemudian `Enter`

Langkah 7: Verifikasi Isi File

Konfirmasi bahwa entri Anda telah ditulis dengan benar:

“`bash

cat /etc/hosts

“`

Untuk file hosts yang besar, gunakan `grep` untuk menemukan entri tertentu:

“`bash

grep "myproject.local" /etc/hosts

“`

Periksa kesalahan sintaks — entri dengan IP yang hilang atau alamat yang salah format akan diabaikan secara diam-diam oleh resolver:

“`bash

sudo python3 -c "

with open('/etc/hosts') as f:

for i, line in enumerate(f, 1):

line = line.strip()

if line and not line.startswith('#'):

parts = line.split()

if len(parts) < 2:

print(f'Line {i} may be malformed: {line}')

"

“`

Langkah 8: Flush Cache DNS

Perubahan pada `/etc/hosts` langsung berlaku untuk koneksi baru di sebagian besar sistem. Namun, jika sistem Anda menjalankan daemon caching DNS lokal, Anda harus mem-flush cache-nya untuk melihat perubahan.

systemd-resolved (Ubuntu 18.04+, sebagian besar distro modern):

“`bash

sudo systemd-resolve –flush-caches

sudo systemd-resolve –statistics # Verify cache was cleared

“`

nscd (Name Service Cache Daemon):

“`bash

sudo systemctl restart nscd

“`

dnsmasq:

“`bash

sudo systemctl restart dnsmasq

“`

NetworkManager dengan plugin dnsmasq:

“`bash

sudo systemctl restart NetworkManager

“`

Browser mempertahankan cache DNS mereka sendiri secara independen. Chrome dan Firefox menyimpan catatan DNS hingga 60 detik. Untuk menghapus cache DNS internal Chrome, navigasikan ke `chrome://net-internals/#dns` dan klik “Clear host cache.”

Langkah 9: Uji Resolusi

Gunakan `getent` daripada `ping` untuk pengujian rantai resolusi NSS yang lebih andal:

“`bash

getent hosts myproject.local

“`

`getent` mengkueri Name Service Switch sistem secara langsung, menghormati `/etc/nsswitch.conf`, dan akan menunjukkan kepada Anda persis apa yang diselesaikan oleh OS — bukan apa yang dikembalikan oleh server DNS. Ini adalah pengujian definitif.

Selain itu:

“`bash

ping -c 3 myproject.local

“`

“`bash

curl -v http://myproject.local

“`

Jika `getent` mengembalikan IP yang benar tetapi `ping` tidak, masalahnya terletak pada tumpukan jaringan atau firewall, bukan pada file hosts.

File Hosts vs. DNS: Kapan Menggunakan Masing-masing

Kriteria`/etc/hosts`Server DNS
CakupanHanya satu mesinSeluruh jaringan atau global
Penundaan propagasiInstanMenit hingga 48 jam (bergantung pada TTL)
Memerlukan jaringanTidakYa (untuk DNS eksternal)
SkalabilitasBuruk (manual, per-host)Sangat baik (dikelola secara terpusat)
Mendukung wildcardTidakYa (misalnya, `*.example.com`)
Bertahan setelah rebootYa (file tetap ada)Ya (dikelola server)
Jejak auditHanya melalui version controlBergantung pada penyedia DNS
Terbaik untukPenggantian dev/test, pemblokiranInfrastruktur produksi
Dukungan IPv6YaYa
Ramah otomasiSedang (pengeditan file)Tinggi (berbasis API)

Untuk tim yang mengelola beberapa server — seperti armada Dedicated Servers — manajemen DNS terpusat selalu lebih unggul daripada mendistribusikan perubahan file hosts secara manual. File hosts adalah alat per-mesin, bukan alat infrastruktur.

Teknik Lanjutan dan Kasus Tepi

Menggunakan File Hosts dengan Virtual Host di Apache dan Nginx

Saat menjalankan beberapa situs web di satu server menggunakan virtual hosting, file hosts di *mesin klien* Anda harus mengarahkan domain ke IP server. Server web kemudian menggunakan header HTTP `Host:` untuk merutekan permintaan ke virtual host yang benar. Entri file hosts dan konfigurasi virtual host server harus menggunakan nama host yang sama.

Misalnya, jika Anda memiliki virtual host Apache yang dikonfigurasi untuk `myapp.local` di VPS dengan cPanel, tambahkan IP server ke file hosts lokal Anda:

“`

198.51.100.10 myapp.local

“`

Kemudian akses `http://myapp.local` di browser Anda. Apache membaca header `Host: myapp.local` dan menyajikan situs yang benar.

Melindungi File Hosts dari Modifikasi yang Tidak Sah

Malware sering menargetkan `/etc/hosts` untuk mengalihkan domain yang sah (misalnya, situs perbankan) ke server phishing. Gunakan `chattr` untuk membuat file tidak dapat diubah:

“`bash

sudo chattr +i /etc/hosts

“`

Ini mencegah modifikasi bahkan oleh root hingga flag immutable dihapus secara eksplisit:

“`bash

sudo chattr -i /etc/hosts # Remove immutability to edit

“`

Periksa atributnya:

“`bash

lsattr /etc/hosts

“`

Mengontrol Versi File Hosts Anda

Untuk tim atau lingkungan pengembangan yang kompleks, lacak perubahan `/etc/hosts` dengan Git:

“`bash

sudo cp /etc/hosts ~/dotfiles/hosts

cd ~/dotfiles && git add hosts && git commit -m "Add staging.myapp.com entry"

“`

Alat seperti etckeeper secara otomatis mengontrol versi seluruh direktori `/etc` menggunakan Git atau backend VCS lainnya, menyediakan jejak audit lengkap dari perubahan file sistem.

File Hosts di Docker dan Kubernetes

Di Docker, Anda dapat menyuntikkan entri file hosts saat container dimulai tanpa memodifikasi sistem host:

“`bash

docker run –add-host=myservice.local:192.168.1.100 myimage

“`

Di Kubernetes, `hostAliases` dalam spesifikasi Pod mencapai hasil yang sama:

“`yaml

spec:

hostAliases:

  • ip: "192.168.1.100"

hostnames:

  • "myservice.local"

“`

Pendekatan ini lebih disukai daripada memodifikasi `/etc/hosts` host saat bekerja di lingkungan yang dikontainerisasi.

Perdebatan Pemblokiran `0.0.0.0` vs. `127.0.0.1`

Kedua alamat digunakan untuk memblokir domain, tetapi berperilaku berbeda:

  • `127.0.0.1`: Merutekan koneksi ke antarmuka loopback lokal. Jika tidak ada yang mendengarkan di port 80/443 secara lokal, koneksi ditolak — tetapi OS masih mencoba untuk membangunnya, menyebabkan penundaan singkat.
  • `0.0.0.0`: Mewakili tujuan yang tidak valid di sebagian besar sistem. Koneksi gagal segera tanpa mencoba handshake TCP, menghasilkan pemuatan halaman yang lebih cepat saat memblokir sejumlah besar domain iklan/pelacak.

Untuk kasus penggunaan daftar blokir, `0.0.0.0` adalah pilihan yang secara teknis lebih unggul.

Kesalahan Umum dan Pemecahan Masalah

Perubahan tidak berlaku setelah pengeditan:

  • Konfirmasi bahwa entri secara sintaksis benar (IP terlebih dahulu, kemudian nama host).
  • Flush cache DNS lokal (lihat Langkah 8).
  • Periksa `/etc/nsswitch.conf` — jika `dns` muncul sebelum `files` di baris `hosts:`, DNS dikueri terlebih dahulu dan file hosts dilewati untuk entri yang di-cache.

Kesalahan `sudo: unable to resolve host` setelah pengeditan:

  • Anda kemungkinan menghapus atau merusak baris yang memetakan nama host mesin Anda ke `127.0.1.1` atau `127.0.0.1`. Pulihkan cadangan segera: `sudo cp /etc/hosts.bak.TIMESTAMP /etc/hosts`.

Entri diabaikan untuk aplikasi tertentu:

  • Beberapa aplikasi (terutama yang menggunakan `getaddrinfo` dengan konfigurasi NSS khusus, atau yang memiliki resolver yang ditautkan secara statis) melewati `/etc/nsswitch.conf` sepenuhnya dan mengkueri DNS secara langsung. Ini umum terjadi pada biner Go yang dikompilasi dengan CGO dinonaktifkan. Verifikasi dengan `strace -e trace=network yourapp`.

File hosts berfungsi secara lokal tetapi tidak di container Docker:

  • Jaringan container terisolasi. Container memiliki `/etc/hosts`-nya sendiri. Gunakan `–add-host` atau `hostAliases` seperti yang dijelaskan di atas.

Poin Teknis Utama: Daftar Periksa Keputusan

Sebelum mengedit `/etc/hosts`, jalankan daftar periksa ini:

  • Pemeriksaan cakupan: Apakah perubahan ini hanya diperlukan pada satu mesin? Jika beberapa mesin membutuhkannya, gunakan DNS atau alat seperti Ansible untuk mendistribusikan perubahan.
  • Cadangkan terlebih dahulu: Selalu buat cadangan dengan cap waktu (`hosts.bak.YYYYMMDD_HHMMSS`) sebelum pengeditan apa pun.
  • Gunakan `0.0.0.0` untuk pemblokiran: Kegagalan lebih cepat, tidak ada overhead loopback.
  • Flush cache yang tepat: Identifikasi apakah sistem Anda menggunakan `systemd-resolved`, `nscd`, atau `dnsmasq` sebelum me-restart layanan yang salah.
  • Uji dengan `getent`: Lebih andal daripada `ping` untuk mengonfirmasi resolusi NSS.
  • Lindungi file: Gunakan `chattr +i` pada sistem produksi atau yang sensitif terhadap keamanan.
  • Dokumentasikan entri Anda: Tambahkan komentar sebaris (`# reason – added YYYY-MM-DD`) ke setiap entri non-default.
  • Hapus entri sementara: Entri dev/test yang tertinggal di file hosts produksi adalah sumber umum bug perutean yang sulit didiagnosis.

Jika Anda mengelola alur kerja pengembangan di beberapa lingkungan, pertimbangkan untuk memasangkan manajemen file hosts lokal dengan pengaturan VPS Control Panels yang dikonfigurasi dengan benar untuk memusatkan manajemen virtual host dan mengurangi penyimpangan konfigurasi per-mesin.

Untuk proyek yang melibatkan Pendaftaran Domain dan peluncuran bertahap, file hosts tetap menjadi cara paling andal untuk melakukan pengujian end-to-end penuh dari konfigurasi server baru sebelum propagasi DNS selesai — memberi Anda jendela validasi tanpa risiko sebelum publik melihat perubahan apa pun.

FAQ

Apakah mengedit `/etc/hosts` memerlukan reboot sistem?

Tidak. Perubahan pada `/etc/hosts` langsung berlaku untuk koneksi baru. Jika Anda memiliki daemon caching DNS lokal (`systemd-resolved`, `nscd`, atau `dnsmasq`), Anda harus mem-flush cache-nya. Browser juga mempertahankan cache DNS independen yang mungkin perlu dihapus secara manual.

Mengapa entri file hosts saya berfungsi di terminal tetapi tidak di browser saya?

Browser menyimpan catatan DNS secara independen dari resolver OS. Chrome menyimpan catatan hingga 60 detik. Navigasikan ke `chrome://net-internals/#dns` dan hapus cache host, atau tunggu TTL habis.

Bisakah saya menggunakan wildcard di `/etc/hosts`?

Tidak. File `/etc/hosts` tidak mendukung entri wildcard. Setiap nama host harus dicantumkan secara eksplisit. Jika Anda memerlukan resolusi wildcard (misalnya, `*.local`), gunakan resolver DNS lokal seperti `dnsmasq` atau `unbound`.

Berapa jumlah maksimum entri di `/etc/hosts`?

Tidak ada batas yang dikodekan secara keras yang diberlakukan oleh kernel atau glibc. Namun, kinerja menurun dengan file yang sangat besar karena file diurai secara linear untuk setiap pencarian. File dengan puluhan ribu entri (umum dengan daftar pemblokiran iklan) dapat menambah latensi yang terukur pada resolusi nama host. Untuk daftar blokir yang besar, DNS sinkhole khusus seperti Pi-hole lebih efisien.

Apakah aman untuk menghapus entri default di `/etc/hosts`?

Tidak. Entri default (`127.0.0.1 localhost`, `::1 localhost`, dan pemetaan nama host mesin itu sendiri) diperlukan untuk operasi sistem yang benar. Menghapusnya dapat merusak `sudo`, koneksi soket lokal, dan aplikasi yang bergantung pada resolusi loopback. Hanya tambahkan atau modifikasi entri; jangan pernah menghapus default tanpa alasan yang spesifik dan dipahami dengan baik.

15%

Hemat 15% di Semua Layanan Hosting

Uji kemampuanmu dan dapatkan Diskon pada paket hosting apa saja

Gunakan kode:

Skills
Memulai