Linux üzərindən DNS serverlər – BİND və PowerDNS -1-ci hissə.
DNS haqqında hər birimizin müəyyən qədər məlumatı var – həmçinin TECHNET -də Windows Server üzərində DNS serverin sazlanması barəsində kifayət qədər geniş izahlı məqalələr mövcuddur. Biz bu gün Centos üzərindən BİND və alternativ DNS server olan PowerDNS-in yüklənməsi və sazlanması ilə taniş olacağıq.
İlkin olaraq, qisaca DNS ( Domain Name System) haqqında – DNS, pilləli struktura malik (iyerarxik) domen adlar sistemidir və ən vacib funksiyası, şəbəkə iştirakçıları ( kompüter, server, router və s.) tərəfindən istifadə olunan İP ünvanları daha asan yadda qalan adlara çevirməkdir. DNS, əksər internet servizlərinin fəaliyyəti üçün kritik əhəmiyyət daşıyan servizdir.
Keçək konfigurasiyaya.
Biz, laboratoriya üçün ƏS-i olaraq CentOS 7-ni seçmişik, məqalədə göstərilən bütün addımlar RHEL üzərindən yığılan bütün ƏS-i üçün keçərlidir.
Məqalə həmçinin 2 müxtəlif avtorativ ( yalnız rekursiyanı dəstəkləyən serverlər barəsində ayrıca məqalə olacaq) DNS server program təminatının sazlanmasını əhatə edəcək və beləcə, seçim etmək imkanı verəcək. Əsas səbəb, iri həcmli DNS bazalarla iş zamanı BİND-in bəzi çatışmazlıqlarının fonunda, PowerDNS-in üstünlüyüdür:
- PowerDNS, DNS recordların saxlanması üçün backend olaraq müxtəlif bazalar seçməyə imkan verir – BİND 9-cu versiyada, back-end olaraq MySQL, postgre dəstəkləsə də, həmin bazalarla iş sürəti müqayisədə daha zəif sürətlə görülür;
- Yeni recordlar əlavə edildikdə BİND server yenidən başladılmadır, PowerDNS-də bu əməliyyata ehtiyac yoxdur;
- BIND-da hər yeni zona slave serverlərdəki conf fayllarda əks olunmalıdır, PowerDNS-də bu əməliyyatlar avtomatlaşdırılıb;
Lab-da istifadə olunan mühit:
Master server:
ƏS : CentOS 7
Ad: dnssrv1.technet.local
IP: 192.168.122.104
Slave server:
ƏS : CentOS 7
Ad: dnssrv2.technet.local
IP: 192.168.122.105
Client:
ƏS: Fedora 21
Ad: client.technet.local
IP: 192.168.0.106
BİND-in yüklənməsi və sazlanması.
Lazımi paketləri yükləmək üçün root və ya müvafiq hüquqları olan admin istifadəçisi adı altından aşağıda göstərilən əmri icra edirik – hər 2 serverdə:
[root@dnssrv1 named]# yum install bind* -y
Master serverin sazlanması.
Öncə master serveri konfigurasiya edirik. Bunun üçün, /etc/named.conf faylını redaktə edirik.
Faylın içində default informasiya var, biz bəzi dəyişikliklər edəcəyik və həmin dəyişiklikləri qırmız şriftlə qeyd edəcəyik:
[root@dnssrv1 named]# cat /etc/named.conf
//
// 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.122.104; }; ### Serverin hansi unvaninda sorgulari qebul edecek ###
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.122.0/24; }; ### DNS-den sorgu edecek subnet ###
allow-transfer { localhost; 192.168.122.105; };
/*
– 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 “technet.local” IN {
type master;
file “forward_technet.zone.db”;
allow-update { none; };
};
zone”122.168.192.in-addr.arpa” IN {
type master;
file “reverse_technet.zone.db”;
allow-update { none; };
};
include “/etc/named.rfc1912.zones”;
include “/etc/named.root.key”;
named.conf-da qeyd etdiyimiz forward və revers zona fayllarını /var/named qovluğunda yaradırıq:
Forward zona faylı:
[root@dnssrv1 ~]# cat /var/named/forward_technet.zone.db
$TTL 86400
@ IN SOA dnssrv1.technet.local. root.technet.local. (
2011071001 ;Serial
3600 ;Refresh
1800 ;Retry
604800 ;Expire
86400 ;Minimum TTL
)
@ IN NS dnssrv1.technet.local.
@ IN NS dnssrv2.technet.local.
@ IN A 192.168.122.104
@ IN A 192.168.122.105
dnssrv1 IN A 192.168.122.104
dnssrv2 IN A 192.168.122.105
client IN A 192.168.122.106
Reverse zona faylı:
[root@dnssrv1 ~]# cat /var/named/reverse_technet.zone.db
$TTL 86400
@ IN SOA dnssrv1.technet.local. root.technet.local. (
2011071001 ;Serial
3600 ;Refresh
1800 ;Retry
604800 ;Expire
86400 ;Minimum TTL
)
@ IN NS dnssrv1.technet.local.
@ IN NS dnssrv2.technet.local.
@ IN PTR technet.local.
dnssrv1 IN A 192.168.122.104
dnssrv2 IN A 192.168.122.105
client IN A 192.168.122.106
104 IN PTR dnssrv1.technet.local.
105 IN PTR dnssrv2.technet.local.
106 IN PTR client.technet.local.
Servizin normal işləməsi üçün Firewallda 53/TCP və 53/UDP portlarını aktivləşdirik – hər 2 komandanı icra edirik:
[root@dnssrv1 ~]# firewall-cmd –permanent –zone=public –add-service=dns
[root@dnssrv1 ~]# firewall-cmd –zone=public –add-service=dns
DNS serveri ilk başlatmazdan öncə named.conf və zona fayllarında düzgün sintaksisin yoxlanması üçün named-check əmrindən istifadə etmək olar:
[root@dnssrv1 ~]# named-checkconf /etc/named.conf
[root@dnssrv1 ~]# named-checkzone technet.local /var/named/forward_technet.zone.db
zone technet.local/IN: loaded serial 2011071001
OK
Əgər bu yoxlamalar nəticəsində sizdə də xəbərdarlıqlar çıxmırsa, servizi başlada bilərsiniz:
[root@dnssrv1 ~]# systemctl start named.service
[root@dnssrv1 ~]# systemctl status named.service
named.service – Berkeley Internet Name Domain (DNS)
Loaded: loaded (/usr/lib/systemd/system/named.service; disabled)
Active: active (running) since Thu 2015-01-15 02:29:56 EST; 2s ago
Process: 2379 ExecStart=/usr/sbin/named -u named $OPTIONS (code=exited, status=0/SUCCESS)
Process: 2377 ExecStartPre=/usr/sbin/named-checkconf -z /etc/named.conf (code=exited, status=0/SUCCESS)
Main PID: 2381 (named)
CGroup: /system.slice/named.service
└─2381 /usr/sbin/named -u named
Jan 15 02:29:56 dnssrv1.technet.local named[2381]: zone 122.168.192.in-addr.arpa/IN: loaded serial 2011071001
Jan 15 02:29:56 dnssrv1.technet.local named[2381]: zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN: loaded serial 0
Jan 15 02:29:56 dnssrv1.technet.local named[2381]: zone technet.local/IN: loaded serial 2011071001
Jan 15 02:29:56 dnssrv1.technet.local named[2381]: zone localhost/IN: loaded serial 0
Jan 15 02:29:56 dnssrv1.technet.local named[2381]: zone localhost.localdomain/IN: loaded serial 0
Jan 15 02:29:56 dnssrv1.technet.local named[2381]: all zones loaded
Jan 15 02:29:56 dnssrv1.technet.local named[2381]: running
Jan 15 02:29:56 dnssrv1.technet.local named[2381]: zone technet.local/IN: sending notifies (serial 2011071001)
Jan 15 02:29:56 dnssrv1.technet.local named[2381]: zone 122.168.192.in-addr.arpa/IN: sending notifies (serial 2011071001)
Jan 15 02:29:56 dnssrv1.technet.local systemd[1]: Started Berkeley Internet Name Domain (DNS).
Master serverin sazlanması hissəsini bitmiş hesab etmək olar.Keçirik Slave (Secondary) serverin sazlanmasına.
/etc/named.conf-u müvafiq olaraq tənzimləyirik:
[root@dnssrv2 ~]# cat /etc/named.conf
//
// 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.122.105; };
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.122.0/24; };
/*
– 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 no;
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 “technet.local” IN {
type slave;
file “slaves/forward_technet.zone.db”;
masters {192.168.122.104;};
};
zone “122.168.192.in-addr.arpa” IN {
type slave;
file “slaves/reverse_technet.zone.db”;
masters {192.168.122.104;};
};
include “/etc/named.rfc1912.zones”;
include “/etc/named.root.key”;
DNS server start edirik:
[root@dnssrv2 ~]# systemctl start named.service
[root@dnssrv2 ~]# systemctl status named.service
named.service – Berkeley Internet Name Domain (DNS)
Loaded: loaded (/usr/lib/systemd/system/named.service; disabled)
Active: active (running) since Thu 2015-01-15 05:38:40 EST; 4s ago
Process: 2872 ExecStart=/usr/sbin/named -u named $OPTIONS (code=exited, status=0/SUCCESS)
Process: 2870 ExecStartPre=/usr/sbin/named-checkconf -z /etc/named.conf (code=exited, status=0/SUCCESS)
Main PID: 2874 (named)
CGroup: /system.slice/named.service
└─2874 /usr/sbin/named -u named
Jan 15 05:38:40 dnssrv2.technet.local named[2874]: transfer of ‘technet.local/IN’ from 192.168.122.104#53: connected using 192.168.122.105#52928
Jan 15 05:38:40 dnssrv2.technet.local named[2874]: zone technet.local/IN: transferred serial 2011071001
Jan 15 05:38:40 dnssrv2.technet.local named[2874]: transfer of ‘technet.local/IN’ from 192.168.122.104#53: Transfer completed: 1 messages, 9 records, 239 bytes, 0.001 secs (239000 bytes/sec)
Jan 15 05:38:40 dnssrv2.technet.local named[2874]: zone technet.local/IN: sending notifies (serial 2011071001).
Qırmızı ilə fərqləndirdiyimiz hissədən görə bilərik ki slave server masterdən zonaları transfer edib. Slave zona fayllarının yaranmasını aşağıdakı əmri verməklə də görə bilərik:
[root@dnssrv2 ~]# ls -ltr /var/named/slaves/
-rw-r–r–. 1 named named 402 Jan 15 07:31 forward_technet.zone.db
-rw-r–r–. 1 named named 697 Jan 15 08:04 reverse_technet.zone.db
Hər 2 serveri sazladıqdan sonra client maşınlarında DNS seçənəklərini tənzimləyib DNS serverin işləməsini yoxlayiriq:
[root@client ~]# cat /etc/resolv.conf
# Generated by NetworkManager
search technet.local
nameserver 192.168.122.104
nameserver 192.168.122.105
Dig əmri vasitəsilə DNS serverə sorğu göndəririk:
[root@localhost ~]# dig client.technet.local
; <<>> DiG 9.9.4-RedHat-9.9.4-8.fc20 <<>> client.technet.local
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 49692
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3
;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;client.technet.local. IN A
;; ANSWER SECTION:
client.technet.local. 86400 IN A 192.168.122.106
;; AUTHORITY SECTION:
technet.local. 86400 IN NS dnssrv2.technet.local.
technet.local. 86400 IN NS dnssrv1.technet.local.
;; ADDITIONAL SECTION:
dnssrv1.technet.local. 86400 IN A 192.168.122.104
dnssrv2.technet.local. 86400 IN A 192.168.122.105
;; Query time: 2 msec
;; SERVER: 192.168.122.104#53(192.168.122.104)
;; WHEN: Thu Jan 15 08:08:15 EST 2015
;; MSG SIZE rcvd: 141
Qırmızı ilə qeyd etdiyimiz sətirlər bizim sorğumuza DNS-dən gələn cavabdır. BIND serverin sazlanması ilə bağlı bu qədər.