DNS, Alan Adı Sistemi anlamına gelir, ana bilgisayar adlarını veya URL’leri IP adreslerine çevirir. Örneğin, tarayıcıya www.kadirkozan.com.tr yazarsak, DNS sunucusu alan adını ilişkili ip adresine çevirir. IP adreslerinin her zaman hatırlanması zor olduğundan, www.kadirkozan.com.tr gibi ana bilgisayar adlarını 116.202.53.24’e çevirmek için DNS sunucuları kullanılır. Böylece IP adresi yerine alan adlarını hatırlamayı kolaylaştırır.
Bu makalemde CentOS 8 işletim sisteminde yerel bir DNS sunucusu kurulması ve yapılandırılması yer almaktadır.
DNS Kurulumu
Bu makalem için, üç node kullanacağım. Biri Ana DNS (Master Server) sunucusu olarak hareket edecek, ikinci sistem İkincil DNS olarak hareket edecek ve üçüncüsü de bizim DNS istemcimiz olacaktır. Bu sistemlerin bilgileri aşağıdaki tabloda yer almaktadır.
Bilgisayar Adı | İşletim sistemi | Role | IP Adresi | FQDN |
DNS01 | Centos 8 (minimal kurulum) | DNS Master | 192.168.100.11/24 | dns02.kadirkozan.com.tr |
DNS02 | Centos 8 (minimal kurulum) | DNS Secondary | 192.168.100.12/24 | dns01.kadirkozan.com.tr |
Centos01 | Centos 8 (GUI kurulum) | Linux Client | 192.168.100.211/24 | centos01.kadirkozan.com.tr |
Master Server – Kurulumu ve Yapılandırılması
BIND9 servisini Master sunucuya kurmak için “yum insall bind* -y” komutu çalıştırılır.
Kurulan paketler ve sürüm bilgileri;
Master Server – BIND Servisinin Aktifleştirilmesi ve Başlatılması
DNS hizmetini etkinleştirmek, başlatmak ve durumunu kontrol etmek için aşağıdaki komutları çalıştırınız.
systemctl enable named systemctl start named systemctl status named |
Master Server – BIND Servisi için Firewall Yapılandırması
BIND servisini yeniden başlattıktan sonra sunucunun erişimi için IPtables içerisinde bir konfigürasyon işlemi yapılması gerekiyor. Bunun için bir metin editörü ile “/etc/sysconfig/iptables.config” dosyası içeriği açılır ve içerisine port 53 ‘ün TCP ve UDP protokollerinin açılması ve dışarıdan erişilebilmesi için aşağıdaki satırlar eklenir.
vi /etc/sysconfig/iptables.config |
-A INPUT -p udp -m state –state NEW –dport 53 -j ACCEPT -A INPUT -p tcp -m state –state NEW –dport 53 -j ACCEPT |
Yapılan bu değişiklerin geçerli olması için iptables servisi yeniden başlatılır.
service iptables restart |
Yada daha kolay bir yöntem olan “firewall-cmd” aracı ile aşağıdaki komutlar çalıştırılarak DNS servisi için izin tanımlanır.
firewall-cmd –permanent –add-port=53/tcp firewall-cmd –permanent –add-port=53/udp firewall-cmd –reload |
Master Server – İzinleri, Sahipliği ve SELinux’u Yapılandırılması
Aşağıdaki komutları çalıştırınız.
chgrp named -R /var/named chown -v root:named /etc/named.conf restorecon -rv /var/named restorecon /etc/named.conf |
Master Server BIND Servisi Konfigürasyon Yapılandırması
DNS paketi kurulduktan sonra DNS sunucusunun yapılandırılması için “etc/named.conf” dosyası açılır ve bu dosya içerisindeki belirli yerlerin IP adresleri değiştirilir. Bu çıktıda kalın – kırmızı ile seçtiğim kısımlar değiştirilir.
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
options {
listen-on port 53 { 127.0.0.1; 192.168.100.11;}; ### Master Server DNS IP Address ###
# listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
allow-query { localhost; 192.168.100.0/24;}; ### DNS Server IP Range + Subnet Mask ###
allow-transfer{ localhost; 192.168.100.12; }; ### Slave/Secondary DNS Server IP Address ###
/*
- If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
- If you are building a RECURSIVE (caching) DNS server, you need to enable
recursion.
- If your recursive DNS server has a public IP address, you MUST enable access
control to limit queries to your legitimate users. Failing to do so will
cause your server to become part of large scale DNS amplification
attacks. Implementing BCP38 within your network would greatly
reduce such attack surface
*/
recursion yes;
dnssec-enable yes;
dnssec-validation yes;
dnssec-lookaside auto;
/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";
managed-keys-directory "/var/named/dynamic";
pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
zone "." IN {
type hint;
file "named.ca";
};
zone "kadirkozan.com.tr" IN {
type master;
file "forward.kadirkozan";
allow-update { none; };
};
zone "100.168.192.in-addr.arpa" IN {
type master;
file "reverse.kadirkozan";
allow-update { none; };
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
Master Server’da – Forward Zone Kaydının oluşturulması ve yapılandırılması
Terminal üzerinden metin editörü ile “/var/named” dizini altında aşağıdaki komut ile forward için bir zone kayıt dosyası oluşturuyoruz.
vi /var/named/forward.kadirkozan
Dosyayı oluşturup, açtıktan sonra dosya içerisini aşağıdaki şekilde zone bilgilerini ekliyoruz.
$TTL 86400
@ IN SOA dns01.kadirkozan.com.tr. root.kadirkozan.com.tr. (
2011071001 ;Serial
3600 ;Refresh
1800 ;Retry
604800 ;Expire
86400 ;Minimum TTL
)
@ IN NS dns01.kadirkozan.com.tr.
@ IN NS dns02.kadirkozan.com.tr.
@ IN A 192.168.100.11
@ IN A 192.168.100.12
@ IN A 192.168.100.211
dns01 IN A 192.168.100.11
dns02 IN A 192.168.100.12
centos01 IN A 192.168.100.211
Yukarıdaki şekilde kendimize ve senaryomuza göre bir forwarder zone kaydı oluşturduk. Burada yönlendirme kaydımızın hangi domain adına, hangi IP adresine bağlı olduğunu ve hangi IP adreslerinin, hangi makineler ile ilişkili olduğunu gösterir.
Master Server – Reverse Zone Kaydının tanımlanması
Forward kaydı gibi, aynı şekilde metin editörü ile terminal üzerinden bir dosya oluşturulur.
Senaryoya göre reverse zone kaydımızı oluşturup, ardından dosyayı kaydedip kapatıyoruz. Ardından DNS bind servisi yeniden başlatılır. Bu işlem için aşağıdaki komutları çalıştırınız.
vi /var/named/reverse.kadirkozan
$TTL 86400
@ IN SOA dns01.kadirkozan.com.tr. root.kadirkozan.com.tr. (
2011071001 ;Serial
3600 ;Refresh
1800 ;Retry
604800 ;Expire
86400 ;Minimum TTL
)
@ IN NS dns01.kadirkozan.com.tr.
@ IN NS dns02.kadirkozan.com.tr.
@ IN PTR kadirkozan.com.tr.
dns01 IN A 192.168.100.11
dns02 IN A 192.168.100.12
centos01 IN A 192.168.100.211
11 IN PTR dns01.kadirkozan.com.tr.
12 IN PTR dns02.kadirkozan.com.tr.
211 IN PTR centos01.kadirkozan.com.tr.
Master Server – DNS Servisinin Başlatılması
DNS hizmetinin etkinleştirilmesi ve başlatılması için aşağıdaki komutları çalıştırınız.
Systemctl enable named Systemctl start named |
Secondary Server – BIND Kurulumu ve Yapılandırılması
Secondary server üzerine BIND servisi kurulur. Bu işlem için aşağıdaki komutu çalıştırabilirsiniz.
yum install bind* -y |
Kurulum işlemi tamamlandıktan sonra; BIND konfigürasyonu yapılandırmak için metin editöründe “/etc/named.conf” dosyası açılır ve bu dosya içerisindeki belirli yerlerin IP adresleri değiştirilir. Bu çıktıda kalın – kırmızı ile seçtiğim kısımlar değiştirilir.
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
options {
listen-on port 53 { 127.0.0.1; 192.168.100.12; };
listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
allow-query { localhost; 192.168.100.0/24; };
.
.
.
.
zone "." IN {
type hint;
file "named.ca";
};
zone "kadirkozan.com.tr" IN {
type slave;
file "slaves/kadirkozan.fwd";
masters { 192.168.100.11; };
};
zone "100.168.192.in-addr.arpa" IN {
type slave;
file "slaves/kadirkozan.rev";
masters { 192.168.100.11; };
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
Secondary Server – BIND Servisinin Aktifleştirilmesi ve Başlatılması
DNS hizmetini etkinleştirmek, başlatmak ve durumunu kontrol etmek için aşağıdaki komutları çalıştırınız.
systemctl enable named systemctl start named systemctl status named |
DNS servisi başarılı olarak açıldıktan sonra “/var/named/slaves” dizininde “.fwd” ve “.rev” uzantılı dosya oluşacaktır.
Secondary Server – IP Adres yapılandırmasında
DNS sunucularını ağ kartınızın yapılandırma dosyanıza ekleyiniz.
vi /etc/sysconfig/network-scripts/ifcfg-enp0s33 |
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=98d6468d-dd08-477c-b3a8-1d0fcc364cdf
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.100.12
PREFIX=24
GATEWAY=192.168.100.254
DNS1=192.168.100.11
DNS2=192.168.100.12
IPV6_PRIVACY=no
Bu aşama başarılı olarak tamamlandıktan sonra BIND sunucusunun başarılı çalışıp / çalışmadığını kontrol etmek için “dig” komutunu çalıştırınız.
dig dns01.kadirkozan.com.tr dig dns02.kadirkozan.com.tr |
Secondary Server – BIND Servisi için Firewall Yapılandırması
BIND servisini yeniden başlattıktan sonra sunucunun erişimi için IPtables içerisinde bir konfigürasyon işlemi yapılması gerekiyor. Bunun için bir metin editörü ile “/etc/sysconfig/iptables.config” dosyası içeriği açılır ve içerisine port 53 ‘ün TCP ve UDP protokollerinin açılması ve dışarıdan erişilebilmesi için aşağıdaki satırlar eklenir.
vi /etc/sysconfig/iptables.config |
-A INPUT -p udp -m state –state NEW –dport 53 -j ACCEPT –A INPUT -p tcp -m state –state NEW –dport 53 -j ACCEPT |
Yapılan bu değişiklerin geçerli olması için iptables servisi yeniden başlatılır.
service iptables restart |
Yada daha kolay bir yöntem olan “firewall-cmd” aracı ile aşağıdaki komutlar çalıştırılarak DNS servisi için izin tanımlanır.
firewall-cmd –permanent –add-port=53/tcp firewall-cmd –permanent –add-port=53/udp firewall-cmd –reload |
Master Server – İzinleri, Sahipliği ve SELinux’u Yapılandırılması
Aşağıdaki komutları çalıştırınız.
chgrp named -R /var/named chown -v root:named /etc/named.conf restorecon -rv /var/named restorecon /etc/named.conf |
Secondary Server – DNS Servis Testleri
BIND test işlemi için terminal üzerinden aşağıdaki komutları girilir ve çıktı kontrol edilir. Çıktı aşağıdaki gibi ise DNS konfigürasyonunda sorun yok demektir.
named-checkconf /etc/named.conf named-checkzone kadirkozan.com.tr /var/named/forward.kadirkozan named-checkzone kadirkozan.com.tr /var/named/reverse.kadirkozan |
Bu aşama başarılı olarak tamamlandıktan sonra BIND sunucusunun başarılı çalışıp / çalışmadığını kontrol etmek için “dig” komutunu çalıştırınız.
dig dns01.kadirkozan.com.tr dig dns01.kadirkozan.com.tr |
Son aşama olarak nslookup komutu ile sorgu yapılır
nslookup kadirkozan.com.tr |
Linux Client Konfigürasyonu
Kullanıcıların, DNS sunucusunun IP adresini bilmesi için istemci makinelerde “resolv.conf” dosyalarının düzenlenmesi gerekiyor. Öncelikle client sistem üzerinde “/etc/resolv.conf” dizini metin editörü ile açılır.
DNS sunucu bilgileri tanımlandıktan sonra client sistemin network servisi yeniden başlatılır.
systemctl restart NetworkManager.service |