DNS System- Concepts, Installation and Basic Configurations

DNS কি?

Domain Name System (DNS) এমন একটি ডিস্ট্রিবিউটেড হায়ারারকিক্যাল সিস্টেম, যার সাহায্য ছাড়া বর্তমান ইন্টারনেট কল্পনাও করা যায়না। ইন্টারনেট মূলতঃ বিশ্বব্যাপী একে অপরের সাথে সংযুক্ত একটি কম্পিউটার নেটওয়ার্ক ব্যবস্থাপনা সিস্টেম, যেখানে ডিভাইস সমূহের মধ্যে সংযোগ স্থাপন এবং যোগাযোগ এর জন্যে আইপি এড্রেস নামক এক প্রকার এড্রেস ব্যবহার করা হয়। ইন্টারনেট-এ সকল ধরনের ডাটা আদান প্রদান এই আইপি- এড্রেস এর মাধ্যমে হয়ে থাকে। কিন্তু একজন সাধারণ ব্যবহারকারীর নিকট ইন্টারনেট ব্যবহারের জন্য আইপি-এড্রেস মনেরাখা একটি দুরহ ব্যাপার। এ জন্য ইন্টারনেট কমোনিউকেশন সহজলভ্য করতে এমন একটি প্রযুক্তি ডেভেলপ করা হয় যার নাম হলো Domain Name System (DNS)। এর দারা কমিউনিকেশন এর সময় বিভিন্ন ধরনের নাম ব্যবহার করা হয় যা DNS সার্ভার এর মাধ্যমে স্বয়ংক্রিয়ভাবে আইপি-এড্রেস এ পরিবর্তিত হয়ে  ক্লায়েন্ট এবং সার্ভার এর মধ্যে যোগাযোগ সম্পন্ন করে।

এখানে ব্যবহৃত নামকে ডোমেইন নেইম (Domain Name) বলা হয়ে থাকে, আর একটি Domain Name System (DNS) দুই ধরনের কাজ করে থাকে, ডোমেইন নেইম (Domain Name) কে পরিবর্তন করে আইপি-এড্রেস দিয়ে থাকে যাকে ফরওয়ার্ড রিজলভ  এবং আইপি-এড্রেস এর পরিবর্তে ডোমেইন নেইম (Domain Name) দিয়ে থাকে যাকে রিভার্স রিজলভ বলা হয়ে থাকে।

DNS কম্পোনেন্টঃ

১। DNS Resolver:

এটি ক্লায়েন্ট এর হয়ে কাজ করে। যখন ক্লায়েন্ট একটি ডোমেইন এর নির্দিষ্ট সার্ভিসের জন্য তার DNS সার্ভার কে রিকোয়েস্ট পাঠায় DNS Resolver তখন আইপি-এড্রেস এর জন্য নেম সার্ভার (NS) এর নিকট DNS রিকোয়েস্ট কুয়েরী পাঠায়। আমরা ইন্টারনেট ব্যবহারের জন্য এই কম্পোনেন্টটি বেশী ব্যাবহার করে থাকি।

২। Name Servers (NS):

একটি ডোমেইন এর Information যে সার্ভার এ store করা থাকে তাকে ওই ডোমেইন এর Name Server বলা হয়। একটি ডোমেইন এর যাবতীয় Information তার Name Serverএ store করা থাকে।

৩।  Resource Records (RR):

Name Serverএ store করা একটি ডোমেইন প্রত্যেকটি সার্ভিস (web, mail, smtp etc.) এর Information কেই Resource Records (RR) বলে।

 DNS কিভাবে কাজ করে?

আমরা আগেই জেনেছি Domain Name System (DNS) একটি ডিস্ট্রিবিউটেড হায়ারারকিক্যাল সিস্টেম, যেখানে অনেকগুলো সিস্টেম এর সমন্বয়ে এর কর্মপ্রক্রিয়া সম্পন্ন করে থাকে। এখানে আমরা কর্মপ্রক্রিয়ার ধাপগুলো নিয়ে বিস্তারিত আলোচনা করবো।

ধাপ-১: এখানে একজন ব্যবহারকারী যখন তার ব্রাউজারে একটি URL (ডোমেইন নেইম) ব্রাউজ করার জন্যে রিকোয়েস্ট করবে, রিকোয়েস্ট টি উক্ত ডিভাইস (পিসি, ল্যাপটপ, মোবাইল ডিভাইস) এর DNS Resolver এর নিকট আইপি-এড্রেস এর জন্য ফরওয়ার্ড করবে

ধাপ-২: DNS Resolver সার্ভার রিকোয়েস্টটিকে রুট সার্ভার এর নিকট ফরওয়ার্ড করবে (২)। রুট সার্ভার ডোমেইন নেইম টাইপ (.com, .org, .net, .edu, .bd etc.) এর উপর ভিত্তি করে DNS Resolver কে ডোমেইন এর নির্দিষ্ট Top Level Domain Name Server (TLD NS) এর এড্রেসটি জানিয়ে দিবে (৩)।

ধাপ-৩: DNS Resolver সার্ভার ওই ডোমেইন এর Top Level Domain Name Server (TLD NS) সার্ভার এর সঙ্গে যোগাযোগ করবে এবং ডোমেইনটির ইনফরমেশন চাইবে (৪)। Top Level Domain Name Server (TLD NS) সার্ভার ওই ডোমেইন এর নেম সার্ভার (NS) এর এড্রেসটি জানিয়ে দিবে (৫)।

ধাপ-৪: DNS Resolver সার্ভার ওই ডোমেইন এর নির্দিষ্ট সার্ভিস (web, mail, smtp etc.) এর জন্যে ওই ডোমেইন এর নেম সার্ভার (NS) এর সংগে যোগাযোগ করবে (৬)। নেম সার্ভার (NS) ওই সার্ভিস এর জন্যে আইপি-এড্রেস (www.google.com IP:172.217.26.206) প্রদান করবে (৭)।

ধাপ-৫: এবার DNS Resolver সার্ভার ক্লায়েন্ট কে ওই নির্দিষ্ট সার্ভিস এর আইপি-এড্রেস (www.google.com IP:172.217.26.206) প্রদান করবে (৮)। ক্লায়েন্ট উক্ত সার্ভিস এর জন্যে সার্ভিস এর আইপি-এড্রেস (www.google.com IP:172.217.26.206) এ যোগাযোগ করবে (৯)। এভাবে DNS Resolving প্রক্রিয়া সম্পন্ন করবে।

DNS সার্ভার এর প্রকারভেদঃ

কার্যপ্রণালী গত পার্থক্যঃ

১। Authoritative-Only DNS Servers: যে DNS সার্ভার তার ডাটাবেস এ রক্ষিত ডোমেইন এর Information ব্যতীত অন্য কোন ডোমেইন এর রিকোয়েস্ট কুয়েরী Accept করেনা তাকে Authoritative-Only DNS Servers বলা হয়। কোন ডোমেইন এর Name Server ই ওই ডোমেইন এর Authoritative DNS Server আর এটি যদি অন্য কোন ডোমেইন এর রিকোয়েস্ট কুয়েরী Accept না করে তখন এটিকে Authoritative-Only DNS Servers বলা হবে।

২। Caching-Only or Caching DNS Server: DNS Resolver সার্ভার কেই Caching-Only or Caching DNS Server বলা হয়। Caching DNS Server এ কোন ডোমেইন এর Information থাকেনা। এটি DNS রিকোয়েস্ট কুয়েরীর মাধ্যমে Name Server থেকে বিভিন্ন ডোমেইন এর Information কালেক্ট করে ক্লায়েন্ট কে প্রদান করে থাকে। দ্রুত রিকোয়েস্ট resolve এর জন্য Frequent ব্রাউজ করা ডোমেইন গুলোর জন্যে একটি Cache ট্যাবল তৈরি করে নির্দিষ্ট সময় পর্যন্ত তথ্য সংরক্ষণ করে।

৩। Forwarding DNS Server: এটিও Caching-Only or Caching DNS Server মতই কাজ করে, তবে এটি Name Server সমূহের সংগে সরাসরি যোগাযোগ না করে সমস্ত DNS রিকোয়েস্ট গুলোকে একটি নির্দিষ্ট DNS Resolver সার্ভার এ ফরওয়ার্ড করে। এটিও দ্রুত রিকোয়েস্ট resolve এর জন্য Frequent ব্রাউজ করা ডোমেইন গুলোর জন্যে একটি Cache ট্যাবল তৈরি করে নির্দিষ্ট সময় পর্যন্ত তথ্য সংরক্ষণ করে।

৮। Hybrid DNS Server: Caching DNS এবং Authoritative DNS Server একই সার্ভার থেকে পরিচালিত হলে তাকে আমরা Hybrid DNS Server বলছে পাড়ি।

সম্পর্কগত পার্থক্যঃ

১। Primary or Master DNS Server: এটি একটি Authoritative DNS Server। একটি ডোমেইন এর Information এর Master ডাটাবেস এই সার্ভার এ সংরক্ষণ করা হয় এবং Resource Records (RR) গুলো এই সার্ভার থেকেই ডাটাবেস এ এন্ট্রি দেয়া হয়ে থাকে।

২। Secondary or Slave Servers: এটিও একটি Authoritative DNS Server। একটি ডোমেইন এর Information এর Replicate (Slave) ডাটাবেস এই সার্ভার এ সংরক্ষণ করা হয়। এই সার্ভার এ কোন Resource Records (RR) এন্ট্রি দেয়া হয়না, Master বা Primary সার্ভার থেকে পুল করে থাকে।

৩। Public vs. Private Servers: ইন্টারনেট এ যে কেউ যে সার্ভার এর ক্লায়েন্ট হতে পারে সেটাই Public Server যেমন 4.2.2.2, 8.8.8.8 বহুল ব্যবহৃত Public DNS Server যেগুলো Public DNS Resolver হিসেবে কাজ করছে। পক্ষান্তরে Private Server হলও যেখানে ক্লায়েন্টদের কে আগে থেকেই ডিফাইন করা থাকে যে, কে কে এই DNS এর ক্লায়েন্ট হতে পাড়বে।

DNS সার্ভার কনফিগারেশনঃ

DNS Server কনফিগারেশন জন্য আমাদের একটি সার্ভার প্রয়োজন যেটিতে CentOS অথবা RHEL 7 ইন্সটল করা থাকতে হবে। তারপর আমরা পরবর্তী ধাপ গুলো ফলো করে DNS Server কনফিগারেশন করবো।

১। Scenario: আমরা Primary এবং Secondary DNS সার্ভার কনফিগারেশন জন্য নিম্নোক্ত Scenario টি ব্যবহার করবো।

Primary DNS Server:
Hostname : ns1
Domain Name : mahedi.me
IP Address : 192.168.1.5

Secondary DNS Server:
Hostname : ns2
Domain Name : mahedi.me
IP Address : 192.168.1.10

2. কনফিগারেশন Firewall

ডিস্যাবল  SELinux:

# vim /etc/selinux/config

Set SELINUX=disabled

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.

SELINUX=disabled

# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
# mls - Multi Level Security protection.
SELINUXTYPE=targeted

:x

এবার server টি reboot দিন।

# reboot

3. কনফিগারেশন Hostname:

বর্তমান hostname  টি দেখার জন্য

[[email protected] ~]# hostname

localhost.localdomain

hostname চেঞ্জ করার জন্য আমাদের /etc/hostname ফাইলটি Edit করতে হবে।

[[email protected] ~]# vim /etc/hostname
ns1.mahedi.me

:x

ইফেক্টটি দেখার জন্য সার্ভারটি থেকে একবার logout করে লগইন করতে হবে।

[[email protected] ~]# logout

Login:

[[email protected] ~]#

এবার আমরা সার্ভার এর hosts টেবিল এ একটি এন্ট্রি দিবো।

[[email protected] ~]# vim /etc/hosts

192.168.1.5        ns1.mahedi.me           ns1

:x

আমাদের Hostname কনফিগারেশন সঠিক হলও কিনা সেটি পরীক্ষা করার জন্য নিচের কমান্ড গুলো দিয়ে তার আউটপুট পরীক্ষা করবো।

[email protected] ~]# hostname
ns1.mahedi.me
[email protected] ~]# hostname –d
mahedi.me
[email protected] ~]# hostname –f
ns1.mahedi.me

4. Software ইন্সটেলেশনঃ

DNS সার্ভার কনফিগারেশন আমরা bind একটি Software ব্যবহার করবো। এখন আমরা আমাদের সার্ভার এ bind Software টি install করা আছে কিনা সেটি পরীক্ষা করবো।

[email protected] ~]# rpm –qa|grep bind
bind-9.8.2-0.17.rc1.el6_4.6.x86_64
bind-libs-9.8.2-0.17.rc1.el6_4.6.x86_64
bind-utils-9.8.2-0.17.rc1.el6_4.6.x86_64

আমার এখানে দেখতে পাচ্ছি Software গুলো আগে থেকেই install করা আছে। যদি install করা না থাকত বা না থাকে তাহলে আমরা নিচের কমান্ডটি ব্যবহার করে খুব সহজে Software গুলো install করে নিতে পারবো, সেক্ষেত্রে আপনার সার্ভার এ অবশ্যই ইন্টারনেট সংযোগ থাকতে হবে।

[[email protected] ~]# yum install –y bind bind-utils

Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
 * base: mirror.steadfast.net
 * epel: epel.mirror.angkasa.id
 * extras: mirror.steadfast.net
 * remi-php55: remi.mirror.ate.info
 * remi-safe: remi.mirror.ate.info
 * updates: mirror.steadfast.net

Setting up Install Process
Resolving Dependencies
Running transaction check
 Package bind.x86_64 32:9.8.2-0.47.rc1.el6 will be installed
 Package bind-devel.x86_64 32:9.8.2-0.47.rc1.el6 will be installed
 Package bind-libs.x86_64 32:9.8.2-0.47.rc1.el6 will be installed
 Package bind-utils.x86_64 32:9.8.2-0.47.rc1.el6 will be installed
 Finished Dependency Resolution

Dependencies Resolved

========================================================================
Package Arch Version Repository Size
========================================================================
Installing:
 bind x86_64 32:9.8.2-0.47.rc1.el6 base 4.0 M
 bind-devel x86_64 32:9.8.2-0.47.rc1.el6 base 383 k
 bind-libs x86_64 32:9.8.2-0.47.rc1.el6 base 889 k
 bind-utils x86_64 32:9.8.2-0.47.rc1.el6 base 187 k

Transaction Summary
========================================================================
Install 4 Package(s)

Total download size: 5.4 M
Installed size: 11 M
Downloading Packages:
(1/4): bind-9.8.2-0.47.rc1.el6.x86_64.rpm | 4.0 MB 00:09
(2/4): bind-devel-9.8.2-0.47.rc1.el6.x86_64.rpm | 383 kB 00:00
(3/4): bind-libs-9.8.2-0.47.rc1.el6.x86_64.rpm | 889 kB 00:02
(4/4): bind-utils-9.8.2-0.47.rc1.el6.x86_64.rpm | 187 kB 00:00
------------------------------------------------------------------------
Total 364 kB/s | 5.4 MB 00:15
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
 Installing : 32:bind-libs-9.8.2-0.47.rc1.el6.x86_64 1/4
 Installing : 32:bind-devel-9.8.2-0.47.rc1.el6.x86_64 2/4
 Installing : 32:bind-9.8.2-0.47.rc1.el6.x86_64 3/4
 Installing : 32:bind-utils-9.8.2-0.47.rc1.el6.x86_64 4/4
 Verifying : 32:bind-libs-9.8.2-0.47.rc1.el6.x86_64 1/4
 Verifying : 32:bind-devel-9.8.2-0.47.rc1.el6.x86_64 2/4
 Verifying : 32:bind-9.8.2-0.47.rc1.el6.x86_64 3/4
 Verifying : 32:bind-utils-9.8.2-0.47.rc1.el6.x86_64 4/4

Installed:
 bind.x86_64 32:9.8.2-0.47.rc1.el6 bind-devel.x86_64 32:9.8.2-0.47.rc1.el6
 bind-libs.x86_64 32:9.8.2-0.47.rc1.el6 bind-utils.x86_64 32:9.8.2-0.47.rc1.el6
Complete!

5. Primary DNS সার্ভার কনফিগারেশনঃ

সার্ভার এ সঠিকভাবে Software গুলো install করা হলে আমরা কনফিগারেশন শুরু করবো। প্রথমেই আমরা কনফিগারেশন ফাইল (/etc/named.conf) এর একটি ব্যাকআপ নিব, যেন কনফিগারেশন এর সময় বা পরবর্তীতে কোন সমস্যা হলে সহজে রোল-ব্যাক করতে পারা যায়।

[[email protected] ~]# cd /etc/
[[email protected] etc]# cp named.conf named.conf.ori

এবার আমরা কনফিগারেশন শুরু করবো। এখানে আমি আমার Scenario (ডোমেইন নেইম, আইপি-এড্রেস) মত করে প্যারামিটার গুলো বসাবো আপনি যখন কনফিগার করবেন আপনার মত করে পরিবর্তন করে নিবেন। সবার বোঝার সুবিধার্থে নিম্নে কনফিগারেশন ফাইল এ পরিবর্তন-কৃত অংশ গুলোকে বোল্ড করে দিয়েছি।

[[email protected] ~]# vim /etc/named.conf

options {
 listen-on port 53 { 192.168.1.5; };
 // 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 { any; };
 allow-recursion { localhost; 192.168.1.0/24; };

 dnssec-enable yes;
 dnssec-validation yes;

 /* 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";
};

// Adding forward zone
zone "mahedi.me" IN {
 type master;
 file "db.mahedi.me.for";
 allow-transfer { none; };
};

// Adding Reverse zone

zone "1.168.192.in-addr.arpa" IN {
 type master;
 file "db.1.168.192.in-addr.arpa";
 allow-transfer { none; };
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
:x

এবার আমরা zone অংশে উল্লেখকৃত ডোমেইন গুলোর জন্য Database তৈরি করবো। Database গুলো বাই ডিফল্ট /var/named মধ্যে থাকে। Bind সফটওয়্যারটি Plain Text Database ব্যবহার করে থাকে। তার মানে একটি Plain Text ফাইলে নির্দিষ্ট Structure এ ডাটা গুলোকে এন্ট্রি করতে হবে। Database এর Structure বুঝার জন্য আমরা কিছু Sample Database ফাইল ব্যবহার করবো যেটি সার্ভার এ পূর্বে থেকে সংরক্ষিত থাকে। এখানে আমরা ফরওয়ার্ড জোন এর জন্যে named.localhost এবং রিভার্স জোন এর জন্য named.loopback ফাইল দুটিকে কে Sample Database ফাইল হিসেবে ব্যবহার করবো। এখন আমরা দেখে নিবো /var/named মধ্যে কি ফাইল আগে থেকে তৈরি করা থাকে!

[[email protected] ~]# cd /var/named/

[[email protected] named]# ls -la
drwxr-x---. 5 root named 4096 Jul 24 17:04 .
drwxr-xr-x. 23 root root 4096 Jul 24 17:04 ..
drwxrwx---. 2 named named 6 Jul 5 06:15 data
drwxrwx---. 2 named named 6 Jul 5 06:15 dynamic
-rw-r-----. 1 root named 2281 May 22 05:51 named.ca
-rw-r-----. 1 root named 152 Dec 15 2009 named.empty
-rw-r-----. 1 root named 152 Jun 21 2007 named.localhost
-rw-r-----. 1 root named 168 Dec 15 2009 named.loopback
drwxrwx---. 2 named named 6 Jul 5 06:15 slaves

এখন আমরা সহজেই ফরওয়ার্ড জোন এর জন্য named.localhost এবং রিভার্স জোন এর জন্য named.loopback ফাইল দুটিকে কপি করে আমাদের ডোমেইন এর Database এর জন্য দেয়া নামে পেস্ট করে আমাদের ডাটা গুলোকে এন্ট্রি দিবো।

[[email protected] named]# cp named.localhost db.mahedi.me.for
[[email protected] named]# cp named.loopback db.1.168.192.in-addr.arpa

এখন প্রথমে ফরওয়ার্ড জোন ফাইল db.mahedi.me.for টিকে এডিট করবো।

[[email protected] named]# vim db.mahedi.me.for

$TTL 1D
@ IN SOA          ns1.mahedi.me.   root.mahedi.me. (
                                                   0 ; serial
                                                  1D ; refresh
                                                  1H ; retry
                                                  1W ; expire
                                                3H ) ; minimum

               NS  ns1.mahedi.me.
               A   192.168.1.5
ns1     IN     A   192.168.1.5
mail    IN     A   192.168.1.5
mahedi.me.      IN  MX    10    mail.mahedi.me.
www     IN     CNAME     ns1.mahedi.me.
ftp     IN     A         192.168.1.50

 

:x

একইভাবে এখন রিভার্স জোন এর জন্য db.1.168.192.in-addr.arpa ফাইলটিকে এডিট করবোঃ

[[email protected] named]# vim db.1.168.192.in-addr.arpa

$TTL 1D

@        IN      SOA       ns1.mahedi.me.      root.mahedi.me. (
                                                       0 ; serial
                                                      1D ; refresh
                                                      1H ; retry
                                                      1W ; expire
                                                    3H ) ; minimum

                      NS   ns1.mahedi.me.
                      A    192.168.1.5

5          IN     PTR      ns1.mahedi.me.
50         IN     PTR      ftp.mahedi.me.

:x

এখন আমরা ফাইল দুটির ওনারশিপ এর গ্রুপটা চেঞ্জ করে named করে দিবো

[[email protected] named]# chgrp named db.mahedi.me.for
[[email protected] named]# chgrp named db.1.168.192.in-addr.arpa

এখন আমরা আমাদের কনফিগারেশন ফাইল এ structure গত কোন ভুল আছে কিনা সেটা নিম্নোক্ত কমান্ড এর মাধ্যকে পরীক্ষা করবোঃ

[[email protected] named]# named-checkzone zone db.mahedi.me.for
zone zone/IN: loaded serial 0
OK

[[email protected] named]# named-checkzone zone db.110.168.192.in-addr.arpa
zone zone/IN: loaded serial 0
OK

[[email protected] named]# named-checkconf -z /etc/named.conf
zone localhost.localdomain/IN: loaded serial 0
zone localhost/IN: loaded serial 0
zone mahedi.me/IN: loaded serial 0
zone 1.0.0.127.in-addr.arpa/IN: loaded serial 0
zone 1.168.192.in-addr.arpa/IN: loaded serial 0

এখানে কোন ফাইলের সিনট্যাক্স এর কোন সমস্যা নেই, এখন আমরা সার্ভিস স্টার্ট করলেই আমাদের DNS সার্ভারটি কাজ করতে শুরু করবে।

[[email protected] named]# systemctl restart named.service

সার্ভিসটি পরবর্তিতে সার্ভার পাওয়ার অফ অথবা রিবুট নিলেও যেন স্বয়ংক্রিয়ভাবে চালু হয় এ জন্য নিম্নোক্ত কমান্ডটি দিবো।

[[email protected] named]# systemctl enable named.service
ln -s '/usr/lib/systemd/system/named.service' '/etc/systemd/system/multi-user.target.wants/named.service'

এখন আমাদের সার্ভারটি DNS সার্ভিস প্রদানের জন্য সম্পুর্ন তৈরি প্রথমে আমরা এই সার্ভার এর ক্লায়েন্ট হবো এবং এটিকে প্ররীক্ষা করবো। এখানে একটি লিনাক্স পিসি থেকে কিভাবে ক্লায়েন্ট হতে হয় সেটা দেখিয়েছি। উইন্ডোজ পিসি থেকে করতে চাইলে আইপি-এড্রেস কনফিগারেশন এ গিয়ে DNS সার্ভার এর যায়গায় আপনার DNS সার্ভার এর আইপি-এড্রেসটি দিলেই হবে।

[[email protected] named]# vim /ete/reslov.conf

search mahedi.me
nameserver 192.168.1.5

:x

[[email protected] named]#

এখন নিম্নোক্ত কমান্ড গুলো দিয়ে পরীক্ষা করবো। এখানে আমি nslookup টুলটি যেটা লিনাক্স  এবং উইন্ডোজ দুই সিস্টেম এ আছে। উইন্ডোজ পিসিতে Command Prompt থেকে nslookup টাইপ করলে একই রকম  উইন্ডো (>) আসবে।

[[email protected] named]# nslookup

> mahedi.me
Server: 192.168.1.5
Address: 192.168.1.5#53

Name: mahedi.me
Address: 192.168.1.5
> www
Server: 192.168.1.5
Address: 192.168.1.5#53

www.mahedi.me canonical name = ns1.mahedi.me.

Name: ns1.mahedi.me
Address: 192.168.1.5

> 192.168.1.5
 Server: 192.168.1.5
 Address:192.168.1.5#53

5.1.168.192.in-addr.arpa name = ns1.mahedi.me.

> 
>exit

[[email protected] named]#

আমাদের DNS সার্ভারটি সফলভাবে রান করেছে।

6. Secondary DNS সার্ভার কনফিগারেশনঃ

ইতোপুর্বে আমরা Secondary DNS সার্ভার নিয়ে অলোচনা করেছি, এর করফিগারেশন প্রাইমারি DNS সার্ভার এর মতই কিন্তু এখানে ডোমেইন এর ডাটাবেস গুলো তৈরি করতে হয়না। প্রাইমারি সার্ভার থেকে স্বয়ংক্রিয়ভাবে replicate করে store করে।

শুরুতেই আমরা আমাদের প্রাইমারি সার্ভার থেকে ডাটা স্বয়ংক্রিয়ভাবে replicate করতে পারে তার পারমিশন দিবো।  এর জন্য আমরা /etc/named.conf এর zone অংশে allow-transfer {  }; এ আমাদের secondary সার্ভার  আইপি-এড্রেস টি উল্লেখ করতে হবে।

// Adding forward zone

zone "mahedi.me" IN {
 type master;
 file "db.mahedi.me.for";
 allow-transfer { 192.168.1.10; };
};

// Adding Reverse zone

zone "1.168.192.in-addr.arpa" IN {
 type master;
 file "db.110.168.192.in-addr.arpa";
 allow-transfer { 192.168.1.10; };

};


:x

এরপরে ফরওয়ার্ড জোন ফাইল db.mahedi.me.for টিকে এডিট করে Secondary DNS সার্ভার এর Information Add করতে হবে।

[[email protected] named]# vim db.mahedi.me.for

$TTL 1D
@ IN SOA          ns1.mahedi.me.   root.mahedi.me. (
                                                   0 ; serial
                                                  1D ; refresh
                                                  1H ; retry
                                                  1W ; expire
                                                3H ) ; minimum

               NS  ns1.mahedi.me.
               A   192.168.1.5
               NS  ns2.mahedi.me.                
               A   192.168.1.10
ns1     IN     A   192.168.1.5
ns2     IN     A   192.168.1.10
mail    IN     A   192.168.1.5
mahedi.me.      IN  MX    10    mail.mahedi.me.
www     IN     CNAME     ns1.mahedi.me.
ftp     IN     A         192.168.1.50

 

:x

একইভাবে এখন রিভার্স জোন এর জন্য db.1.168.192.in-addr.arpa ফাইলটিকে এডিট করবোঃ

[[email protected] named]# vim db.1.168.192.in-addr.arpa

$TTL 1D

@        IN      SOA       ns1.mahedi.me.      root.mahedi.me. (
                                                       0 ; serial
                                                      1D ; refresh
                                                      1H ; retry
                                                      1W ; expire
                                                    3H ) ; minimum

               NS  ns1.mahedi.me.                
               A   192.168.1.5
               NS  ns2.mahedi.me.                
               A   192.168.1.10

5          IN     PTR      ns1.mahedi.me.
50         IN     PTR      ftp.mahedi.me.

:x

এবার আমরা secondary সার্ভার এ কনফিগার করবো। প্রথমে আমাদের প্রাইমারি সার্ভার এর ন্যায় secondary সার্ভার এ আইপি- এড্রেস, Firewall, Hostname কনফিগার করতে হবে, এর জন্য আমরা ১ থেকে ৪ নং ধাপ গুলো অনুসরণ করবো।

এখানেও আমাদের পূর্বের ন্যায় প্রথমেই আমরা কনফিগারেশন ফাইল (/etc/named.conf) এর একটি ব্যাকআপ নিব, যেন কনফিগারেশন এর সময় বা পরবর্তিতে কোন সমস্যা হলে সহজে রোলব্যাক করতে পারা যায়।

[[email protected] ~]# cd /etc/
[[email protected] etc]# cp named.conf named.conf.ori

এবার আমরা কনফিগারেশন শুরু করবো। আমি আগেই বলেছি এখানে আমি আমার Scenario (ডোমেইন নেইম, আইপি-এড্রেস) মত করে প্যারামিটার গুলো বসাবো আপনি যখন কনফিগার করবেন আপনার মত করে পরিবর্তন করে নিবেন। সবার বোঝার সুবিধার্থে নিম্নে কনফিগারেশন ফাইল এ পরিবর্তনকৃত অংশ গুলোকে বোল্ড করে দিয়েছি।

[[email protected] ~]# vim /etc/named.conf

options {

 listen-on port 53 { 192.168.1.10; };

 // 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 { any;};
 allow-recursion { localhost; 192.168.1.0/24; };

 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";
};


logging {
 channel default_debug {
 file "data/named.run";
 severity dynamic;
 };
};


zone "." IN {
 type hint;
 file "named.ca";
};


// Adding forward zone

zone "mahedi.me" IN {
 type slave;
 masters { 192.168.1.5; };
 file "slaves/db.mahedi.me.for";
};


// Adding Reverse zone

zone "1.168.192.in-addr.arpa" IN {
 type slave;
 masters { 192.168.1.5; };
 file "slaves/db.1.168.192.in-addr.arpa";
};


include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

:x

এখন আমরা পূর্বের ন্যায় সার্ভিস স্টার্ট করবো স্টার্টাপ এ enable করবো।

[[email protected] named]# systemctl restart named.service
[[email protected] named]# systemctl enable named.service
ln -s '/usr/lib/systemd/system/named.service' '/etc/systemd/system/multi-user.target.wants/named.service'

এখন আমরা দেখব আমাদের  Secondary সার্ভার Primary সার্ভার থেকে ডাটা Replicate করতে পেড়েছে কিনা।

[[email protected] ~]# cd /var/named/slaves/
[[email protected] slaves]# ls -la
-rw-r----- 1 named named 421 May 27 21:37 db.mahedi.me.for
-rw-r----- 1 named named 292 May 13 13:58 db.110.168.192.in-addr.arpa

Yes!! we have done. আমাদের  Secondary সার্ভার Primary সার্ভার থেকে ডাটা Replicate করতে পেড়েছে!!

এখন আমরা  পূর্বের ন্যায় Secondary DNS সার্ভার এর ক্লায়েন্ট হব এবং nslookup  দিয়ে  পরীক্ষা করবো।

[[email protected] named]# nslookup
> mahedi.me
Server: 192.168.1.10
Address: 192.168.1.10#53
Name: mahedi.me
Address: 192.168.1.5
> www
Server: 192.168.1.10
Address: 192.168.1.10#53
www.mahedi.me canonical name = ns1.mahedi.me.
Name: ns1.mahedi.me
Address: 192.168.1.5
> 192.168.1.5
Server: 192.168.1.10
Address:192.168.1.10#53
5.1.168.192.in-addr.arpa name = ns1.mahedi.me.
>
>exit

[[email protected] named]#