Linux Makinesine Statik Hostname Nasıl Atanır
Bir statik hostname, bir Linux sistemine atanan, yeniden başlatmalar boyunca kalıcı olan ve DHCP gibi ağ servisleri tarafından üzerine yazılmayan, kalıcı olarak yapılandırılmış, insan tarafından okunabilir bir etikettir. Ağ daemon’u tarafından dinamik olarak ayarlanabilen ve bir sonraki önyüklemede sıfırlanabilen geçici hostname’in aksine, statik hostname diske kaydedilir ve makinenin IP adresini nasıl edindiğinden bağımsız olarak yetkili olmaya devam eder.
Bu ayrım, üretim ortamlarında son derece önemlidir. Bir VPS veya dedicated sunucu çalıştırdığınızda, kararlı bir hostname; SSH known-hosts girişleri, TLS sertifikası Subject Alternative Names, syslog tanımlayıcıları, Prometheus hedef etiketleri ve Kerberos principal adları için bir çıpa görevi görür. DHCP yenilemesinin ardından sessizce değişen bir hostname, tüm bunları aynı anda bozabilir.
Linux Hostname Tam Olarak Nedir?
Linux, her biri farklı bir amaca hizmet eden üç farklı hostname sınıfını takip eder:
| Hostname Türü | Depolama Konumu | Kapsam | Yeniden Başlatmada Kalır |
|---|---|---|---|
| Statik | /etc/hostname | Kalıcı sistem kimliği | Evet |
| Geçici | Yalnızca çekirdek çalışma zamanı | Geçici, NTP/DHCP tarafından ayarlanır | Hayır |
| Görsel | /etc/machine-info | UTF-8 görünen adı (boşluklara izin verilir) | Evet |
Statik hostname, kasıtlı olarak yapılandırdığınız şeydir. Geçici hostname, çekirdeğin şu anda kullandığı şeydir — bir DHCP sunucusu veya systemd-timesyncd tarafından geçersiz kılınmadığı sürece normalde statik olanla aynıdır. Görsel hostname tamamen kozmetiktir (örn. "Alex's Web Server") ve DNS veya SSH’de hiçbir zaman kullanılmaz.
Geçerli statik hostname’ler RFC 1123 kurallarını izler: yalnızca küçük harfler, rakamlar ve kısa çizgiler; alt çizgi yok; baş veya sondaki kısa çizgi yok; etiket başına maksimum 63 karakter; tam nitelikli alan adı (FQDN) için toplam maksimum 253 karakter.
Mevcut Hostname’i Kontrol Etme
Herhangi bir değişiklik yapmadan önce, üç hostname türünün mevcut durumunu denetleyin:
hostnamectlsystemd tabanlı bir sistemde örnek çıktı:
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-64Geçici hostname, Statik hostname‘den farklıysa, DHCP istemciniz statik değeri geçersiz kılıyor demektir — bu sorun aşağıdaki kalıcılık bölümünde ele alınmaktadır.
hostnamectl olmayan sistemler için şunu kullanın:
hostname
cat /etc/hostname
uname -nYöntem 1: hostnamectl Kullanımı (systemd Tabanlı Dağıtımlar)
Bu yöntem Ubuntu 16.04+, Debian 8+, CentOS 7+, RHEL 7+, Fedora 15+, AlmaLinux, Rocky Linux ve PID 1 olarak systemd çalıştıran tüm dağıtımlar için geçerlidir.
Adım 1: Statik Hostname’i Ayarlama
sudo hostnamectl set-hostname new-static-hostnamehostnamectl, değeri /etc/hostname dosyasına yazar, çalışan çekirdeği hemen güncellemek için sethostname(2) sistem çağrısını yapar ve systemd-hostnamed‘ı bildirir — tümü atomik olarak. Yeniden başlatma gerekmez.
Üç hostname türünü aynı anda ayarlamak için:
sudo hostnamectl set-hostname "new-static-hostname" --static
sudo hostnamectl set-hostname "New Static Hostname" --pretty
sudo hostnamectl set-hostname "new-static-hostname" --transientAdım 2: Değişikliği Doğrulama
hostnamectlStatik hostname alanının yeni değerinizi gösterdiğini doğrulayın. Ayrıca çekirdeğin bunu aldığını da doğrulayın:
hostnameAdım 3: /etc/hosts Güncelleme
hostnamectl, /etc/hosts dosyasını otomatik olarak güncellemez. Bu dosyayı güncellememek, sudo‘ın unable to resolve host uyarısı vermesine, yerel hostname üzerinde gethostbyname() çağıran uygulamaların bozulmasına ve Java tabanlı servislerin (Elasticsearch, Kafka) başlangıçta başarısız olmasına neden olabilir.
sudo nano /etc/hostsDosya en az şunları içermelidir:
127.0.0.1 localhost
127.0.1.1 new-static-hostname.yourdomain.com new-static-hostnameİkinci satır, Debian ailesi sistemlerde makinenin kendi hostname’i için 127.0.0.1 yerine 127.0.1.1 kullanır. RHEL ailesi sistemlerde bunun yerine gerçek birincil IP adresini kullanın:
192.168.1.50 new-static-hostname.yourdomain.com new-static-hostnameBir cPanel’li VPS yönetiyorsanız, cPanel’in hostname değiştirme aracı /etc/hosts dosyasını otomatik olarak günceller, ancak sonucu yine de manuel olarak doğrulamalısınız.
Yöntem 2: /etc/hostname Dosyasını Manuel Düzenleme (systemd Olmayan Dağıtımlar)
Bu yöntem, SysVinit veya Upstart kullanan eski Debian/Ubuntu sürümleri, Alpine Linux, OpenRC ile Gentoo, Void Linux ve gömülü sistemler için geçerlidir.
Adım 1: /etc/hostname Dosyasını Düzenleme
sudo nano /etc/hostnameDosya tam olarak bir satır içermelidir — standart satır sonlandırıcının ötesinde sondaki boşluk veya yeni satır olmaksızın kısa hostname:
new-static-hostnameAdım 2: /etc/hosts Güncelleme
sudo nano /etc/hostsYöntem 1’de açıklanan aynı eşlemeyi uygulayın.
Adım 3: Yeniden Başlatmadan Değişikliği Uygulama
Çalışan çekirdeği yeni hostname hakkında hemen bilgilendirin:
sudo hostname new-static-hostnameTam systemd benimsemesi olmaksızın systemd-hostnamed mevcut olan sistemlerde:
sudo systemctl restart systemd-hostnamedSaf SysVinit sistemlerinde, yukarıdaki hostname komutu yeterlidir. Değişiklik tüm yeni süreçler için geçerli olur; mevcut kabuklar yeni bir terminal oturumu açana veya şunu çalıştırana kadar eski istemi göstermeye devam eder:
exec bashYöntem 3: Cloud-Init Geçersiz Kılma (Bulut VPS Örnekleri için Kritik)
Bu, en sık gözden kaçırılan senaryodur. Çoğu VPS sağlayıcısı dahil bulut platformlarında, cloud-init her önyüklemede çalışır ve hostname’i örnek meta veri API’sinin döndürdüğü değere sıfırlar. /etc/hostname değişikliğiniz bir sonraki yeniden başlatmada sessizce üzerine yazılacaktır.
Statik bir hostname’in cloud-init’ten kurtulmasını sağlamak için /etc/cloud/cloud.cfg dosyasını düzenleyin:
sudo nano /etc/cloud/cloud.cfgAşağıdaki yönergeyi bulun veya ekleyin:
preserve_hostname: trueAlternatif olarak, paket tarafından yönetilen yapılandırmayı değiştirmekten kaçınmak için bir drop-in geçersiz kılma dosyası oluşturun:
sudo mkdir -p /etc/cloud/cloud.cfg.d/
sudo tee /etc/cloud/cloud.cfg.d/99_hostname.cfg > /dev/null <<EOF
preserve_hostname: true
EOFBu değişiklikten sonra cloud-init, sonraki önyüklemelerde hostname’e artık dokunmayacaktır.
DHCP’nin Statik Hostname’i Geçersiz Kılmasını Önleme
Cloud-init olmasa bile, bir DHCP istemcisi geçici hostname’in üzerine yazabilir. Düzeltme, dağıtımınızın hangi DHCP istemcisini kullandığına bağlıdır.
dhclient için (Debian/Ubuntu eski sürüm)
/etc/dhcp/dhclient.conf dosyasını düzenleyin:
sudo nano /etc/dhcp/dhclient.confŞunu ekleyin veya değiştirin:
send host-name "new-static-hostname";
supersede host-name "new-static-hostname";supersede yönergesi, istemcinin DHCP sunucusu tarafından sunulan herhangi bir hostname’i yok saymasını sağlar.
systemd-resolved ile systemd-networkd için
/etc/systemd/network/ dizininde bir .network dosyası düzenleyin veya oluşturun:
[DHCP]
SendHostname=yes
UseHostname=noUseHostname=no, DHCP tarafından sunulan hostname’in statik olanın üzerine yazılmasını engeller.
NetworkManager için (çoğu masaüstü ve modern sunucu dağıtımı)
sudo nmcli con modify "connection-name" ipv4.dhcp-hostname "new-static-hostname"
sudo nmcli con modify "connection-name" ipv4.dhcp-send-hostname yesNetworkManager’ın DHCP’den hostname kabul etmesini tamamen önlemek için /etc/NetworkManager/NetworkManager.conf dosyasına şunu ekleyin:
[main]
hostname-mode=noneHostname Yayılımı: Başka Nelerin Bilmesi Gerekiyor
Hostname’i işletim sisteminde ayarlamak gerekli ama ağa bağlı bir ortamda yeterli değildir. Bu aşağı akış sistemlerini göz önünde bulundurun:
- DNS ileri ve ters kayıtlar: DNS bölgenizin A kaydını ve PTR kaydını güncelleyin. Eşleşen bir PTR kaydı olmadan, birçok posta sunucusu giden e-postayı reddeder ve bazı güvenlik araçları ana bilgisayarı şüpheli olarak işaretler.
- SSL/TLS sertifikaları: Hostname’iniz bir sertifikanın CN veya SAN’ının parçasıysa, yeni bir sertifikaya ihtiyacınız var. Eski hostname’e bağlı SSL sertifikaları doğrulama hataları üretecektir.
- Alan adı kaydı ve DNS yayılımı: Hostname genel bir FQDN ile eşleşiyorsa, alan adı kayıt kuruluşunuzdaki DNS kaydını güncelleyin ve TTL tabanlı yayılım süresi için bekleyin.
- İzleme ajanları: Prometheus node exporter, Datadog, Zabbix ve benzeri ajanlar hostname’i etiket olarak kullanır. Hostname değişikliğinin ardından geçmiş metrikler farklı bir ana bilgisayar kimliği altında görünebilir.
/etc/ssh/ssh_known_hosts: Eski hostname’e başvuran küme genelindeki known-hosts dosyaları güncellenmelidir.- Uygulama yapılandırma dosyaları: Uygulama yapılandırmalarındaki, JDBC bağlantı dizelerindeki veya mesaj aracısı tarafından duyurulan dinleyicilerdeki sabit kodlanmış hostname’ler güncellenmelidir.
Karşılaştırma: Hostname Yapılandırma Yöntemleri
| Yöntem | Dağıtım Uyumluluğu | Yeniden Başlatma Gerektirir | Cloud-Init’i Yönetir | Atomik Güncelleme |
|---|---|---|---|---|
hostnamectl set-hostname | systemd dağıtımları | Hayır | Hayır (preserve_hostname gerektirir) | Evet |
/etc/hostname manuel düzenleme | Tüm dağıtımlar | Hayır (hostname komutuyla) | Hayır | Hayır |
Cloud-init preserve_hostname | Bulut örnekleri | Hayır | Evet | N/A |
DHCP istemci yapılandırması (supersede) | Tüm dağıtımlar | Hayır | Hayır | Hayır |
NetworkManager nmcli | NM yönetimli sistemler | Hayır | Hayır | Evet |
Gerçek Dünya Uç Durumları ve Tuzaklar
Tuzak 1: sudo uyarı döngüsü. Hostname’i ayarlayıp /etc/hosts dosyasını güncellemeyi unutursanız, her sudo çağrısı sudo: unable to resolve host new-static-hostname yazdıracaktır. Bu ölümcül değildir, ancak her ayrıcalıklı komuta gecikme ekler ve günlükleri doldurur.
Tuzak 2: Java servisleri başlamayı reddeder. Java’nın InetAddress.getLocalHost() işlevi, hostname’i gethostbyname() aracılığıyla çözer. Hostname /etc/hosts dosyasında yoksa veya DNS aracılığıyla çözümlenemiyorsa, Elasticsearch, Kafka ve Cassandra gibi servisler başlangıçta UnknownHostException hatası fırlatır.
Tuzak 3: Alt çizgi içeren hostname. Gayri resmi olarak yaygın kullanılmasına rağmen, hostname’lerde alt çizgi RFC 952 ve RFC 1123’ü ihlal eder. Bazı DNS çözümleyicileri, TLS kütüphaneleri ve Kubernetes bileşenleri bunları reddeder veya yanlış işler. Her zaman kısa çizgi kullanın.
Tuzak 4: FQDN ile kısa hostname. hostnamectl yalnızca kısa hostname’i depolar (örn. web01). FQDN (örn. web01.example.com), kısa hostname’in /etc/resolv.conf veya /etc/systemd/resolved.conf dosyasındaki alan arama listesiyle birleştirilmesiyle çözümlenir. hostname --fqdn‘ın doğru değeri döndürmesini sağlamak için resolved.conf dosyasında Domains=example.com veya resolv.conf dosyasında search example.com ayarlayın.
Tuzak 5: Konteyner ve ad alanı izolasyonu. Bir Docker konteyneri veya LXC ad alanı içinde, systemd-hostnamed çalışmadığı için hostnamectl Failed to connect to bus: No such file or directory hatasıyla başarısız olabilir. hostname new-name dosyasını doğrudan kullanın veya hostname’i konteyner oluşturma zamanında docker run --hostname aracılığıyla ya da docker-compose.yml dosyasındaki hostname: anahtarıyla ayarlayın.
Pratik Karar Kontrol Listesi
Üretim ortamında her hostname değişikliğinden önce ve sonra bu kontrol listesini kullanın:
- Yeni hostname’in RFC 1123 uyumlu olduğunu doğrulayın (küçük harf, yalnızca kısa çizgi, etiket başına maksimum 63 karakter)
- Değişiklikten önce
hostnamectlçalıştırın ve denetim amacıyla çıktıyı kaydedin - Statik hostname’i
hostnamectl set-hostnameile veya/etc/hostnamedosyasını düzenleyerek ayarlayın /etc/hostsdosyasını hem kısa hostname hem de FQDN ile aynı satırda güncelleyin- Sistem bir bulut örneğiyse, cloud-init yapılandırmasında
preserve_hostname: trueayarlayın - DHCP etkinse, DHCP istemcisini sunucu tarafından sunulan hostname’leri yok sayacak şekilde yapılandırın
- DNS A ve PTR kayıtlarını güncelleyin
- Eski hostname’e başvuran TLS sertifikalarını yenileyin veya yeniden düzenleyin
- Hostname’e bağımlı servisleri yeniden başlatın (syslog, izleme ajanları, Java uygulamaları)
- Yeni bir kabuk oturumu açın ve
hostname,hostname --fqdnvehostnamectl‘ın tutarlı değerler döndürdüğünü doğrulayın - Eski hostname’e başvuran değişiklik sonrası hatalar için
/var/log/syslogveyajournalctl -bdosyasını kontrol edin
SSS
hostnamectl set-hostname geçerli olması için yeniden başlatma gerektirir mi?
Hayır. hostnamectl, çalışan çekirdeği gerçek zamanlı olarak güncelleyerek sethostname(2) sistem çağrısını hemen yapar. Değişiklik aynı zamanda kalıcılık için /etc/hostname dosyasına da yazılır. Yeni süreçler ve yeni kabuk oturumları, herhangi bir yeniden başlatma olmaksızın güncellenmiş hostname’i görecektir.
Neden bulut VPS’imde hostname her yeniden başlatmadan sonra eski haline dönüyor?
Cloud-init neredeyse kesinlikle üzerine yazıyordur. /etc/cloud/cloud.cfg dosyasına preserve_hostname: true ekleyin veya aynı yönergeyle /etc/cloud/cloud.cfg.d/99_hostname.cfg konumunda bir drop-in dosyası oluşturun. Bu, bulut barındırmalı makinelerde hostname dönüşümünün en yaygın tek nedenidir.
/etc/hosts dosyasında 127.0.0.1 ile 127.0.1.1 arasındaki fark nedir?
127.0.0.1, localhost ile eşlenen standart geri döngü adresidir. Debian ailesi dağıtımlar, makinenin statik IP’si olmadığında çakışmaları önlemek amacıyla makinenin kendi hostname’i için özellikle 127.0.1.1‘yi ikincil geri döngü adresi olarak kullanır. RHEL ailesi sistemlerde ve sabit IP’ye sahip makinelerde, hostname eşlemesi için gerçek birincil IP adresini kullanın.
Linux hostname’inde alt çizgi kullanabilir miyim?
Teknik olarak işletim sistemi bunu kabul eder, ancak kullanmamalısınız. Alt çizgiler RFC 952 ve RFC 1123’ü ihlal eder. DNS çözümlemesinde (BIND varsayılan olarak reddeder), TLS sertifika doğrulamasında ve Kubernetes düğüm adlandırmasında hatalara neden olurlar. Yalnızca kısa çizgi kullanın.
Hostname’in tüm sistem katmanlarında tamamen tutarlı olduğunu nasıl doğrularım?
Aşağıdaki sırayı çalıştırın ve tüm çıktıların eşleştiğini doğrulayın:
hostname
hostname --fqdn
hostnamectl --static
cat /etc/hostname
systemd-resolve --status | grep "Current hostname"Bunlardan herhangi biri farklı değerler döndürürse, katmanlardan biri — cloud-init, DHCP istemcisi veya NetworkManager — hâlâ statik ayarı geçersiz kılıyordur.
