Centos 8 işletim sistemide BIND kurulumu ve Yapılandırılması (Master ve Secondary)

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 sistemiRoleIP AdresiFQDN
DNS01Centos 8 (minimal kurulum)DNS Master192.168.100.11/24dns02.kadirkozan.com.tr
DNS02Centos 8 (minimal kurulum)DNS Secondary192.168.100.12/24dns01.kadirkozan.com.tr
Centos01Centos 8 (GUI kurulum)Linux Client192.168.100.211/24centos01.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