dnsmasq nedir ve kullanım alanları nelerdir?

Bu flood’da DNS, DHCP, TFTP sunucuları tek bir programda açık kaynaklı olarak sunan, biz geliştiricilerin başucu yazılımlarından dnsmasq'ı ve bazı kullanım alanlarını inceleyeceğiz.

dnsmasq fonksiyon zenginliği, kullanım kolaylığı ve hatasız çalışması ile küçük ve orta ölçekli birçok sistemde kendisine yer bulmaktadır. dnsmasq, ilerleyen flood'larda inceleyeceğimiz bazı sistemlerde de konumlandırıldığı için doğru anlaşılması önemli bir programdır.

Adından da anlaşılacağı gibi dnsmasq'ın en çok kullanılan özelliği DNS sunucudur. dnsmasq, DNS sunucu olarak üzerinde yapılandırılan domain'ler için IP adresine dönüşümü sağlar. Kendi yönetmediği isimleri çözmek için de upstream adlı başka DNS sunuculara başvurur.

Örneğin, gokhan․dev domain'i dnsmasq'ta tanımlandıysa, dnsmasq bu domain'deki www․gokhan․dev sorgusuna kendi kayıtlarından cevap verecektir. bing.com sorulduğunda ise kendi kontrol etmediği domain'ler için kullandığı DNS sunucusuna sorup cevabı istemciye dönecektir.

dnsmasq konfigürasyon dosyasında tanımlanan domain'lerdeki kayıtlara ek olarak üzerinde koştuğu bilgisayarın hosts dosyasındaki kayıtlar için de cevap döner. dnsmasq üzerinde istediğimiz domain'i tanımlayabileceğimiz için özellikle mobil cihazların trafiğinin dinlenmesi gereken senaryolarda cihaza DNS Spoofing atak yapmak yani DNS sorgusu sonucunda gerçek sunucu adresi yerine trafiğin dinleneceği sunucunun adresini vermek mümkün olur. Aşağıdaki ekran görüntüsünde dnsmasq'a yapılan google․com sorgusuna lokal IP ile cevap verilmiştir.

dnsmasq klasik bir DNS sunucu gibi yaptığı istekleri belirli bir süre için cache'ler ve sonraki sorgularda performans avantajı sağlar ancak istenirse cache devre dışı bırakılabilir. Negative Caching olarak bilinen ve DNS sunucudan gelen "kayıt bulunamadı" şeklindeki olumsuz cevapları da cache'leyen mekanizma böylece devre dışı bırakılmış olur. İsim kayıtları ilk yapılırken ve değiştirirken cache tam bir baş belası olmaktadır. Aslında dnsmasq bütün cache'i devre dışı bırakmadan Negative Cache yapılmamasını da sağlayabilmektedir.

dnsmasq, kontrolü dışındaki kayıtlar için en sağlıklı olduğunu düşündüğü upstream server'ı kullanır, böylece en sağlıklı sunucu seçilmiş olur ancak istenirse --all-servers opsiyonu ile kayıt sorguları bütün sunuculara gönderilir ve en kısa sürede dönen cevap kullanılır.

dnsmasq kompleks kullanım senaryolarında a) host üzerinde çalıştırılan container'lara DNS sunucusu olarak verilebilir b) Minikube'daki Kubernetes servislerine isimleri ile erişmek için kullanılabilir c) Vagrant'a plugin yardımıyla entegre edilebilir.

dnsmasq'ın ikinci kullanım alanı DHCP sunucu olarak görev yapmaktır. Tanımlanan IP aralığındaki IP'ler istekte bulunan sunuculara dağıtabilir ve cihazların bütün ağ (Default Gateway, DNS Server, Hostname) konfigürasyonları yapılabilir.

dnsmasq gelişmiş DHCP sunucularda bulunan birçok özelliği de desteklemektedir. Bunlar belirli bir MAC adresine veya bir hostname'e sürekli aynı IP adresini verme, kablolu, kablosuz ağlara farklı ağ parametreleri gönderme gibi özelliklerdir.

Son olarak dnsmasq bünyesindeki DHCP ve TFTP sunucuları ile önceki flood'lardan birinde bahsettiğimiz PXE - Preboot Execution Environment standardına göre cihazların ağ üzerinden boot edilmesi için "komple" bir çözüm sunmakta ve bu alanda yoğun olarak kullanılmaktadır.