Bu makalede Internet Systems Consortium (ISC) tarafından geliştirilen BIND yazılımı ile Ubuntu sunucularda birincil ve ikincil DNS kurulumunu paylaşacağım. BIND ile ilgili detaylı bilgi için aşağıdaki doküman ve kılavuzlara göz atabilirsiniz.
- Dokümantasyon Sayfası
- BIND 9.10 Administrator Reference Manual (latest version, PDF format)
- BIND 9.9 Administrator Reference Manual (latest version, PDF format)
- BIND 9.8 Administrator Reference Manual (latest version, PDF format)
- BIND 9.6-ESV Administrator Reference Manual (latest version, PDF format)
İçindekiler
Gereksinimler
Kurulum için aşağıdaki gereksinimlerin karşılanması gerekmektedir:
- Alan adları tutulacak birbiri ile aynı ağda bulunan sunucu havuzu
- Birincil DNS olarak çalışacak Ubuntu sunucu
- İkincil DNS olarak çalışacak Ubuntu sunucu (opsiyonel)
Örnek Mimari
Bu makalede alan adı sunucusu olarak kullanmak üzere ns1 ve ns2 isminde iki adet sunucu kullanacağız. Alan adlarını tanımlamak üzere iki adet genel amaçlı host1 ve host2 isminde sunucu ekleyeceğiz. Her iki sunucu vm1 veri merkezinde çalışacak, aynı ağa bağlı olacak ve 10.61.2.0/24 subnetini kullanacak. Alan adı olarak da “huseyincotuk.com” alan adında çalışacaklar.
Sunucu | Rolü | FQDN | IP Adresi |
ns1 | Birincil DNS | ns1.vm1.huseyincotuk.com | 10.61.2.118 |
ns2 | İkincil DNS | ns2.vm1.huseyincotuk.com | 10.61.2.119 |
host1 | Genel amaçlı sunucu | host1.vm1.huseyincotuk.com | 10.61.2.116 |
host2 | Genel amaçlı sunucu | host2.vm1.huseyincotuk.com | 10.61.2.117 |
DNS Sunuculara BIND Kurulumu
ns1 ve ns2 sunucuların üzerinde paket yöneticisi güncellenerek ilgili paketler kurulmalıdır.
1 2 |
sudo apt-get update sudo apt-get install bind9 bind9utils bind9-doc |
BIND’ın IPv4 adresinde çalışması için aşağıdaki dosyaya -4 parametresini ekliyoruz.
sudo vi /etc/default/bind9
1 |
OPTIONS="-4 -u bind" |
Birincil DNS Yapılandırması
BIND yapılandırması için kullanılan ana dosya /etc/bind klasörünün altındaki named.conf dosyasıdır. Öncelikle recursive sorgular için kısıtlamalar getirmek üzere erişim kontrol listeleri tanımlamak gerekiyor. Aksi halde recursive sorgular herkese açık olursa DNS sunucunuz Internet üzerinden kullanılabilir durumda olup, DNS Amplification Attack saldırılarında kullanılabilmektedir.
DNS Sunucuların, sadece kendi ağınıza hizmet vermesi, genele hizmet vermemesi için gerekli olan ve sadece recursive sorgulara açık olması istenilen IP bloklarının tanımlanması için erişim kontrol listesi tanımlamak üzere named.conf.options dosyasında aşağıdaki tanımlar yapılmalıdır. Var olan options bloğundan önce aşağıdaki blok eklenmelidir.
sudo vi /etc/bind/named.conf.options
1 2 3 |
acl "trusted" { 10.61.2.0/24; # ağınıza ait IP bloğu }; |
options bloğu içerisine aşağıdaki tanımlar eklenmelidir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
... options { directory "/var/cache/bind"; recursion yes; # resursive sorgular icin allow-recursion { trusted; }; # "trusted" listesinden gelen recursive sorguları kabul etmesi icin listen-on { 10.61.2.118; }; # sadece ilgili IP adresinde dinlemesi icin allow-transfer { none; }; # zone transferini engellemek icin forwarders { 8.8.8.8; 8.8.4.4; }; ... }; |
Daha sonra DNS zone ayarları için named.conf.local dosyası düzenlenmelidir.
sudo vi /etc/bind/named.conf.local
1 2 3 4 5 |
zone "vm1.huseyincotuk.com" { type master; file "/etc/bind/zones/db.vm1.huseyincotuk.com"; # zone dosyası lokasyonu allow-transfer { 10.61.2.119; }; # ns2 IP adresi (ikincil DNS sunucusuna izin) }; |
Reverse DNS için aşağıdaki zone tanımının aynı dosyaya eklenmesi gerekmektedir.
1 2 3 4 5 |
zone "2.61.10.in-addr.arpa" { type master; file "/etc/bind/zones/db.10.61.2"; # 10.61.2.0/24 subnet allow-transfer { 10.61.2.119; }; # ns2 IP adresi }; |
Eğer birden fazla subnet için DNS yönetiliyorsa her subnet için bir zone tanımı yapılmalı ve ilgili dosya oluşturulmalıdır. Böylece BIND üzerinde gerekli zone tanımları tamamlanmış olacaktır. Ardından tanımlı zone’lar için forward ve reverse zone dosyaları oluşturulmalıdır.
Forward Zone Dosyalarının Oluşturulması
Forward zone dosyaları ilgili alan adı için forward DNS kayıtlarının yapıldığı dosyalardır. BIND kendisine gelen “sunucu1.vm1.huseyincotuk.com” gibi bir DNS sorgusuna karşılık gelen IP adresine tanımlanan forward zone dosyasından bakar. Buradaki örnekte gelen sorguya karşılık bakacağı dosyanın tam yolu /etc/bind/zones/db.vm1.huseyincotuk.com şeklindedir.
Zone dosyalarını tutmak üzere bir klasör (/etc/bind/zones) açılarak ilgili dosyalar oluşturulmalıdır. Zone dosyaları için db.local dosyası baz alınabilir.
1 2 3 4 |
sudo mkdir /etc/bind/zones cd /etc/bind/zones sudo cp ../db.local ./db.vm1.huseyincotuk.com sudo vi /etc/bind/zones/db.vm1.huseyincotuk.com |
db.local dosyasından kopyalanan içerik başlangıçta aşağıdaki gibi olmalıdır.
1 2 3 4 5 6 7 8 9 10 11 |
$TTL 604800 @ IN SOA localhost. root.localhost. ( 2 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS localhost. ; bu satirlar silinecek @ IN A 127.0.0.1 ; bu satirlar silinecek @ IN AAAA ::1 ; bu satirlar silinecek |
Öncelikle SOA kaydı ns1 sunucusuna ait FQDN ile güncellenmelidir. Ayrıca bu dosyalarda kullanılan seri numarası bu dosya her değiştirildiğinde arttırılmalıdır, aksi halde BIND yapılan değişiklikleri göz ardı edecektir. Burada pratik bir yöntem seri numarası olarak yıl-ay-gün-versiyon şeklinde (2015122401 gibi) bir patern kullanmaktır. Ardından dosyanın sonunda yer alan üç satır silinmelidir. Dosyanın sonuna alan adı sunucularına ait NS (nameserver) kayıtları eklenmelidir. Son olarak A (adres) kayıtları eklenerek dosya aşağıdaki benzer hale getirilmelidir. Alan adlarından sonra gelen noktaların atlanmaması önemlidir. Alan adı kayıt türleri ve ilgili detaylı bilgiyi daha önce yayınlanan ilgili makalede bulabilirsiniz. Dosyanın son hali aşağıdaki gibi olmalıdır:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
; ; BIND data file for local loopback interface ; $TTL 604800 @ IN SOA ns1.vm1.huseyincotuk.com. admin.vm1.huseyincotuk.com. ( 2015122401 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; ;name servers - NS records IN NS ns1.vm1.huseyincotuk.com. IN NS ns2.vm1.huseyincotuk.com. ; name servers - A records ns1.vm1.huseyincotuk.com. IN A 10.61.2.118 ns2.vm1.huseyincotuk.com. IN A 10.61.2.119 ; 10.61.2.0/24 - A records host1.vm1.huseyincotuk.com. IN A 10.61.2.116 host2.vm1.huseyincotuk.com. IN A 10.61.2.117 |
Reverse Zone Dosyalarının Oluşturulması
Reverse zone dosyaları, reverse alan adı sorgulamaları için PTR kayıtlarının tanımlandığı dosyalardır. BIND bir IP adresi sorgusu aldığında reverse zone dosyasına bakarak IP adresine karşılık gelen tam alan adı çözümlemesini yapar. Örneğin 10.61.2.117 IP adresi geldiğinde ilgili reverse zone dosyasından bu IP adresine karşılık gelen satırı bularak alan adı tanımını döndürür. db.127 dosyası baz alınarak oluşturulan db.10.61.2 dosyasının ilk içeriği aşağıdaki gibi olacaktır.
1 2 |
sudo cp ../db.127 db.10.61.2 sudo vi db.10.61.2 |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
; ; BIND reverse data file for local loopback interface ; $TTL 604800 @ IN SOA localhost. root.localhost. ( 1 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS localhost. ; bu satirlar silinecek 1.0.0 IN PTR localhost. ; bu satirlar silinecek |
Benzer şekilde SOA kaydı ve seri numarası değiştirilmelidir. Ardından dosyanın sonundaki iki satır silinerek alan adı sunucularına ait kayıtlar girilmelidir. Sonrasında tanım yapılan subnetteki tüm sunucular için PTR kayıtları eklenmelidir. Buradaki örnekte /24 subnet kullanıldığı için sadece son oktetin girilmesi gerekmektedir. Dosyanın son hali aşağıdaki gibi olmalıdır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
$TTL 604800 @ IN SOA vm1.huseyincotuk.com. admin.vm1.huseyincotuk.com. ( 2015122401 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; name servers IN NS ns1.vm1.huseyincotuk.com. IN NS ns2.vm1.huseyincotuk.com. ; PTR Records 118 IN PTR ns1.vm1.huseyincotuk.com. ; 10.61.2.118 119 IN PTR ns2.vm1.huseyincotuk.com. ; 10.61.2.119 116 IN PTR host1.vm1.huseyincotuk.com. ; 10.61.2.116 117 IN PTR host2.vm1.huseyincotuk.com. ; 10.61.2.117 |
Dosyalara gerekli tanımları yaptıktan sonra tüm named.conf* dosyalarındaki syntax kontrolü için aşağıdaki komut çalıştırılır.
1 |
sudo named-checkconf |
Eğer hiç bir syntax hatası yoksa cursor shell’e dönecektir. Hata varsa hata ile ilgili detayları görebilirsiniz. Zone dosyalarının kontrolü için ise named-checkzone komutu çalıştırılmalıdır. Örneğin vm1.huseyincotuk.com forward zone yapılandırmasını kontrol için aşağıdaki komut çalıştırılabilir.
1 |
sudo named-checkzone vm1.huseyincotuk.com db.vm1.huseyincotuk.com |
Reverse zone dosyaları da benzer şekilde aşağıdaki gibi kontrol edilebilir:
1 |
sudo named-checkzone 2.61.10.in-addr.arpa /etc/bind/zones/db.10.61.2 |
Kontrollerin ardından bind yeniden başlatılarak değişikliklerin etkin hale gelmesi sağlanır.
1 |
sudo service bind9 restart |
İkincil DNS Yapılandırması
DNS servisinin kritik olması sebebiyle bir çok durumda yedekli olarak kurulması ve hizmet vermesi tercih edilmektedir. Birincil DNS sunucusunun servis dışı kalması durumunda ikincil DNS sunucusu devreye girerek kesintisiz şekilde alan adlarının çözümlenmesini sağlamaktadır. Birincil DNS sunucusuna benzer şekilde ikincil DNS sunucusunda aşağıdaki tanımlar yapılmalıdır.
1 |
sudo vi /etc/bind/named.conf.options |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
acl "trusted" { 10.61.2.0/24; # ağınıza ait IP bloğu }; options { directory "/var/cache/bind"; recursion yes; # resursive sorgular icin allow-recursion { trusted; }; # "trusted" listesinden gelen recursive sorguları kabul etmesi icin listen-on { 10.61.2.119; }; # sadece ilgili IP adresinde dinlemesi icin allow-transfer { none; }; # zone transferini engellemek icin forwarders { 8.8.8.8; 8.8.4.4; }; ... }; |
İkincil DNS sunucusu için zone tanımı yaparken type slave seçildikten sonra file parametresinin bir path olması gerekmemekle birlikte, masters parametresinde birincil DNS sunucu IP adresinin eklenmesi sağlanmalıdır.
1 |
sudo vi /etc/bind/named.conf.local |
1 2 3 4 5 6 7 8 9 10 11 |
zone "vm1.huseyincotuk.com" { type slave; file "slaves/db.vm1.huseyincotuk.com"; # zone dosyası lokasyonu masters { 10.61.2.118; }; # ns1 IP adresi (master DNS) }; zone "2.61.10.in-addr.arpa" { type slave; file "slaves/db.10.61.2"; # 10.61.2.0/24 subnet masters { 10.61.2.118; }; # ns1 IP adresi (master DNS) }; |
İstemcilerde DNS Sunucu Ayarları
Ubuntu veya Debian türevlerinde resolv.conf içerisinde boot sırasında eklenen head dosyasında aşağıdaki gibi alan adı ve DNS sunucu tanımları yapılabilir.
1 |
sudo vi /etc/resolvconf/resolv.conf.d/head |
1 2 3 |
search vm1.huseyincotuk.com # varsayilan alan adi nameserver 10.61.2.118 # ns1 nameserver 10.61.2.119 # ns2 |
resolv.conf dosyasının yeniden üretilmesi için aşağıdaki komut çalıştırılır.
1 |
sudo resolvconf -u |