Linux sunucularında ya da masaüstü dağıtımlarında bir komut çalıştırırken ya da bir adrese bağlanmaya çalışırken Temporary failure in name resolution hatasıyla karşılaşmak oldukça yaygındır. Bu mesaj, sistemin bir alan adını IP adresine çeviremediğini, yani isim çözümlemenin başarısız olduğunu söyler. Bu rehberde hatanın ne anlama geldiğini, nerede çıktığını, en sık nedenlerini ve adım adım çözümlerini komut örnekleriyle ele alıyoruz.

Daha geniş bir çerçeve için DNS hataları rehberine, ilgili konular için DNS sunucusu yanıt vermiyor ve SERVFAIL DNS hatası yazılarına bakabilirsiniz.

Temporary Failure in Name Resolution Nedir?

Bu hata, Linux sistemlerinde isim çözümleme (name resolution) işleminin başarısız olduğunu bildirir. Bir alan adına (örneğin github.com) bağlanmak isteyen bir program, önce DNS üzerinden alan adının IP karşılığını öğrenmek zorundadır. Sistem bu sorguyu yapacak bir DNS sunucusu bulamazsa ya da sunucuya ulaşamazsa, çözümleme kütüphanesi "Temporary failure in name resolution" mesajını döndürür.

Buradaki "temporary" (geçici) ifadesi yanıltıcı olabilir; hata, bağlantının kalıcı olarak bozulduğu anlamına gelmez, ama çoğu zaman yapılandırma düzeltilmeden de kendiliğinden geçmez. Önemli olan şudur: Sorun neredeyse her zaman sistemin DNS yapılandırmasında, ağ servisinde ya da çözümleyici ayarlarındadır; uzaktaki sunucuyla ilgili değildir.

Hata Nerede ve Nasıl Çıkar?

Bu hata ağırlıklı olarak Linux sunucularında ve masaüstü dağıtımlarında görülür. En sık rastlanan senaryo, yeni kurulmuş ya da yeniden başlatılmış bir sunucuda ağ ve DNS yapılandırmasının henüz oturmamış olmasıdır. Docker konteynerlerinde, sanal makinelerde ve bulut sunucularında da sık karşılaşılır.

Hata, paket yöneticisi güncellemesi (apt update), git işlemleri, curl istekleri ya da basit bir ping denemesi sırasında belirir. Hepsinin ortak noktası, bir alan adını çözmeye çalışmalarıdır. IP adresine doğrudan ping atabiliyorsanız (örneğin ping 8.8.8.8 çalışıyorsa) ama alan adları çözülmüyorsa, bu neredeyse kesin olarak bir DNS yapılandırma sorunudur, ağ bağlantısı değil.

  • apt/dnf: "Could not resolve ... Temporary failure in name resolution".
  • ping alan adi: "Temporary failure in name resolution".
  • curl/wget: "Could not resolve host".
  • Docker/VM/bulut: Konteyner veya sanal makine içinde çözümleme başarısız.

Hatanın Nedenleri

En yaygın neden, /etc/resolv.conf dosyasının boş olması, hatalı olması ya da geçerli bir nameserver satırı içermemesidir. Bu dosya, sistemin hangi DNS sunucusunu kullanacağını belirler; içi boşsa ya da erişilemeyen bir sunucuyu gösteriyorsa çözümleme yapılamaz. Modern dağıtımlarda bu dosya çoğunlukla systemd-resolved tarafından yönetilir ve yanlış yönetildiğinde sorun çıkabilir.

İkinci büyük neden, ağ servisinin (NetworkManager, systemd-networkd veya ilgili servis) düzgün çalışmaması ya da yeniden başlatılması gerekmesidir. Üçüncü neden, DHCP'nin DNS sunucusu bilgisini sisteme doğru aktaramamasıdır. Docker ortamlarında ise konteynerin DNS yapılandırmasının ana makineden farklı olması ya da hatalı aktarılması sorunu tetikleyebilir. Güvenlik duvarının 53 numaralı DNS portunu engellemesi de daha nadir ama olası bir nedendir.

  • /etc/resolv.conf: Boş, hatalı veya geçersiz nameserver satırı.
  • systemd-resolved: Servisin çalışmaması veya yanlış yapılandırılması.
  • Ağ servisi: NetworkManager / systemd-networkd sorunu.
  • DHCP: DNS bilgisinin sisteme aktarılamaması.
  • Docker / güvenlik duvarı: Konteyner DNS'i veya 53/UDP engeli.

Bu hatanın bir diğer sık nedeni, sistemin kalıcı olmayan (geçici) bir ağ durumunda olmasıdır: Örneğin önyükleme sırasında ağ servisi henüz tam olarak ayağa kalkmadan bir servis DNS sorgusu yapmaya çalışırsa bu mesajı alabilir. Benzer şekilde, VPN bağlantısı kurulurken ya da kapanırken DNS yapılandırması geçici olarak tutarsız hâle gelebilir ve çözümleme kısa süreliğine başarısız olabilir.

Adım Adım Teşhis

İlk olarak sorunun gerçekten DNS mi yoksa ağ bağlantısı mı olduğunu ayırın. Bir IP adresine doğrudan ping atın; başarılıysa ağ çalışıyor, sorun DNS'tedir. Ardından /etc/resolv.conf içeriğini ve systemd-resolved durumunu kontrol edin.

# Ag mi DNS mi? IP'ye dogrudan ping
ping -c 3 8.8.8.8

# Alan adi cozuluyor mu?
ping -c 3 github.com

# Hangi DNS sunucusu tanimli?
cat /etc/resolv.conf

# systemd-resolved durumu
resolvectl status
systemctl status systemd-resolved

# Dogrudan DNS sorgusu
dig github.com
nslookup github.com 1.1.1.1

ping 8.8.8.8 çalışıp ping github.com çalışmıyorsa tanı nettir: DNS çözümleme bozuk. cat /etc/resolv.conf çıktısında hiç nameserver satırı yoksa ya da erişilemeyen bir adres varsa, sorunun kaynağı bellidir. resolvectl status ile hangi sunucuların kullanıldığını görebilirsiniz.

Adım Adım Çözümler

En hızlı çözüm, geçerli bir DNS sunucusunu sisteme tanıtmaktır. Geçici bir düzeltme için /etc/resolv.conf dosyasına güvenilir bir sunucu ekleyebilirsiniz. Ancak bu dosya birçok sistemde otomatik olarak yeniden yazıldığı için, kalıcı çözüm systemd-resolved ya da ağ yöneticisi üzerinden yapılmalıdır.

# GECICI: resolv.conf'a DNS ekle (yeniden baslatmada silinebilir)
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf
echo "nameserver 1.1.1.1" | sudo tee -a /etc/resolv.conf

# Onbellegi temizle
sudo resolvectl flush-caches

# Dogrula
ping -c 3 github.com

Kalıcı çözüm için systemd-resolved kullanıyorsanız DNS sunucusunu yapılandırma dosyasından tanımlayın ve servisi yeniden başlatın. Ağ servisinin de yeniden başlatılması çoğu durumda sorunu giderir. Aşağıdaki komutlar bu adımları özetliyor.

# KALICI: systemd-resolved yapilandirmasi
sudo nano /etc/systemd/resolved.conf
# [Resolve] altina:
#   DNS=8.8.8.8 1.1.1.1
#   FallbackDNS=8.8.4.4 1.0.0.1

sudo systemctl restart systemd-resolved

# resolv.conf'u systemd-resolved'e baglayan sembolik link
sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf

# Ag servisini yeniden baslat (duruma gore biri)
sudo systemctl restart NetworkManager
sudo systemctl restart systemd-networkd

Değişikliklerden sonra önbelleği temizleyin ve bir alan adını ping ya da dig ile test edin. Docker konteynerinde çalışıyorsanız, konteynerin kendi /etc/resolv.conf dosyasını kontrol edin ya da Docker arka plan servisinin DNS ayarlarını (daemon yapılandırması) gözden geçirin. Güvenlik duvarınızın 53/UDP ve 53/TCP trafiğine izin verdiğinden emin olun.

  • IP'ye ping atarak sorunun DNS olduğunu doğrulayın.
  • /etc/resolv.conf içine geçerli bir nameserver ekleyin (geçici).
  • systemd-resolved ile kalıcı DNS tanımlayın ve servisi yeniden başlatın.
  • Ağ servisini (NetworkManager/systemd-networkd) yeniden başlatın.
  • Önbelleği temizleyin, Docker ve güvenlik duvarı DNS ayarlarını kontrol edin.

Değişiklikleri yaptıktan sonra sorunun yeniden başlatmaya dayanıklı olduğunu doğrulamak için sunucuyu bir kez yeniden başlatıp çözümlemenin hâlâ çalıştığını test edin. Kalıcı yapılandırma doğru yapıldıysa, yeniden başlatma sonrasında /etc/resolv.conf ya da systemd-resolved ayarları geçerli DNS sunucusunu göstermeye devam etmeli ve alan adları sorunsuz çözülmelidir. Bu son doğrulama, geçici bir yamanın kalıcı bir çözümle karıştırılmasını önler.

Hızlı Çözüm Özeti

Aşağıdaki tablo, gözlemlediğiniz duruma göre öncelikli çözümü özetliyor. Önce IP'ye ping testi yaparak sorunun DNS mi ağ mı olduğunu belirlemek, en doğru başlangıç noktasıdır.

GözlemOlası kaynakÖncelikli çözüm
IP'ye ping OK, ada ping FAILDNS yapılandırmasıresolv.conf / systemd-resolved düzelt
resolv.conf boşnameserver tanımsızGeçerli nameserver ekle
Yeniden başlatmada bozuluyorsystemd-resolved/NM yazıyorKalıcı yapılandırma yap
Sadece Docker içindeKonteyner DNS'iDocker daemon DNS ayarı

Birden fazla sunucu yönetiyorsanız, aynı hatayı tekrar tekrar yaşamamak için DNS yapılandırmasını kurulum sürecinizin standart bir parçası hâline getirin. Sunucu şablonlarınızda ya da yapılandırma yönetimi araçlarınızda geçerli bir DNS sunucusunu baştan tanımlamak, yeni kurulan makinelerde isim çözümleme sorunlarının önüne büyük ölçüde geçer ve hata ayıklamaya harcadığınız zamanı azaltır.

Sık Sorulanlar

"Temporary" yazıyor, beklesem geçer mi?

Genellikle hayır. "Temporary" ifadesi çözümleyicinin o anki başarısızlığını tanımlar; ancak altta yatan yapılandırma sorunu (eksik nameserver, durmuş servis) düzeltilmeden hata kalıcı olarak sürer. Beklemek yerine resolv.conf ve systemd-resolved kontrolü yapın.

IP'ye ping çalışıyor ama alan adları çözülmüyor, neden?

Bu, ağ bağlantınızın sağlam olduğunu ama DNS çözümlemenin bozuk olduğunu gösterir. Sistem bir DNS sunucusu bulamıyor ya da ona ulaşamıyordur. Çözüm, geçerli bir nameserver tanımlamak ve ilgili servisleri yeniden başlatmaktır.

resolv.conf'a ekleme yapıyorum ama siliniyor, ne yapmalıyım?

Bu normaldir; systemd-resolved veya NetworkManager dosyayı yönetir ve yeniden yazar. Kalıcı çözüm için DNS'i bu servislerin kendi yapılandırma dosyalarından tanımlamanız ve servisi yeniden başlatmanız gerekir.

Docker konteynerinde bu hatayı alıyorum, farklı mı çözülür?

Mantık aynıdır ama yapılandırma yeri farklıdır. Konteynerin /etc/resolv.conf dosyasını ya da Docker daemon'ın DNS ayarlarını kontrol edin. Ana makinenin DNS'i çalışıyorsa, konteynere doğru DNS sunucusunu aktarmak sorunu çözer.