15%

Tüm Hosting Hizmetlerinde %15 indirim

Becerilerini test et ve herhangi bir hosting planında İndirim kazan

Kodu kullanın:

Skills
Başlayın
23.10.2024

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 KonumuKapsamYeniden Başlatmada Kalır
Statik/etc/hostnameKalıcı sistem kimliğiEvet
GeçiciYalnızca çekirdek çalışma zamanıGeçici, NTP/DHCP tarafından ayarlanırHayır
Görsel/etc/machine-infoUTF-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:

hostnamectl

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

Geç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 -n

Yö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-hostname

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

Adım 2: Değişikliği Doğrulama

hostnamectl

Statik hostname alanının yeni değerinizi gösterdiğini doğrulayın. Ayrıca çekirdeğin bunu aldığını da doğrulayın:

hostname

Adı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/hosts

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

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

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

Adım 2: /etc/hosts Güncelleme

sudo nano /etc/hosts

Yö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-hostname

Tam systemd benimsemesi olmaksızın systemd-hostnamed mevcut olan sistemlerde:

sudo systemctl restart systemd-hostnamed

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

Yö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.cfg

Aşağıdaki yönergeyi bulun veya ekleyin:

preserve_hostname: true

Alternatif 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
EOF

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

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

NetworkManager’ın DHCP’den hostname kabul etmesini tamamen önlemek için /etc/NetworkManager/NetworkManager.conf dosyasına şunu ekleyin:

[main]
hostname-mode=none

Hostname 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öntemDağıtım UyumluluğuYeniden Başlatma GerektirirCloud-Init’i YönetirAtomik Güncelleme
hostnamectl set-hostnamesystemd dağıtımlarıHayırHayır (preserve_hostname gerektirir)Evet
/etc/hostname manuel düzenlemeTüm dağıtımlarHayır (hostname komutuyla)HayırHayır
Cloud-init preserve_hostnameBulut örnekleriHayırEvetN/A
DHCP istemci yapılandırması (supersede)Tüm dağıtımlarHayırHayırHayır
NetworkManager nmcliNM yönetimli sistemlerHayırHayırEvet

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-hostname ile veya /etc/hostname dosyasını düzenleyerek ayarlayın
  • /etc/hosts dosyası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: true ayarlayı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 --fqdn ve hostnamectl‘ı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/syslog veya journalctl -b dosyası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.

15%

Tüm Hosting Hizmetlerinde %15 indirim

Becerilerini test et ve herhangi bir hosting planında İndirim kazan

Kodu kullanın:

Skills
Başlayın