How to install DNS dig tool in Windows

Dig Tool কি?

Dig হলো DNS সার্ভারের অপারেশন এবং টেস্টিং এর জন্য সর্বাধিক ফিচার সম্বলিত একটি টুল যার সাহায্যে DNS সকল অপারেশন এর সকল ধরনের টেস্টিং করা যায়। Internet Systems Consortium (ISC)কতৃক প্রদত্ত DNS সফটওয়্যার BIND (Berkeley Internet Name Domain) এর সংগে সংযুক্ত থাকে।

এই টুলটি System Administrator, Network Administrator এবং DNS Administrator দের জন্য খুবই প্রয়োজনীয় একটি টুল।

এখন কথা হলো এই টুলটি আমরা কিভাবে ব্যবহার করতে পারি। Windows এবং Linux উভয় সিস্টেমেই DNS Check করার জন্যে nslookup টুলটি ডিফল্টভাবে ইন্সটল করা থাকে, তবে লিনাক্স সিস্টেমে DNS এর সফটওয়্যারগুলো অপারেটিং সিস্টেমের প্যাকেজের মধ্যে দেয়া থাকে বিধায় bind সফটওয়্যারটি অপারেটিং সিস্টেম ইন্সটল করার সময় সিলেক্ট থাকলেই Dig টুল কাজ করে, অথবা yum install bind কমান্ডটি দিয়ে সহজেই ইন্সটল করে নেয়া যায় কিন্তু Windows অপারেটিং সিস্টেমে আলাদাভাবে bind সফটওয়্যারটি ডাউনলোড করে ইন্সটল করতে হয়।

এখানে আমি দেখাবো Windows অপারেটিং সিস্টেমে কিভাবে Dig টুল ইন্সটল করতে হয়। Dig টুলটি যেহেতু DNS সিস্টেম সফটওয়্যার BIND এর একটি টেস্টিং টুল তার জন্য আমাদের bind সফটওয়্যারটি ডাউনলোড করে ইন্সটল করতে হবে। নিচে কয়টি ধাপে এই ইন্সটল পক্রিয়া দেখানো হলোঃ

ধাপ-১: এই লিংক  http://www.isc.org/downloads  থেকে ডাউনলোড অপশন থেকে BIND সফটওয়্যারটি ডাউনলোড করতে হবে।

এবার আপনার সিস্টেমের আর্কিটেকচার অনুযায়ী 64-Bit অথবা 32-Bit সিলেক্ট করে সেভ করুন।

ধাপ-২ঃ Download হয়ে গেলে সেভ লকেশন থেকে Zip ফাইলটি Extract করে একটি ফোল্ডারে সেভ করুন। এবং সেখান থেকে BINDInstall.exe ফাইলটিতে রাইট বাটন দিয়ে “Run as administrator” Option সিলেক্ট করে রান করুন।

ধাপ-৩ঃ এবার নিচের চিত্রের ন্যায় Target Directory  তে “C:\Program Files\dig” এবং Options এর মধ্যে “Tools Only” চেক করে বাকি গুলা আনচেক করে Install এ ক্লিক করুন।

Installation এর সময় যদি আপনার পিসিতে “Microsoft Visual C++ Redistribution” প্যাকেজটি Install করা না থাকে তাহলে Install করে নিতে হবে। অথবা নিচের চিত্রের ন্যায় “Repair” এ ক্লিক করুন।

এরপর Install Successfull দেখাবে।

এখন আপনার পিসিতে BIND Dig tool সফল্ভাবে  Install হয়েছে। এখন Command Prompt থেকে Dig কমান্ডটি পাওয়ার জন্যে নিচের চিত্রের ন্যায় একটি Environment Variable সেট করতে হবে।

এবার Command Prompt থেকে সহজেই dig Command টি ব্যবহার করে DNS যাবতীয় কুয়েরী পরীক্ষা করতে পারবেন।

পরবর্তী পর্বে থাকছে DNS Dig Command এর ব্যবহার নিয়ে বিষদ আলোচনা।

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  টি দেখার জন্য

[root@localhost ~]# hostname

localhost.localdomain

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

[root@localhost ~]# vim /etc/hostname
ns1.mahedi.me

:x

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

[root@localhost ~]# logout

Login:

[root@ns1 ~]#

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

[root@ns1 ~]# vim /etc/hosts

192.168.1.5        ns1.mahedi.me           ns1

:x

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

root@ns1 ~]# hostname
ns1.mahedi.me
root@ns1 ~]# hostname –d
mahedi.me
root@ns1 ~]# hostname –f
ns1.mahedi.me

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

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

root@ns1 ~]# 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 করে নিতে পারবো, সেক্ষেত্রে আপনার সার্ভার এ অবশ্যই ইন্টারনেট সংযোগ থাকতে হবে।

[root@ns1 ~]# 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) এর একটি ব্যাকআপ নিব, যেন কনফিগারেশন এর সময় বা পরবর্তীতে কোন সমস্যা হলে সহজে রোল-ব্যাক করতে পারা যায়।

[root@ns1 ~]# cd /etc/
[root@ns1 etc]# cp named.conf named.conf.ori

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

[root@ns1 ~]# 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 মধ্যে কি ফাইল আগে থেকে তৈরি করা থাকে!

[root@ns1 ~]# cd /var/named/

[root@ns1 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 এর জন্য দেয়া নামে পেস্ট করে আমাদের ডাটা গুলোকে এন্ট্রি দিবো।

[root@ns1 named]# cp named.localhost db.mahedi.me.for
[root@ns1 named]# cp named.loopback db.1.168.192.in-addr.arpa

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

[root@ns1 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 ফাইলটিকে এডিট করবোঃ

[root@ns1 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 করে দিবো

[root@ns1 named]# chgrp named db.mahedi.me.for
[root@ns1 named]# chgrp named db.1.168.192.in-addr.arpa

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

[root@ns1 named]# named-checkzone zone db.mahedi.me.for
zone zone/IN: loaded serial 0
OK

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

[root@ns1 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 সার্ভারটি কাজ করতে শুরু করবে।

[root@ns1 named]# systemctl restart named.service

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

[root@ns1 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 সার্ভার এর আইপি-এড্রেসটি দিলেই হবে।

[root@ns1 named]# vim /ete/reslov.conf

search mahedi.me
nameserver 192.168.1.5

:x

[root@ns1 named]#

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

[root@ns1 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

[root@ns1 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 করতে হবে।

[root@ns1 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 ফাইলটিকে এডিট করবোঃ

[root@ns1 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) এর একটি ব্যাকআপ নিব, যেন কনফিগারেশন এর সময় বা পরবর্তিতে কোন সমস্যা হলে সহজে রোলব্যাক করতে পারা যায়।

[root@ns1 ~]# cd /etc/
[root@ns1 etc]# cp named.conf named.conf.ori

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

[root@ns2 ~]# 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 করবো।

[root@ns1 named]# systemctl restart named.service
[root@ns1 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 করতে পেড়েছে কিনা।

[root@ns2 ~]# cd /var/named/slaves/
[root@ns2 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  দিয়ে  পরীক্ষা করবো।

[root@n2 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

[root@ns1 named]#


 

Install DNS Server with fmDNS Graphical Interface on CentOS/RHEL 6.x/7.x

Description

Manage one or more ISC BIND DNS servers without having to login to each server to update zone or configuration files. Just make your changes and build the configs all from the web interface. With fmDNS, you can manage:

  • Zone files (A, AAAA, CNAME, PTR, TXT, SRV, NS records, and many more!)
  • named options
  • Views
  • ACLs
  • Keys
  • Logging channels and categories
  • Controls
  • DNSSEC keys and zones

Settings can be configured globally for all servers with individual server overrides for when your servers are all configured the same and when they are all unique. You can also import existing named-compatible zone files for faster data entry.

Server configuration and zone files can be updated via cron, http(s), or ssh.

DNS Server Details:

Hostname         : dns.mahedi.me
IP Address       : 192.168.0.14/24

1. Hostname Configuration

Edit /etc/sysconfig/network file to configure hostname:

vim /etc/sysconfig/network

and set such as:

NETWORKING=yes
HOSTNAME=dns.mahedi.me

For RHEL/CentOS-7 Edit /etc/hostname :

vim /etc/hostname

and set such as:

dns.mahedi.me

Edit the /etc/hosts file:

vim /etc/hosts

and set such as:

127.0.0.1       localhost.localdomain   localhost
192.168.0.14    dns.mahedi.me           dns

Check hostname with the following command and see the output:

[root@dns ~]# hostname 
dns.mahedi.me

[root@dns ~]# hostname -f 
dns.mahedi.me

[root@dns ~]# hostname -d
mahedi.me

2. Software Installation BIND name server

yum install bind bind-utils bind-devel bind-libs -y
 
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!

3. Creating database and user

[root@dns ~]# mysql -u root -p
Enter password: 

CREATE DATABASE dns;
CREATE USER 'dnsadmin'@'localhost' IDENTIFIED BY 'Password';
GRANT ALL PRIVILEGES ON dns.* TO 'dnsadmin'@'localhost';
flush privileges;
quit

4. Download packages:

[root@dns ~]# cd /opt 
[root@dns opt]# wget http://www.facilemanager.com/download/facilemanager-complete-2.2.1.tar.gz 
[root@dns opt]# tar -zxvf facilemanager-complete-2.2.1.tar.gz 
[root@dns opt]# cp -r /opt/facileManager/server/ /var/www/html/dnsadmin

5. Change ownership and permission:

[root@dns opt]# chown apache -R /var/www/html/dnsadmin
[root@dns opt]# chmod 755 -R /var/www/html/dnsadmin

6. Configure the web server:

[root@dns ~]# vim /etc/httpd/conf.d/dnsadmin.conf
Alias /dnsadmin /var/www/html/dnsadmin

<Directory /var/www/html/dnsadmin/>

 Options FollowSymLinks
 AllowOverride All

# For Apache = 2.3:
 Order allow,deny
 allow from all

 # For Apache = 2.4
 # Require all granted 
</Directory>

And restart web services

service httpd restart

Now open the browser give your URL (HTTP://<your address>/dnsadmin/) and follow the next steps:

Step-1: Give database credential and press submit:

 

Step-2: Press continue to create database schema:

Step-4: Press continue

Step-5: Create admin user and give credential for admin user and press submit

Step-6: Now it’s done! Press next to login  panel

Step-7: Activate fmDNS module in module section:

Step-8:  Now load fmDNS module from right-top corner option menu:

Step-9: It’s done! fmDNS loaded successfully.  Now install the client and configure your domain.

7. Clients Installation

At first copy /opt/facileManager/client/facileManager to /usr/local/ and run php /usr/local/facileManager/fmDNS/client.php install

[root@dns ~]# cp -r /opt/facileManager/client/facileManager /usr/local/
[root@dns ~]# php /usr/local/facileManager/fmDNS/client.php install 
Welcome to the fmDNS installer.

Please answer the following questions and the necessary configurations will be
performed for you.

Please enter the location of the facileManager interface:
 Examples include:
 fm.mydomain.com
 fm.mydomain.com:8443
 mydomain.com/fm
 http://fm.mydomain.com/facileManager

Please enter the location of the facileManager interface:

Now give your web-UI access URL: http://192.168.0.14/dnsadmin/

 
Please enter the location of the facileManager interface: http://192.168.0.14/dnsadmin/
  --> Testing 192.168.0.14 via https...failed
  --> Testing 192.168.0.14 via http...ok
  --> Checking account details...Success

Just press enter or give a serial number for zone update:

Please enter the serial number for dns.mahedi.me (or leave blank to create new):

  --> Generating new serial number: 562003234
  --> Adding dns.mahedi.me to the database...Success
  --> Running version tests...ok

  --> Tests complete.  Continuing installation.

Select the update method how server gets the update from web UI (available methods are cron, ssh, or http(s) [c|s|h]) give “c” for cron its work fine for me.

Will dns.mahedi.me get updates via cron, ssh, or http(s) [c|s|h]? c
  --> The crontab has been created.

Configuration file has been saved.

Installation is complete. Please login to the UI to ensure the server settings
are correct.

It’s seen fine. Let’s Add server in UI:

Click Enable button to enable server:


Then click Build configuration to initialize  the server:

It’s done. Your UI interface ready communicate with your server and configure your domain in web UI and automatically update in your server.

!Note: Any changed in configuration file in your server will be modified in every 5 minute from the configuration of database. So for every update and modification done in web interface not in configuration files stored in server.

Zone Creation:

At first, we need to create SOA template that would help you instead of put SOA information every time for every zone.

Create the zone for your domain:

 

Check configuration:

Edit /etc/resolve.conf file and set your server address in Linux client machine:

search mahedi.me
nameserver 192.168.0.14

Now check with different tools. Most famous DNS check tools are nslookup and dig. nslookup is preinstalled in windows and Linux.

[root@dns ~]# nslookup 
> mahedi.me
Server:		192.168.0.14
Address:	192.168.0.14#53

Name:	mahedi.me
Address: 192.168.0.14
> set type=any
> mahedi.me
Server:		192.168.0.14
Address:	192.168.0.14#53

mahedi.me
	origin = dns.mahedi.me
	mail addr = admin.mahedi.me
	serial = 2016061903
	refresh = 7200
	retry = 3600
	expire = 1209600
	minimum = 86400
mahedi.me	nameserver = dns.mahedi.me.
mahedi.me	mail exchanger = 10 dns.mahedi.me.
Name:	mahedi.me
Address: 192.168.0.14
> 192.168.0.14
Server:		192.168.0.14
Address:	192.168.0.14#53

14.0.168.192.in-addr.arpa	name = dns.mahedi.me.

Check configuration with dig tools:

[root@dns ~]# dig  mahedi.me +all

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6 <<>> mahedi.me +all
;; global options: +cmd
;; Got answer:
;; ->>HEADER<

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;mahedi.me.                     IN      A

;; ANSWER SECTION:
mahedi.me.              14399   IN      A       192.168.0.14

;; Query time: 1015 msec
;; SERVER: 192.168.0.14#53(192.168.0.14)
;; WHEN: Fri Jan 19 03:16:02 Bangladesh Standard Time 2016
;; MSG SIZE  rcvd: 54