Cara Menetapkan Hostname Statis pada Mesin Linux
A static hostname adalah label yang dapat dibaca manusia, dikonfigurasi secara permanen, dan ditetapkan pada sistem Linux yang tetap ada setelah reboot dan tidak ditimpa oleh layanan jaringan seperti DHCP. Tidak seperti transient hostname — yang dapat diatur secara dinamis oleh daemon jaringan dan direset pada boot berikutnya — static hostname disimpan di disk dan tetap otoritatif terlepas dari bagaimana mesin mendapatkan alamat IP-nya.
Perbedaan ini sangat penting dalam lingkungan produksi. Saat Anda menjalankan VPS atau dedicated server, hostname yang stabil adalah jangkar untuk entri SSH known-hosts, Subject Alternative Names sertifikat TLS, pengidentifikasi syslog, label target Prometheus, dan nama prinsipal Kerberos. Hostname yang berubah secara diam-diam setelah pembaruan DHCP dapat merusak semua hal ini secara bersamaan.
Apa Sebenarnya Linux Hostname?
Linux melacak tiga kelas hostname yang berbeda, masing-masing melayani tujuan yang berbeda:
| Tipe Hostname | Lokasi Penyimpanan | Cakupan | Bertahan Setelah Reboot |
|---|---|---|---|
| Static | /etc/hostname | Identitas sistem yang persisten | Ya |
| Transient | Hanya runtime kernel | Sementara, diatur oleh NTP/DHCP | Tidak |
| Pretty | /etc/machine-info | Nama tampilan UTF-8 (spasi diperbolehkan) | Ya |
Static hostname adalah yang Anda konfigurasi secara sengaja. Transient hostname adalah yang sedang digunakan kernel — biasanya identik dengan yang statis kecuali server DHCP atau systemd-timesyncd telah menimpanya. Pretty hostname murni bersifat kosmetik (misalnya, "Alex's Web Server") dan tidak pernah digunakan dalam DNS atau SSH.
Static hostname yang valid mengikuti aturan RFC 1123: hanya huruf kecil, angka, dan tanda hubung; tidak ada garis bawah; tidak ada tanda hubung di awal atau akhir; maksimal 63 karakter per label; maksimal 253 karakter total untuk fully qualified domain name (FQDN).
Memeriksa Hostname Saat Ini
Sebelum melakukan perubahan apa pun, audit kondisi saat ini dari ketiga tipe hostname:
hostnamectlContoh output pada sistem berbasis systemd:
Static hostname: old-server-name
Pretty hostname: Old Server Name
Transient hostname: dhcp-assigned-name
Icon name: computer-server
Chassis: server
Machine ID: a1b2c3d4e5f6...
Boot ID: 9f8e7d6c5b4a...
Operating System: Ubuntu 22.04.3 LTS
Kernel: Linux 5.15.0-91-generic
Architecture: x86-64Jika Transient hostname berbeda dari Static hostname, klien DHCP Anda menimpa nilai statis — masalah yang dibahas di bagian persistensi di bawah.
Untuk sistem tanpa hostnamectl, gunakan:
hostname
cat /etc/hostname
uname -nMetode 1: Menggunakan hostnamectl (Distribusi Berbasis systemd)
Metode ini berlaku untuk Ubuntu 16.04+, Debian 8+, CentOS 7+, RHEL 7+, Fedora 15+, AlmaLinux, Rocky Linux, dan distribusi apa pun yang menjalankan systemd sebagai PID 1.
Langkah 1: Atur Static Hostname
sudo hostnamectl set-hostname new-static-hostnamehostnamectl menulis nilai ke /etc/hostname, memanggil syscall sethostname(2) untuk memperbarui kernel yang berjalan secara langsung, dan memberi tahu systemd-hostnamed — semuanya secara atomik. Tidak diperlukan reboot.
Untuk mengatur ketiga tipe hostname secara bersamaan:
sudo hostnamectl set-hostname "new-static-hostname" --static
sudo hostnamectl set-hostname "New Static Hostname" --pretty
sudo hostnamectl set-hostname "new-static-hostname" --transientLangkah 2: Verifikasi Perubahan
hostnamectlKonfirmasi bahwa kolom Static hostname menampilkan nilai baru Anda. Juga verifikasi bahwa kernel telah mengambilnya:
hostnameLangkah 3: Perbarui /etc/hosts
hostnamectl tidak memperbarui /etc/hosts secara otomatis. Kegagalan memperbarui file ini menyebabkan sudo mengeluarkan peringatan unable to resolve host, merusak aplikasi yang memanggil gethostbyname() pada hostname lokal, dan dapat menyebabkan layanan berbasis Java (Elasticsearch, Kafka) gagal saat startup.
sudo nano /etc/hostsFile tersebut harus berisi minimal:
127.0.0.1 localhost
127.0.1.1 new-static-hostname.yourdomain.com new-static-hostnameBaris kedua menggunakan 127.0.1.1 (bukan 127.0.0.1) untuk hostname mesin sendiri pada sistem keluarga Debian. Pada sistem keluarga RHEL, gunakan alamat IP primer yang sebenarnya sebagai gantinya:
192.168.1.50 new-static-hostname.yourdomain.com new-static-hostnameJika Anda mengelola VPS dengan cPanel, alat perubahan hostname cPanel menangani /etc/hosts secara otomatis, tetapi Anda tetap harus memverifikasi hasilnya secara manual.
Metode 2: Mengedit /etc/hostname Secara Manual (Distribusi Non-systemd)
Metode ini berlaku untuk rilis Debian/Ubuntu lama yang menggunakan SysVinit atau Upstart, Alpine Linux, Gentoo dengan OpenRC, Void Linux, dan sistem tertanam.
Langkah 1: Edit /etc/hostname
sudo nano /etc/hostnameFile tersebut harus berisi tepat satu baris — hostname pendek tanpa spasi di akhir atau baris baru selain terminator baris standar:
new-static-hostnameLangkah 2: Perbarui /etc/hosts
sudo nano /etc/hostsTerapkan pemetaan yang sama seperti yang dijelaskan di Metode 1.
Langkah 3: Terapkan Perubahan Tanpa Reboot
Beri tahu kernel yang berjalan tentang hostname baru secara langsung:
sudo hostname new-static-hostnamePada sistem dengan systemd-hostnamed yang tersedia bahkan tanpa adopsi systemd penuh:
sudo systemctl restart systemd-hostnamedPada sistem SysVinit murni, perintah hostname di atas sudah cukup. Perubahan berlaku untuk semua proses baru; shell yang sudah ada masih akan menampilkan prompt lama hingga Anda membuka sesi terminal baru atau menjalankan:
exec bashMetode 3: Override Cloud-Init (Penting untuk Instance Cloud VPS)
Ini adalah skenario yang paling sering terlewatkan. Pada platform cloud — termasuk sebagian besar penyedia VPS — cloud-init berjalan setiap boot dan mereset hostname ke nilai yang dikembalikan oleh API metadata instance. Perubahan /etc/hostname Anda akan ditimpa secara diam-diam pada reboot berikutnya.
Untuk membuat static hostname bertahan dari cloud-init, edit /etc/cloud/cloud.cfg:
sudo nano /etc/cloud/cloud.cfgTemukan atau tambahkan direktif berikut:
preserve_hostname: trueAtau, buat file override drop-in untuk menghindari modifikasi konfigurasi yang dikelola paket:
sudo mkdir -p /etc/cloud/cloud.cfg.d/
sudo tee /etc/cloud/cloud.cfg.d/99_hostname.cfg > /dev/null <<EOF
preserve_hostname: true
EOFSetelah perubahan ini, cloud-init tidak akan lagi menyentuh hostname pada boot berikutnya.
Mencegah DHCP Menimpa Static Hostname
Bahkan tanpa cloud-init, klien DHCP dapat menimpa transient hostname. Perbaikannya bergantung pada klien DHCP yang digunakan distribusi Anda.
Untuk dhclient (Debian/Ubuntu lama)
Edit /etc/dhcp/dhclient.conf:
sudo nano /etc/dhcp/dhclient.confTambahkan atau modifikasi:
send host-name "new-static-hostname";
supersede host-name "new-static-hostname";Direktif supersede memastikan klien mengabaikan hostname apa pun yang ditawarkan oleh server DHCP.
Untuk systemd-networkd dengan systemd-resolved
Edit atau buat file .network di /etc/systemd/network/:
[DHCP]
SendHostname=yes
UseHostname=noUseHostname=no mencegah hostname yang ditawarkan DHCP menimpa yang statis.
Untuk NetworkManager (sebagian besar distro desktop dan server modern)
sudo nmcli con modify "connection-name" ipv4.dhcp-hostname "new-static-hostname"
sudo nmcli con modify "connection-name" ipv4.dhcp-send-hostname yesUntuk mencegah NetworkManager menerima hostname dari DHCP sepenuhnya, tambahkan ke /etc/NetworkManager/NetworkManager.conf:
[main]
hostname-mode=nonePropagasi Hostname: Apa Lagi yang Perlu Diketahui
Mengatur hostname di OS adalah hal yang diperlukan tetapi tidak cukup dalam lingkungan jaringan. Pertimbangkan sistem downstream berikut:
- Record DNS forward dan reverse: Perbarui record A dan record PTR zona DNS Anda. Tanpa record PTR yang cocok, banyak server email akan menolak email keluar, dan beberapa alat keamanan menandai host sebagai mencurigakan.
- Sertifikat SSL/TLS: Jika hostname Anda adalah bagian dari CN atau SAN sertifikat, Anda memerlukan sertifikat baru. Sertifikat SSL yang terikat pada hostname lama akan menghasilkan kesalahan validasi.
- Pendaftaran domain dan propagasi DNS: Jika hostname memetakan ke FQDN publik, perbarui record DNS di registrar domain Anda dan tunggu waktu propagasi berbasis TTL.
- Agen pemantauan: Prometheus node exporter, Datadog, Zabbix, dan agen serupa menggunakan hostname sebagai label. Setelah perubahan hostname, metrik historis mungkin muncul di bawah identitas host yang berbeda.
/etc/ssh/ssh_known_hosts: File known-hosts di seluruh cluster yang mereferensikan hostname lama harus diperbarui.- File konfigurasi aplikasi: Setiap hostname yang dikodekan keras dalam konfigurasi aplikasi, string koneksi JDBC, atau listener yang diiklankan message broker harus diperbarui.
Perbandingan: Metode Konfigurasi Hostname
| Metode | Kompatibilitas Distro | Memerlukan Reboot | Menangani Cloud-Init | Pembaruan Atomik |
|---|---|---|---|---|
hostnamectl set-hostname | Distro systemd | Tidak | Tidak (memerlukan preserve_hostname) | Ya |
Edit /etc/hostname secara manual | Semua distro | Tidak (dengan perintah hostname) | Tidak | Tidak |
Cloud-init preserve_hostname | Instance cloud | Tidak | Ya | N/A |
Konfigurasi klien DHCP (supersede) | Semua distro | Tidak | Tidak | Tidak |
NetworkManager nmcli | Sistem yang dikelola NM | Tidak | Tidak | Ya |
Kasus Tepi dan Jebakan di Dunia Nyata
Jebakan 1: Loop peringatan sudo. Jika Anda mengatur hostname tetapi lupa memperbarui /etc/hosts, setiap pemanggilan sudo akan mencetak sudo: unable to resolve host new-static-hostname. Ini tidak fatal, tetapi menambah latensi pada setiap perintah yang memerlukan hak istimewa dan membanjiri log.
Jebakan 2: Layanan Java menolak untuk memulai. InetAddress.getLocalHost() Java me-resolve hostname melalui gethostbyname(). Jika hostname tidak ada di /etc/hosts atau tidak dapat di-resolve melalui DNS, layanan seperti Elasticsearch, Kafka, dan Cassandra melempar UnknownHostException saat startup.
Jebakan 3: Hostname dengan garis bawah. Meskipun banyak digunakan secara informal, garis bawah dalam hostname melanggar RFC 952 dan RFC 1123. Beberapa resolver DNS, library TLS, dan komponen Kubernetes akan menolak atau menanganinya dengan salah. Selalu gunakan tanda hubung.
Jebakan 4: FQDN vs. hostname pendek. hostnamectl hanya menyimpan hostname pendek (misalnya, web01). FQDN (misalnya, web01.example.com) di-resolve dengan menggabungkan hostname pendek dengan daftar pencarian domain di /etc/resolv.conf atau /etc/systemd/resolved.conf. Atur Domains=example.com di resolved.conf atau search example.com di resolv.conf agar hostname --fqdn mengembalikan nilai yang benar.
Jebakan 5: Isolasi container dan namespace. Di dalam container Docker atau namespace LXC, hostnamectl mungkin gagal dengan Failed to connect to bus: No such file or directory karena systemd-hostnamed tidak berjalan. Gunakan hostname new-name secara langsung, atau atur hostname saat pembuatan container melalui docker run --hostname atau kunci hostname: di docker-compose.yml.
Daftar Periksa Keputusan Praktis
Gunakan daftar periksa ini sebelum dan sesudah setiap perubahan hostname di lingkungan produksi:
- Konfirmasi hostname baru sesuai RFC 1123 (huruf kecil, hanya tanda hubung, maks 63 karakter per label)
- Jalankan
hostnamectlsebelum perubahan dan simpan outputnya untuk keperluan audit - Atur static hostname dengan
hostnamectl set-hostnameatau dengan mengedit/etc/hostname - Perbarui
/etc/hostsdengan hostname pendek dan FQDN pada baris yang sama - Jika sistem adalah instance cloud, atur
preserve_hostname: truedi konfigurasi cloud-init - Jika DHCP aktif, konfigurasikan klien DHCP untuk mengabaikan hostname yang ditawarkan server
- Perbarui record DNS A dan PTR
- Perbarui atau terbitkan ulang sertifikat TLS yang mereferensikan hostname lama
- Restart layanan yang bergantung pada hostname (syslog, agen pemantauan, aplikasi Java)
- Buka sesi shell baru dan verifikasi bahwa
hostname,hostname --fqdn, danhostnamectlsemuanya mengembalikan nilai yang konsisten - Periksa
/var/log/syslogataujournalctl -buntuk kesalahan pasca-perubahan yang mereferensikan hostname lama
FAQ
Apakah hostnamectl set-hostname memerlukan reboot untuk berlaku?
Tidak. hostnamectl memanggil system call sethostname(2) secara langsung, memperbarui kernel yang berjalan secara real time. Perubahan juga ditulis ke /etc/hostname untuk persistensi. Proses baru dan sesi shell baru akan melihat hostname yang diperbarui tanpa reboot apa pun.
Mengapa hostname saya kembali ke semula setelah setiap reboot pada cloud VPS?
Cloud-init hampir pasti menimpanya. Tambahkan preserve_hostname: true ke /etc/cloud/cloud.cfg atau buat file drop-in di /etc/cloud/cloud.cfg.d/99_hostname.cfg dengan direktif yang sama. Ini adalah penyebab paling umum dari pembalikan hostname pada mesin yang dihosting di cloud.
Apa perbedaan antara 127.0.0.1 dan 127.0.1.1 di /etc/hosts?
127.0.0.1 adalah alamat loopback standar yang dipetakan ke localhost. Distribusi keluarga Debian menggunakan 127.0.1.1 sebagai alamat loopback sekunder khusus untuk hostname mesin sendiri, menghindari konflik ketika mesin tidak memiliki IP statis. Pada sistem keluarga RHEL dan mesin dengan IP tetap, gunakan alamat IP primer yang sebenarnya untuk pemetaan hostname sebagai gantinya.
Bisakah saya menggunakan garis bawah dalam Linux hostname?
Secara teknis OS akan menerimanya, tetapi Anda sebaiknya tidak melakukannya. Garis bawah melanggar RFC 952 dan RFC 1123. Garis bawah menyebabkan kegagalan dalam resolusi DNS (BIND menolaknya secara default), validasi sertifikat TLS, dan penamaan node Kubernetes. Gunakan tanda hubung secara eksklusif.
Bagaimana cara memverifikasi bahwa hostname sepenuhnya konsisten di semua lapisan sistem?
Jalankan urutan berikut dan konfirmasi semua output cocok:
hostname
hostname --fqdn
hostnamectl --static
cat /etc/hostname
systemd-resolve --status | grep "Current hostname"Jika ada yang mengembalikan nilai berbeda, salah satu lapisan — cloud-init, klien DHCP, atau NetworkManager — masih menimpa pengaturan statis.
