15%

Hemat 15% di Semua Layanan Hosting

Uji kemampuanmu dan dapatkan Diskon pada paket hosting apa saja

Gunakan kode:

Skills
Memulai
23.10.2024

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 HostnameLokasi PenyimpananCakupanBertahan Setelah Reboot
Static/etc/hostnameIdentitas sistem yang persistenYa
TransientHanya runtime kernelSementara, diatur oleh NTP/DHCPTidak
Pretty/etc/machine-infoNama 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:

hostnamectl

Contoh 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-64

Jika 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 -n

Metode 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-hostname

hostnamectl 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" --transient

Langkah 2: Verifikasi Perubahan

hostnamectl

Konfirmasi bahwa kolom Static hostname menampilkan nilai baru Anda. Juga verifikasi bahwa kernel telah mengambilnya:

hostname

Langkah 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/hosts

File tersebut harus berisi minimal:

127.0.0.1   localhost
127.0.1.1   new-static-hostname.yourdomain.com  new-static-hostname

Baris 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-hostname

Jika 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/hostname

File tersebut harus berisi tepat satu baris — hostname pendek tanpa spasi di akhir atau baris baru selain terminator baris standar:

new-static-hostname

Langkah 2: Perbarui /etc/hosts

sudo nano /etc/hosts

Terapkan 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-hostname

Pada sistem dengan systemd-hostnamed yang tersedia bahkan tanpa adopsi systemd penuh:

sudo systemctl restart systemd-hostnamed

Pada 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 bash

Metode 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.cfg

Temukan atau tambahkan direktif berikut:

preserve_hostname: true

Atau, 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
EOF

Setelah 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.conf

Tambahkan 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=no

UseHostname=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 yes

Untuk mencegah NetworkManager menerima hostname dari DHCP sepenuhnya, tambahkan ke /etc/NetworkManager/NetworkManager.conf:

[main]
hostname-mode=none

Propagasi 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

MetodeKompatibilitas DistroMemerlukan RebootMenangani Cloud-InitPembaruan Atomik
hostnamectl set-hostnameDistro systemdTidakTidak (memerlukan preserve_hostname)Ya
Edit /etc/hostname secara manualSemua distroTidak (dengan perintah hostname)TidakTidak
Cloud-init preserve_hostnameInstance cloudTidakYaN/A
Konfigurasi klien DHCP (supersede)Semua distroTidakTidakTidak
NetworkManager nmcliSistem yang dikelola NMTidakTidakYa

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 hostnamectl sebelum perubahan dan simpan outputnya untuk keperluan audit
  • Atur static hostname dengan hostnamectl set-hostname atau dengan mengedit /etc/hostname
  • Perbarui /etc/hosts dengan hostname pendek dan FQDN pada baris yang sama
  • Jika sistem adalah instance cloud, atur preserve_hostname: true di 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, dan hostnamectl semuanya mengembalikan nilai yang konsisten
  • Periksa /var/log/syslog atau journalctl -b untuk 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.

15%

Hemat 15% di Semua Layanan Hosting

Uji kemampuanmu dan dapatkan Diskon pada paket hosting apa saja

Gunakan kode:

Skills
Memulai