DNS در انگلیسی مخفف عبارت «سیستم نامگذاری دامین» است و عنوان‌های هاست یا URL‌ها را به آدرس‌های IP ترجمه می‌کند. به عنوان مثال، اگر شما آدرس www.ariaservice.net را در مرورگر تایپ می‌کنید، سرور DNS نام دامین را به آدرس IP متناظر آن ترجمه می‌کند. از آنجایی که آدرس‌های IP را همیشه نمی‌توان به حافظه سپرد، سرور‌های DNS ها نقش تعیین‌کننده‌ای پیدا می‌کنند. چرا که به خاطر ‌آوردن یک عنوان دامین بسیار ساده‌تر از یک آ‌درس IP خواهد بود.

در این مطلب ‌آموزشی، به شما کمک می‌کنیم تا یک سرور DNS محلی را بر روی سیستم CentOS 7 نصب کنید. البته همین مراحل برای نصب سرور DNS  در لینوکس‌های RHEL و Scientific Linux 7 نیز قابل‌اجرا هستند.

نصب سرور DNS

نصب سرور DNS

سناریوی مراحل کار

به منظور رسیدن به اهداف آموزشی که در این مطلب دنبال می‌کنیم، از سه سیستم نقطه‌ای استفاده می‌کنیم. یکی به عنوان سرور Master DNS عمل می‌کند، دیگری Secondary DNS و سیستم سوم کلاینت DNS ما خواهد بود. در اینجا جزئیات سه سیستم را مرور می‌کنیم.

جزئیات سرور DNS اصلی یا Master

  • سیستم‌عامل: CentOS 7 مینیمال سرور
  • عنوان هاست: ariaservice.local
  • آدرس IP: 168.1.101/24

جزئیات سرور DNS ثانویه یا Slave

  • سیستم‌عامل: CentOS 7 مینیمال سرور
  • عنوان هاست: ariaservice.local
  • آدرس IP: 168.1.102/24

جزئیات کلاینت

  • سیستم‌عامل: CentOS 6.5 دسکتاپ
  • عنوان هاست: ariaservice.local
  • آدرس IP: 168.1.103/24

نصب سرور DNS اصلی

برای این منظور باید بسته‌های bind9 را بر روی سرورتان نصب کنید.

yum install bind bind-utils -y

گام ۱) تنظیمات سرور DNS

برای این منظور، فایل ‘/etc/named.conf’ را ویرایش کنید.

vi /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; <strong>192.168.1.101;</strong>}; <strong>### Master DNS IP ###</strong>
#    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; <strong>192.168.1.0/24;</strong>}; <strong>### IP Range ###</strong>
    allow-transfer{ localhost; <strong>192.168.1.102;</strong> };   <strong>### Slave DNS IP ###</strong>
    /* 
     - 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";
};

<strong>zone "unixmen.local" IN {
type master;
file "forward.unixmen";
allow-update { none; };
};
zone "1.168.192.in-addr.arpa" IN {
type master;
file "reverse.unixmen";
allow-update { none; };
};</strong>

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";</pre>
<pre>

گام ۲) ساخت فایل‌های Zone

در این مرحله می‌خواهیم Zone‌های فوروارد و ریورس را که در فایل ‘/etc/named.conf’ به آنها اشاره کرده بودیم، ایجاد کنیم.

ساخت Forward Zone

فایل forward.ariaservice را درون دایرکتوری ‘/var/named’  ایجاد کنید.

vi /var/named/forward.ariaservice

خطوط زیر را اضافه کنید.

$TTL 86400
@   IN  SOA     masterdns.ariaservice.local. root.ariaservice.local. (
        2011071001  ;Serial
        3600        ;Refresh
        1800        ;Retry
        604800      ;Expire
        86400       ;Minimum TTL
)
@       IN  NS          masterdns.ariaservice.local.
@       IN  NS          secondarydns.ariaservice.local.
@       IN  A           192.168.1.101
@       IN  A           192.168.1.102
@       IN  A           192.168.1.103
masterdns       IN  A   192.168.1.101
secondarydns    IN  A   192.168.1.102
client          IN  A   192.168.1.103

ساخت Reverse Zone

فایل reverse.ariaservice را درون دایرکتوری ‘/var/named’ ایجاد کنید.

vi /var/named/reverse.ariaservice

حالا نوبت به اضافه‌کردن خطوط زیر است.

</pre>
<pre>$TTL 86400
@   IN  SOA     masterdns.unixmen.local. root.unixmen.local. (
        2011071001  ;Serial
        3600        ;Refresh
        1800        ;Retry
        604800      ;Expire
        86400       ;Minimum TTL
)
@       IN  NS          masterdns.unixmen.local.
@       IN  NS          secondarydns.unixmen.local.
@       IN  A           192.168.1.101
@       IN  A           192.168.1.102
@       IN  A           192.168.1.103
masterdns       IN  A   192.168.1.101
secondarydns    IN  A   192.168.1.102
client          IN  A   192.168.1.103</pre>
<pre>

گام ۳) راه‌اندازی سرویس DNS

فعالسازی و شروع سرویس DNS را به صورت زیر انجام دهید.

systemctl enable named
systemctl start named

گام ۴) تنظیمات فایروال

پورت پیش‌فرض شماره 53 سرویس DNS می‌بایست مجوّزهای لازم را در فایروال داشته باشد. برای این منظور، فرمان‌های زیر به کمک شما خواهند آمد.

firewall-cmd --permanent --add-port=53/tcp
firewall-cmd --permanent --add-port=53/udp

گام ۵) راه‌اندازی دوباره فایروال

فرمان زیر را تایپ کنید.

firewall-cmd --reload

گام ۶) تنظیمات مجوّزها، مالکیت‌ها و SELinux

فرمان‌های زیر را یک به یک اجرا کنید.

chgrp named -R /var/named
chown -v root:named /etc/named.conf
restorecon -rv /var/named
restorecon /etc/named.conf

گام ۷) تست تنظیمات سرور DNS و فایل‌های Zone

تست تنظیمات پیش‌فرض سرور DNS را  به صورت زیر می‌توان انجام داد.

named-checkconf /etc/named.conf

اگر چیزی نمایش داده نشد، فایل تنظیمات شما معتبر و در دسترس است.

بررسی Forward zone

named-checkzone ariaservice.local /var/named/forward.ariaservice

نمونه خروجی

zone ariaservice.local/IN: loaded serial 2011071001
OK

بررسی reverse zone

named-checkzone ariaservice.local /var/named/reverse.ariaservice

نمونه خروجی

zone ariaservice.local/IN: loaded serial 2011071001
OK

حالا جزئیات سرور DNS را درون فایل تنظیمات رابط کاربری شبکه‌تان وارد کنید.

vi /etc/sysconfig/network-scripts/ifcfg-enp0s3

به صورت زیر:

TYPE=”Ethernet”
BOOTPROTO=”none”
DEFROUTE=”yes”
IPV4_FAILURE_FATAL=”no”
IPV6INIT=”yes”
IPV6_AUTOCONF=”yes”
IPV6_DEFROUTE=”yes”
IPV6_FAILURE_FATAL=”no”
NAME=”enp0s3”
UUID=”5d0428b3-6af2-4f6b-9fe3-4250cd839efa”
ONBOOT=”yes”
HWADDR=”08:00:27:19:68:73”
IPADDR0=”192.168.1.101”
PREFIX0=”24”
GATEWAY0=”192.168.1.1”
DNS=”192.168.1.101”
IPV6_PEERDNS=”yes”
IPV6_PEERROUTES=”yes”

حالا نوبت به ویرایش فایل /etc/resolv.conf است.

vi /etc/resolv.conf

برای nameserver آدرس IP را وارد کنید.

nameserver&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; 192.168.1.101

فایل را ذخیره کرده و ببندید.

اکنون سرویس شبکه را دوباره راه‌اندازی کنید.

systemctl restart network

گام ۸) تست سرور DNS

dig masterdns.ariaservice.local

نمونه خروجی

</pre>
<pre>; <<>> DiG 9.9.4-RedHat-9.9.4-14.el7 <<>> masterdns.unixmen.local
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 25179
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;masterdns.unixmen.local.    IN    A

;; ANSWER SECTION:
masterdns.unixmen.local. 86400    IN    A    192.168.1.101

;; AUTHORITY SECTION:
unixmen.local.        86400    IN    NS    secondarydns.unixmen.local.
unixmen.local.        86400    IN    NS    masterdns.unixmen.local.

;; ADDITIONAL SECTION:
secondarydns.unixmen.local. 86400 IN    A    192.168.1.102

;; Query time: 0 msec
;; SERVER: 192.168.1.101#53(192.168.1.101)
;; WHEN: Wed Aug 20 16:20:46 IST 2014
;; MSG SIZE  rcvd: 125
 

و با فرمان زیر:

nslookup ariaservice.local

نمونه خروجی

</pre>
<pre>Server:        192.168.1.101
Address:    192.168.1.101#53

Name:    unixmen.local
Address: 192.168.1.103
Name:    unixmen.local
Address: 192.168.1.101
Name:    unixmen.local
Address: 192.168.1.102</pre>
<pre>

حالا سرور اصلی DNS آماده استفاده است و باید خودمان را برای تنظیمات نصب سرور ثانویه کنیم.

نصب سرور DNS ثانویه

با استفاده از فرمان زیر، بسته‌های bind را نصب کنید.

yum install bind bind-utils -y

گام ۱) تنظیمات سرور DNS ثانویه

برای این منظور، باید فایل ‘/etc/named.conf’ را ویرایش کنید.

vi /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.1.102; };
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&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; { localhost; 192.168.1.0/24; };
.
.
.
.
zone "." IN {
type hint;
file "named.ca";
};
zone "ariaservice.local" IN {
type slave;
file "slaves/ariaservice.fwd";
masters { 192.168.1.101; };
};
zone "1.168.192.in-addr.arpa" IN {
type slave;
file "slaves/ariaservice.rev";
masters { 192.168.1.101; };
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

گام ۲) راه‌اندازی سرویس DNS

راه‌اندازی سرور DNS با کمک فرمان‌های زیر صورت می‌گیرد.

systemctl enable named
systemctl start named

حالا Zone‌های فوروارد و ریورس به صورت خودکار از سرور اصلی DNS به آدرس ‘/var/named/slaves/’ در سرور DNS ثانویه کپی می‌شوند.

ls /var/named/slaves/

نمونه خروجی

ariaservice.fwd&amp;amp;nbsp; ariaservice.rev

گام ۳) اضافه‌کردن جزئیات سرور DNS

در فایل تنظیمات رابط کاربری شبکه، جزئیات سرور را مطابق زیر وارد کنید.

vi /etc/sysconfig/network-scripts/ifcfg-enp0s3

 

TYPE="Ethernet"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
NAME="enp0s3"
UUID="5d0428b3-6af2-4f6b-9fe3-4250cd839efa"
ONBOOT="yes"
HWADDR="08:00:27:19:68:73"
IPADDR0="192.168.1.102"
PREFIX0="24"
GATEWAY0="192.168.1.1"
DNS1="192.168.1.101"
DNS2="192.168.1.102"
IPV6_PEERDNS="yes"
IPV6_PEERROUTES="yes"

حالا نوبت به ویرایش فایل /etc/resolv.conf است.

vi /etc/resolv.conf

در اینجا باید آدرس IP سرور را وارد کنید.

nameserver 192.168.1.101
nameserver 192.168.1.102

فایل را ذخیره کرده و ببندید.

اکنون راه‌اندازی دوباره شبکه را باید انجام دهید.

systemctl restart network

گام ۴) تنظیمات فایروال

حتماً باید به پورت پیش‌فرض شماره 53 سرویس DNS برای عبور از فایروال مجوّز می‌دهیم.

firewall-cmd --permanent --add-port=53/tcp

گام ۵) راه‌اندازی دوباره فایروال

firewall-cmd –reload

گام ۶) تنظیمات مجوّزها، مالکیت و SELinux

chgrp named -R /var/named
chown -v root:named /etc/named.conf
restorecon -rv /var/named
restorecon /etc/named.conf

گام ۷) تست سرور DNS

dig masterdns.ariaservice.local

نمونه خروجی

</pre>
<pre>; <<>> DiG 9.9.4-RedHat-9.9.4-14.el7 <<>> masterdns.unixmen.local
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18204
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;masterdns.unixmen.local.    IN    A

;; ANSWER SECTION:
masterdns.unixmen.local. 86400    IN    A    192.168.1.101

;; AUTHORITY SECTION:
unixmen.local.        86400    IN    NS    masterdns.unixmen.local.
unixmen.local.        86400    IN    NS    secondarydns.unixmen.local.

;; ADDITIONAL SECTION:
secondarydns.unixmen.local. 86400 IN    A    192.168.1.102

;; Query time: 0 msec
;; SERVER: 192.168.1.102#53(192.168.1.102)
;; WHEN: Wed Aug 20 17:04:30 IST 2014
;; MSG SIZE  rcvd: 125</pre>
<pre>

و فرمان زیر:

dig secondarydns.ariaservice.local

نمونه خروجی

</pre>
<pre>; <<>> DiG 9.9.4-RedHat-9.9.4-14.el7 <<>> secondarydns.unixmen.local
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 60819
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;secondarydns.unixmen.local.    IN    A

;; ANSWER SECTION:
secondarydns.unixmen.local. 86400 IN    A    192.168.1.102

;; AUTHORITY SECTION:
unixmen.local.        86400    IN    NS    masterdns.unixmen.local.
unixmen.local.        86400    IN    NS    secondarydns.unixmen.local.

;; ADDITIONAL SECTION:
masterdns.unixmen.local. 86400    IN    A    192.168.1.101

;; Query time: 0 msec
;; SERVER: 192.168.1.102#53(192.168.1.102)
;; WHEN: Wed Aug 20 17:05:50 IST 2014
;; MSG SIZE  rcvd: 125</pre>
<pre>

سپس فرمان زیر:

nslookup ariaservice.local

نمونه خروجی

</pre>
<pre>Server:        192.168.1.102
Address:    192.168.1.102#53

Name:    unixmen.local
Address: 192.168.1.101
Name:    unixmen.local
Address: 192.168.1.103
Name:    unixmen.local
Address: 192.168.1.102</pre>
<pre>

تنظیمات جبهه کلاینت

جزئیات سرور DNS را در فایل ‘/etc/resolv.conf’ در کلیه سیستم‌های کلاینت وارد کنید.

vi /etc/resolv.conf

به صورت زیر:

# Generated by NetworkManager
search ariaservice.local
nameserver 192.168.1.101
nameserver 192.168.1.102

حالا سرویس شبکه دوباره راه‌اندازی کنید یا سیستم را ریبوت کنید.

تست سرور DNS

حالا می‌توانید با کمک یکی از فرمان‌های زیر، سرور DNS را تست کنید.

dig masterdns.ariaservice.local
dig secondarydns.ariaservice.local
dig client.ariaservice.local
nslookup ariaservice.local

کار ما در اینجا خاتمه یافت. در حال حاضر سرور‌های DNS اصلی و ثانویه، آماده دسترسی و استفاده هستند.

جمع‌بندی

در این آموزش، نحوه نصب یک سرور DNS محلی را بر روی توزیع لینوکس CentOS 7 بررسی کردیم. امیدواریم که این مطلب نیز مورد توجه شما قرار گرفته باشد.

منبع: Unixmen.com