Alan Adı ve DNS 10 dk okuma

Linux DNS Ayarları: Ubuntu, Debian ve AlmaLinux'ta DNS Değiştirme

Linux DNS ayarları dağıtım dağıtım: resolv.conf tuzağı, Ubuntu'da netplan ve resolvectl ile kalıcı DNS değiştirme, AlmaLinux ve Rocky Linux'ta nmcli, Debian'da resolv.conf, DNS önbelleğini temizleme ve VDS'te erişimi kaybetmemek için önlemler.

Linux DNS Ayarları: Ubuntu, Debian ve AlmaLinux'ta DNS Değiştirme
AnkSOFT
Yayıncı

Linux'ta DNS ayarı denince akla ilk gelen /etc/resolv.conf dosyasıdır; ama güncel Ubuntu, Debian ve AlmaLinux sürümlerinde bu dosyayı elle düzenlemek çoğu zaman işe yaramaz, değişiklik ilk yeniden başlatmada ya da ağ yenilendiğinde silinir. Bu rehberde Linux DNS ayarları konusunu dağıtım dağıtım ele alıyoruz: sisteminizin DNS'i hangi bileşenle yönettiğini nasıl anlarsınız, Ubuntu'da DNS değiştirme (netplan ve resolvectl), AlmaLinux ve Rocky Linux'ta nmcli, Debian'da klasik yöntem, DNS önbelleğini temizleme ve değişikliği doğrulama. VDS üzerinde çalışıyorsanız sunucuya erişimi kaybetmemek için alınacak önlemleri de anlattık.

Terminal görüntüleri Ubuntu 24.04 çalışan gerçek bir sunucudan alınmıştır; sunucu adı ve IP adresleri maskelenmiş, 203.0.113.x örnek adresleriyle değiştirilmiştir. Komutları kendi sisteminizde root olarak ya da başına sudo ekleyerek çalıştırın.


Önce Sisteminizin DNS'i Nasıl Yönettiğini Bulun

Linux'ta DNS ayarını yapan tek bir program yoktur. Dağıtıma ve kurulum türüne göre şu üç yapıdan biriyle karşılaşırsınız:

Sistem DNS'i yöneten Ayar yeri
Ubuntu Server 18.04 ve sonrası systemd-resolved + netplan /etc/netplan/*.yaml
Ubuntu Desktop NetworkManager + systemd-resolved Ağ ayarları veya nmcli
AlmaLinux, Rocky Linux, RHEL 8/9 NetworkManager nmcli
Debian (statik IP'li sunucu) Klasik dosya /etc/resolv.conf

Hangisinin sizde çalıştığını anlamak için iki komut yeterlidir:

ls -l /etc/resolv.conf
systemctl is-active systemd-resolved NetworkManager

ls -l /etc/resolv.conf çıktısında stub-resolv.conf bağlantısı ve 127.0.0.53 adresi

  • /etc/resolv.conf dosyası ../run/systemd/resolve/stub-resolv.conf adresine giden bir sembolik bağlantı ise ve içinde nameserver 127.0.0.53 yazıyorsa sisteminiz systemd-resolved kullanıyor. Buradaki 127.0.0.53 gerçek DNS sunucunuz değil, sunucunun içindeki yerel önbellekli çözümleyicidir.
  • Dosyanın başında # Generated by NetworkManager yazıyorsa DNS'i NetworkManager yönetiyor.
  • Dosya sıradan bir dosyaysa (bağlantı değilse) ve başında bir "otomatik oluşturuldu" uyarısı yoksa klasik yöntemle doğrudan düzenlenebilir.

resolv.conf tuzağı: neden elle düzenlenmemeli?

Ekran görüntüsündeki dosyanın ilk satırı açıkça uyarır: "Do not edit." systemd-resolved veya NetworkManager bu dosyayı her ağ değişikliğinde yeniden yazar. Elle eklediğiniz nameserver 1.1.1.1 satırı bir süre çalışır gibi görünür, sonra kaybolur. İnternette sık önerilen chattr +i /etc/resolv.conf (dosyayı değiştirilemez yapmak) ise sorunu gizler; sistem güncellemelerinde ve ağ yapılandırmasında beklenmedik hatalara yol açar. Doğru yol, DNS'i yöneten bileşenin kendi ayarından değiştirmektir.


Mevcut DNS Sunucularını Görme

systemd-resolved kullanan sistemlerde (Ubuntu) gerçek DNS sunucularını resolvectl gösterir:

resolvectl status
resolvectl dns

resolvectl status çıktısı: ens192 bağlantısında Current DNS Server 8.8.8.8 ve DNS Servers 8.8.8.8 1.1.1.1

Çıktıdaki Link 2 (ens192) satırı ağ arayüzünüzü, Current DNS Server o anda kullanılan sunucuyu, DNS Servers tanımlı tüm sunucuları gösterir. Arayüz adını (burada ens192; sizde eth0, ens18 gibi olabilir) bir sonraki adımda kullanacaksınız. NetworkManager kullanan sistemlerde aynı bilgiyi nmcli device show | grep IP4.DNS verir. Ubuntu 18.04 gibi eski sürümlerde resolvectl yoktur; aynı bilgi için systemd-resolve --status komutunu kullanın.


Ubuntu'da DNS Değiştirme: netplan ile Kalıcı Ayar

Ubuntu Server'da ağ ayarları /etc/netplan/ klasöründeki YAML dosyalarında durur. Kalıcı DNS ayarı burada yapılır.

1. Dosyayı bulun ve yedeğini alın:

ls /etc/netplan/
sudo cp /etc/netplan/00-installer-config.yaml /root/netplan-yedek.yaml

Yedeği /etc/netplan/ klasörünün içine almayın. Bu klasördeki her .yaml dosyası okunur; aynı içerikte iki dosya çakışmaya yol açar. Dosya adınız farklı olabilir (50-cloud-init.yaml, 01-netcfg.yaml gibi).

2. Dosyayı açın ve nameservers bölümünü düzenleyin:

sudo nano /etc/netplan/00-installer-config.yaml

Gerçek bir Ubuntu sunucusunda netplan dosyası: nameservers altında 8.8.8.8 ve 1.1.1.1

Statik IP'li bir sunucu için güncel netplan sözdizimiyle örnek dosya şöyledir (girintiler boşlukla yapılır, sekme kullanılmaz):

network:
  version: 2
  ethernets:
    ens192:
      addresses:
        - 203.0.113.10/24
      routes:
        - to: default
          via: 203.0.113.1
      nameservers:
        addresses: [1.1.1.1, 8.8.8.8]

Yalnızca nameservers altındaki addresses satırını değiştirin; IP adresi (addresses) ve ağ geçidi (routes) satırlarına dokunmayın. Eski kurulumlarda ekran görüntüsündeki gibi gateway4: satırı bulunabilir. Bu anahtar artık önerilmiyor ve netplan uyarı verir, ama çalışmaya devam eder; yalnızca DNS değiştirecekseniz onu da olduğu gibi bırakın.

IP adresini DHCP ile alan bir sistemde DHCP'nin verdiği DNS'i yok sayıp kendi adreslerinizi kullanmak için arayüzün altına şunu ekleyin:

      dhcp4: true
      dhcp4-overrides:
        use-dns: false
      nameservers:
        addresses: [1.1.1.1, 8.8.8.8]

3. Ayarı güvenli şekilde uygulayın:

sudo netplan try

netplan try yeni ayarı uygular ve 120 saniye onay bekler. Bağlantınız sorunsuzsa Enter'a basarak kalıcı yaparsınız. Bir hata yüzünden SSH bağlantınız koparsa hiçbir şey yapmanıza gerek kalmaz; süre dolunca eski ayara kendiliğinden döner. Bu yüzden uzaktaki bir sunucuda netplan apply yerine önce netplan try kullanın.

4. Kontrol edin:

resolvectl dns

Dosyanın başında This file is generated from information provided by the datasource. Changes to it will not persist gibi bir uyarı varsa netplan dosyasını cloud-init yönetiyordur ve yeniden başlatmada eski hâline döner. Bu durumda /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg dosyasına network: {config: disabled} satırını yazarak cloud-init'in ağ ayarını yönetmesini kapatın, sonra netplan dosyasını düzenleyin.

Geçici DNS değişikliği: resolvectl

Bir sorunu test etmek için DNS'i yeniden başlatmaya kadar geçerli olacak şekilde değiştirebilirsiniz:

sudo resolvectl dns ens192 1.1.1.1 8.8.8.8
sudo resolvectl revert ens192

İlk komut ens192 arayüzünün DNS'ini anında değiştirir, ikincisi geri alır. Bu ayar kalıcı değildir; ağ yenilendiğinde netplan'daki değerlere döner.

Tüm arayüzler için genel DNS: resolved.conf

Masaüstü sistemlerde veya birden çok arayüzü olan makinelerde genel bir DNS tanımlamak için /etc/systemd/resolved.conf.d/dns.conf dosyası oluşturabilirsiniz:

[Resolve]
DNS=1.1.1.1 8.8.8.8
FallbackDNS=9.9.9.9

Ardından sudo systemctl restart systemd-resolved çalıştırın. Bu genel adresler, arayüzlere netplan veya DHCP ile gelen adreslerle birlikte kullanılır; sunucularda en net sonuç için DNS'i netplan'da tanımlamanızı öneririz.


AlmaLinux, Rocky Linux ve RHEL'de DNS Değiştirme: nmcli

RHEL tabanlı dağıtımlarda ağı NetworkManager yönetir ve /etc/resolv.conf dosyasını o yazar. DNS'i nmcli ile değiştirin.

1. Bağlantı adını öğrenin:

nmcli -t -f NAME,DEVICE connection show --active

Çıktı ens192:ens192 ya da System eth0:eth0 gibidir; iki noktadan önceki kısım bağlantı adı, sonraki kısım arayüz adıdır.

2. DNS adreslerini tanımlayın:

sudo nmcli connection modify ens192 ipv4.dns "1.1.1.1 8.8.8.8"
sudo nmcli connection modify ens192 ipv4.ignore-auto-dns yes

İkinci komut, IP adresi DHCP ile geliyorsa DHCP'nin verdiği DNS'in yok sayılmasını sağlar. Bağlantı adında boşluk varsa tırnak içinde yazın ("System eth0"). Var olan listeye ekleme yapmak için +ipv4.dns 9.9.9.9 biçimini kullanabilirsiniz.

3. Ayarı uygulayın:

sudo nmcli device reapply ens192

device reapply, bağlantıyı kapatıp açmadan yeni ayarı uygular; SSH ile bağlıyken en güvenli yoldur. Bu komut desteklenmeyen eski bir sürümdeyseniz sudo nmcli connection up ens192 kullanabilirsiniz, ancak bu komut bağlantıyı kısa süreliğine yeniden kurar.

4. Kontrol edin:

nmcli device show ens192 | grep IP4.DNS
cat /etc/resolv.conf

/etc/resolv.conf içinde # Generated by NetworkManager başlığının altında yeni adresleri görmelisiniz. AlmaLinux 8'de bu ayar /etc/sysconfig/network-scripts/ifcfg-ens192 dosyasına DNS1= ve DNS2= satırları olarak, AlmaLinux 9'da /etc/NetworkManager/system-connections/ altındaki dosyaya kaydedilir. Bu dosyaları elle düzenlemek yerine nmcli kullanmak hata riskini azaltır.


Debian'da DNS Değiştirme

Statik IP ile kurulmuş bir Debian sunucusunda systemd-resolved ve NetworkManager genellikle kurulu değildir; /etc/resolv.conf sıradan bir dosyadır ve doğrudan düzenlenir:

ls -l /etc/resolv.conf
sudo nano /etc/resolv.conf
nameserver 1.1.1.1
nameserver 8.8.8.8

ls -l çıktısı dosyanın bir bağlantı olduğunu gösteriyorsa (örneğin resolvconf paketi ya da systemd-resolved kuruluysa) yukarıdaki yöntemlerden size uyanı kullanın. resolvconf paketi kuruluysa DNS adresleri /etc/network/interfaces dosyasında ilgili arayüzün altına dns-nameservers 1.1.1.1 8.8.8.8 satırı olarak yazılır. Bu satır, resolvconf paketi kurulu değilse hiçbir etki yapmaz; sık yapılan bir hatadır.

/etc/resolv.conf dosyasında en fazla üç nameserver satırı dikkate alınır ve sunucular yazıldığı sırayla denenir.


Linux'ta DNS Önbelleğini Temizleme

"Linux DNS flush" ya da "Ubuntu DNS cache temizleme" aramasının cevabı sisteminize göre değişir:

Sistem Komut
systemd-resolved (Ubuntu 20.04 ve sonrası) sudo resolvectl flush-caches
Ubuntu 18.04 sudo systemd-resolve --flush-caches
nscd kuruluysa sudo nscd -i hosts
dnsmasq kuruluysa sudo systemctl restart dnsmasq

AlmaLinux ve Debian'ın varsayılan kurulumunda sistem genelinde bir DNS önbelleği yoktur; temizlemeniz gereken bir şey de yoktur. Önbelleğin gerçekten dolu olup olmadığını systemd-resolved kullanan sistemlerde resolvectl statistics komutuyla görebilirsiniz:

resolvectl query ve resolvectl statistics çıktısı: önbellek boyutu, isabet ve ıskalama sayıları

Current Cache Size önbellekteki kayıt sayısını, Cache Hits ve Cache Misses önbellekten ve dışarıdan gelen cevap sayılarını gösterir. flush-caches sonrasında önbellek boyutu sıfırlanır.


Değişikliği Doğrulama

DNS'in doğru çalıştığını üç farklı yoldan kontrol edebilirsiniz:

resolvectl query anksoft.net
dig anksoft.net +short
dig @1.1.1.1 anksoft.net +short
getent hosts anksoft.net
  • resolvectl query sorguyu sistemin çözümleyicisi üzerinden yapar ve cevabın hangi arayüzden geldiğini gösterir.
  • dig @1.1.1.1 sorguyu doğrudan belirttiğiniz sunucuya gönderir. Bu çalışıyor ama dig anksoft.net çalışmıyorsa sorun sistem ayarındadır.
  • getent hosts uygulamaların gördüğü sonucu verir; /etc/hosts dosyasındaki elle eklenmiş kayıtları da hesaba katar.

dig komutu yoksa Ubuntu ve Debian'da sudo apt install dnsutils, AlmaLinux'ta sudo dnf install bind-utils ile kurabilirsiniz.


VDS Kullanıcıları İçin Uyarılar

Uzaktaki bir sunucuda DNS ayarı yaparken asıl risk DNS değil, aynı dosyadaki IP ve ağ geçidi ayarlarını bozmaktır. Bu hata SSH erişimini anında keser. Şu kurallara uyun:

  • Değişiklikten önce ağ dosyasının yedeğini ağ klasörünün dışına alın.
  • Ubuntu'da netplan apply yerine netplan try kullanın; bağlantı koparsa 120 saniye sonra eski ayar geri gelir.
  • RHEL tabanlı sistemlerde nmcli connection down komutunu SSH üzerinden çalıştırmayın; bağlantıyı kapatır ve geri açacak oturumunuz kalmaz. device reapply kullanın.
  • İkinci bir SSH oturumu açık tutun ve yeni ayarı o oturumdan test edin.
  • Çalışmayan bir DNS adresi SSH'yi kesmez, ama apt update ve dnf update komutları "Temporary failure in name resolution" hatası verir, SSL sertifikaları yenilenmez, sunucunuz e-posta gönderemez. Her zaman iki farklı hizmetten adres girin.

Bir hata yüzünden sunucuya SSH ile bağlanamıyorsanız VDS panelinizdeki web konsol ile sunucuya doğrudan bağlanıp yedek dosyayı geri yükleyebilirsiniz. Ayrıntılar için VDS uzak masaüstü ve SSH bağlantı sorunları rehberimize bakın. Yeni kurduğunuz bir Ubuntu sunucusunu güvenli hâle getirmek için Ubuntu sunucu güvenliği rehberimiz de işinize yarar.


En Sık Hatalar

  1. /etc/resolv.conf dosyasını elle düzenlemek. Bağlantı (symlink) olan bir dosyadaki değişiklik kalıcı değildir. Önce ls -l /etc/resolv.conf ile kontrol edin.
  2. Netplan dosyasında sekme kullanmak. YAML yalnızca boşlukla girinti kabul eder; netplan try sözdizimi hatası verir.
  3. Yedeği /etc/netplan/ içine almak. .yaml uzantılı yedek de okunur ve ayarlar çakışır.
  4. dns-nameservers satırını resolvconf olmadan kullanmak. Debian'da bu satır yalnızca resolvconf paketiyle çalışır.
  5. DHCP'nin DNS'i ezmesi. DHCP kullanan arayüzde use-dns: false (netplan) veya ipv4.ignore-auto-dns yes (nmcli) eklenmezse DHCP'nin verdiği DNS sizinkinin önüne geçebilir.
  6. 127.0.0.53 adresini değiştirmeye çalışmak. Bu adres yerel önbellektir; gerçek DNS sunucuları resolvectl status çıktısındadır.
  7. Sitenizin DNS kaydını sunucudan değiştirmeye çalışmak. Sunucunun DNS ayarı yalnızca sunucunun sorgu yaptığı adresi belirler. Alan adınızın A veya MX kaydı için DNS kayıtları rehberimize bakın.

Özet

  1. Önce ls -l /etc/resolv.conf ile DNS'i hangi bileşenin yönettiğini bulun.
  2. Ubuntu Server: /etc/netplan/*.yaml içinde nameservers ve ardından netplan try.
  3. AlmaLinux, Rocky, RHEL: nmcli connection modify ... ipv4.dns ve nmcli device reapply.
  4. Debian (statik IP): /etc/resolv.conf dosyasını doğrudan düzenleyin.
  5. Önbellek için resolvectl flush-caches, doğrulama için resolvectl query ve dig kullanın.

Windows bilgisayarınızda veya Windows Server'da DNS değiştirmek için Windows DNS değiştirme rehberimize, DNS hata kodlarının anlamı için DNS_PROBE_FINISHED_NXDOMAIN rehberimize göz atın. Ubuntu, Debian ve AlmaLinux kurulabilen, panelden web konsol erişimi sunan Türkiye lokasyonlu sunucular için VDS sunucu paketlerimizi, sunucu yönetmeden site yayınlamak için web hosting paketlerimizi inceleyebilirsiniz. Bir adımda takılırsanız destek talebi açın; talebinize sunucunuzun IP adresini ve gördüğünüz hata mesajını ekleyin, şifrenizi yazmayın.


Kaynaklar

Sıkça Sorulan Sorular

/etc/resolv.conf dosyasına yazdığım DNS neden siliniyor?

Güncel dağıtımlarda bu dosyayı systemd-resolved veya NetworkManager yönetir ve ağ her yenilendiğinde yeniden yazar. ls -l /etc/resolv.conf çıktısı bir bağlantı gösteriyorsa DNS'i netplan, resolvectl veya nmcli ile değiştirin.

Ubuntu'da DNS nasıl değiştirilir?

Ubuntu Server'da /etc/netplan/ altındaki YAML dosyasında ilgili arayüzün nameservers bölümüne addresses: [1.1.1.1, 8.8.8.8] yazın ve sudo netplan try ile uygulayın. Geçici değişiklik için sudo resolvectl dns <arayüz> 1.1.1.1 8.8.8.8 kullanılabilir.

resolv.conf içindeki 127.0.0.53 nedir?

systemd-resolved'in sunucu içindeki yerel önbellekli çözümleyicisidir, gerçek DNS sunucunuz değildir. Sorguların gittiği gerçek sunucuları resolvectl status komutu gösterir.

Linux'ta DNS önbelleği nasıl temizlenir?

systemd-resolved kullanan sistemlerde sudo resolvectl flush-caches, Ubuntu 18.04'te sudo systemd-resolve --flush-caches komutunu kullanın. AlmaLinux ve Debian'ın varsayılan kurulumunda sistem genelinde DNS önbelleği bulunmaz.

AlmaLinux'ta DNS nasıl değiştirilir?

Bağlantı adını nmcli connection show --active ile öğrenin, sudo nmcli connection modify <bağlantı> ipv4.dns "1.1.1.1 8.8.8.8" ve gerekiyorsa ipv4.ignore-auto-dns yes ayarını yapın, ardından sudo nmcli device reapply <arayüz> ile uygulayın.

netplan try ile netplan apply arasındaki fark nedir?

netplan apply ayarı hemen kalıcı uygular. netplan try ayarı uygular ve 120 saniye onay bekler; bağlantınız koparsa süre dolunca eski ayara döner. Uzaktaki bir sunucuda önce netplan try kullanmak erişimi kaybetme riskini ortadan kaldırır.

TR| EN