• Linux Sistem Yönetimi | LKD #8

    İnternet üzerinde bir sunucuya ulaşabilmek için IP adresi kullanılır. Ancak ziyaret ettiğimiz her sitenin IP adresini ezberlemek kullanışlı bir yöntem değildir. DNS, yazdığımız alan adının hangi IP adresine karşılık geldiğini bulmamızı sağlar.

    Alan adı çözümlemesi çalışmadığında internet bağlantımız devam ediyor olsa bile alan adlarını kullanarak servislere ulaşamayabiliriz. IP adresini bildiğimiz bir hedefe erişebilmemiz, DNS çözümlemesinin de çalıştığı anlamına gelmez.

    DNS Hiyerarşisi

    DNS tek bir sunucudan oluşmaz. Alan adları hiyerarşik bir yapı içerisinde root DNS sunucuları, üst seviye alan adı sunucuları ve alan adının kayıtlarını tutan yetkili DNS sunucuları üzerinden çözümlenir.

    Bilgisayarımız genellikle bu sunucuların tamamına kendisi tek tek gitmez. Sorguyu kullandığı recursive DNS sunucusuna gönderir. Recursive DNS sunucusu cevap önbelleğinde bulunuyorsa doğrudan geri döner. Bulunmuyorsa root sunucudan başlayarak hangi DNS sunucusuna gitmesi gerektiğini öğrenir.

    Root sunucu alan adının IP adresini doğrudan vermek zorunda değildir. Öncelikle ilgili üst seviye alan adından sorumlu DNS sunucusunu gösterir. Örneğin .tr ile biten bir alan adı için .tr sunucularına yönlendirme yapılır. Buradan da alan adının kayıtlarını tutan yetkili DNS sunucusuna ulaşılır.

    Bulunan cevap recursive DNS sunucusunun önbelleğine alınabilir. Aynı kayıt tekrar sorulduğunda bütün sorgu adımlarının yeniden uygulanması gerekmez. Böylece hem daha hızlı cevap alınır hem de diğer DNS sunucularına giden sorgu sayısı azalır.

    TTL

    DNS sunucusunun döndürdüğü kayıtlar önbellekte sonsuza kadar tutulmaz. Kayıtla birlikte verilen TTL değeri, cevabın kaç saniye boyunca önbellekte geçerli kabul edilebileceğini belirtir.

    DNS kaydına kısa bir TTL verilirse yapılan değişiklikler önbelleklerin süresi dolduktan sonra daha hızlı fark edilir. Ancak kayıt daha sık sorgulanacağı için DNS sunucularına giden sorgu sayısı artabilir.

    Uzun bir TTL kullanıldığında kayıt daha uzun süre önbellekten cevaplanabilir. Bu durum sorgu sayısını azaltır ancak IP adresinde yapılan bir değişikliğin kullanıcılara ulaşmasını geciktirebilir.

    TTL değerini değiştirmek DNS kaydını değiştirmemizi engellemez. Fakat eski kayıt daha önce uzun bir TTL değeriyle önbelleğe alınmışsa o önbellekteki sürenin dolmasını beklememiz gerekebilir. Sonradan TTL değerini düşürmemiz, daha önce alınmış kayıtların kalan süresini geriye dönük olarak değiştirmez.

    Bu nedenle bir siteyi başka bir IP adresine taşıyacağımızı önceden biliyorsak TTL değerini taşıma işleminden önce düşürebiliriz. Eski TTL süresi dolduktan sonra IP adresini değiştirdiğimizde yeni kayıt daha kısa sürede yayılabilir.

    Not: DNS kayıtlarında bulunan TTL ile IP paketlerinde bulunan TTL aynı şey değildir. DNS TTL değeri kaydın önbellekte tutulacağı süreyi, IP paketindeki TTL ise paketin geçebileceği router sayısını sınırlar.

    Linux’ta bir ismin hangi adrese karşılık geldiğini bulmak için yalnızca DNS kullanılmak zorunda değildir. Sistem yerel dosyalara veya yapılandırmada belirtilen başka kaynaklara da bakabilir.

    /etc/hosts

    /etc/hosts, IP adresleriyle isimleri yerel olarak eşleştirebildiğimiz dosyadır. Buraya yazdığımız eşleştirme yalnızca düzenlemeyi yaptığımız bilgisayarda geçerli olur. DNS sunucusundaki kaydı değiştirmez.

    Bu dosyanın en yaygın kullanım alanlarından biri, bir siteyi başka bir IP adresine taşımadan önce yeni sunucuyu test etmektir. Alan adını yalnızca kendi bilgisayarımızda yeni IP adresiyle eşleştirerek DNS kaydını değiştirmeden siteyi kontrol edebiliriz.

    /etc/hosts belirli alan adlarını farklı bir adrese yönlendirmek veya bir uygulamanın istenmeyen bir adrese ulaşmasını basit şekilde engellemek için de kullanılabilir.

    /etc/hosts dosyasının içeriği

    /etc/nsswitch.conf

    Bir isim çözümlenirken bilgisayarın hangi kaynaklara ve hangi sırayla bakacağını /etc/nsswitch.conf dosyasından görebiliriz.

    Örneğin, dosyadaki hosts: satırında files dns yazıyorsa sistem önce yerel dosyalara, ardından DNS’e bakar. Buradaki sıra değiştirilebilir. Bu nedenle Linux’un her durumda önce /etc/hosts dosyasına bakacağı şeklinde sabit bir kural yoktur; hangi kaynağın önce kullanılacağını bu satır belirler.

    Not: files ifadesinin baktığı dosya, sorgulanan bilgi türüne göre değişir. hosts için /etc/hosts, passwd için /etc/passwd kullanılır.

    /etc/resolv.conf

    DNS sorgularının hangi DNS sunucusuna göndereceğini /etc/resolv.conf dosyasından görebiliriz. Dosyadaki nameserver satırlarında kullanılacak DNS sunucularının adresleri bulunur.

    whois

    whois, bir IP adresinin hangi alan adına karşılık geldiğini bulmak için değil, IP bloğunun kime tahsis edildiğini öğrenmek için kullanılır.

    Bir IP adresini sorguladığımızda adres bloğının hangi kuruma tahsis edildiği, ilgili ağ aralığı ve iletişim bilgileri gibi sonuçlar görebiliriz. Alan adı sorgularında ise kayıt kuruluşu ve kayıt tarihleri gibi bilgiler dönebilir.

    WHOIS ayrı bir protokoldür ve klasik kullanımında TCP 43 numaralı port üzerinden çalışır. Ağdaki bir güvenlik duvarı bu bağlantıya izin vermiyorsa sorgu sonuçlanmayabilir.

    host ve Ters DNS Sorgusu

    host komutuyla bir alan adının IP adresini sorgulayabileceğimiz gibi bir IP adresi için ters DNS sorgusu da yapabiliriz. IP adresinden isim sorgulandığında ilgili PTR kaydı aranır.

    Bir IP adresi için PTR kaydı bulunması, dönen alan adının tekrar sorgulandığında aynı IP adresine karşılık geleceğini garanti etmez. İleri yönlü kaydı alan adını yöneten taraf, ters yönlü kaydı ise IP bloğunu yöneten taraf oluşturabilir. Bu iki kayıt birbirinden bağımsızdır.

    DNS Kayıtları

    DNS yalnızca alan adının IP adresini tutmaz. Farklı amaçlar için farklı kayıt türleri kullanılır.

    • A: Bir alan adını IPv4 adresiyle eşleştirir.
    • MX: Alan adına gelen e-postaların hangi posta sunucularına gönderileceğini belirtir.
    • CNAME: Bir alan adını başka bir alan adına takma ad olarak yönlendirir.
    • TXT: Alan adıyla ilgili metin biçimindeki bilgileri tutar.

    dig

    dig, DNS sunucularına sorgu göndermek ve dönen cevabın ayrıntılarını incelemek için kullanılır. Çıktıda sorgulanan kayıt türünü, alınan cevabı, TTL değeri gibi değerleri görebiliriz.

    hostname

    Bilgisayarın sistem içerisindeki adını /etc/hostname dosyasından görebiliriz. Bu dosyadaki değeri değiştirerek bilgisayarın hostname bilgisini değiştirebiliriz.

    Bunu doğrudan hostnamectl aracı ile,

    bash
    mehmet@debian ~$ sudo hostnamectl set-hostname yeni-isim

    ya da doğrudan /etc/hostname dosyasındaki değeri değiştirerek yapabiliriz. Ardından oturumumuzu yenileyerek hostname’in değiştiğini görebiliriz.

    Yalnız her ikisinde de /etc/hosts dosyasındaki değerin değişmediğini fark ettim. İsim çözümlemeye çalışan uygulamaların sorun yaşayabileceği bir durum oluşabileceğini düşünüyorum ancak net bir örnek bulamadım.

    Günün geri kalanında LAMP (apache – php – mariadb – wordpress) kurulumu yaptık. Bu kısmı daha öncesinde katılmış olduğum web servisi eğitimlerinde de tekrar ettiğimizden yazmadım, bağlantıya tıklayarak notlara ulaşabilirsiniz.

    Not: İlgili bağlantıda kurulumlar tek bir makine üzerine yapılıyor, biz sınıfta iki farklı makine üzerinden kurulum yaptık. Bir tarafa mariadb, diğer tarafa web server kurduk. Ekstra olarak,

    Veritabanı sunucusuna diğer makineden bağlanabilmek için /etc/my.cnf.d/mariadb-server.cnf dosyasındaki bind-address değerini 0.0.0.0 olarak düzenliyoruz. Böylece MariaDB yalnızca 127.0.0.1 üzerinde değil, sistemdeki bütün IPv4 arayüzlerinde bağlantı dinleyebiliyor. Bağlantının kurulabilmesi için güvenlik duvarının ve MariaDB kullanıcı yetkilerinin de buna izin vermesi gerekir.

    Ardından wp-config.php dosyasındaki DB_HOST bölümüne MariaDB sunucusunun IP adresini yazıyoruz. Böylece WordPress, diğer makinede çalışan veritabanı sunucusuna bağlanabiliyor.

    Devamını okumak için…