← Tüm Projeler

Bağlantı Gitmiyor Orta

Senaryo tabanlı bir Linux sorun giderme vakası: sunucu IP'ye ping atabiliyor ama hiçbir alan adını çözemiyor. resolv.conf tertemiz görünüyor — gerçek sorun strace ile bulunan, nsswitch.conf içindeki tek bir harflik bir yazım hatası.

Linux Troubleshooting Tamamlandı DNS + strace

Şikayet

Müşteri sunucusunda ping 8.8.8.8 ve ping 1.1.1.1 sorunsuz çalışıyor — yani IP seviyesinde internet erişimi tam. Ama ping google.com ya da apt update çalıştırıldığında hata alınıyor. /etc/resolv.conf kontrol edilmiş, nameserver 8.8.8.8 satırı doğru, dosya izinleri sorunsuz. Klasik "önce resolv.conf'a bak" tavsiyesi burada işe yaramıyor.

Doğrulama

SSH ile bağlanıp şikayeti doğruladım: domain tabanlı her istek başarısız oluyor, IP tabanlı her istek çalışıyor. /etc/resolv.conf ve arayüz durumunu (ifconfig down/up) kontrol ettim — hepsi normal görünüyordu.

strace ile Kök Neden Analizi

Sorun dosyalarda görünmediği için, ping komutunun çalışırken hangi dosyalara dokunduğunu görmek için strace kullandım:

strace -e trace=open,openat ping google.com

Çıktıda ilgili satırlar sırasıyla /etc/nsswitch.conf, /etc/host.conf, /etc/resolv.conf ve /etc/hosts dosyalarına uğruyordu — ve hemen ardından şu hata tekrar tekrar geliyordu:

openat(AT_FDCWD, ".../libnss_mdsn4_minimal.so.2", O_RDONLY|O_CLOEXEC)
    = -1 ENOENT (No such file or directory)

İlk uğranılan dosya nsswitch.conf olduğu için önce onun içeriğine baktım.

Bulgu: Tek Harflik Yazım Hatası

nsswitch.conf'ta hosts satırında, olması gereken dns yerine dsn yazılmıştı:

hosts: files dsn   # olması gereken: dns

Bunu düzeltip tekrar denediğimde ping google.com ve apt update sorunsuz çalıştı.

Neden Bu Hatayı Veriyordu?

Linux'ta bir uygulama bir alan adını çözmek istediğinde doğrudan resolv.conf'a gitmez — önce NSS (Name Service Switch) katmanı, nsswitch.conf'a bakarak "hosts" için hangi modülün kullanılacağını sorar. Sistem dns yerine yazım hatasıyla dsn gördüğü için, gerçek modül olan libnss_mdns4_minimal.so.2 yerine var olmayan libnss_mdsn4_minimal.so.2'yi aramaya çalışıyor ve bulamadığı için domain çözümlemesi tamamen devre dışı kalıyordu — ama IP tabanlı trafiği bu katman hiç etkilemediği için ping IP ile çalışmaya devam ediyordu.

Öğrendiklerim

Hızlı teşhis kuralı: dig çalışıyor ama ping/uygulama çözemiyorsa, sorun DNS sunucusunda değil — doğrudan nsswitch.conf'a bak.