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]#