DNS در انگلیسی مخفف عبارت «سیستم نامگذاری دامین» است و عنوانهای هاست یا URLها را به آدرسهای IP ترجمه میکند. به عنوان مثال، اگر شما آدرس www.ariaservice.net را در مرورگر تایپ میکنید، سرور DNS نام دامین را به آدرس IP متناظر آن ترجمه میکند. از آنجایی که آدرسهای IP را همیشه نمیتوان به حافظه سپرد، سرورهای DNS ها نقش تعیینکنندهای پیدا میکنند. چرا که به خاطر آوردن یک عنوان دامین بسیار سادهتر از یک آدرس IP خواهد بود.
در این مطلب آموزشی، به شما کمک میکنیم تا یک سرور DNS محلی را بر روی سیستم CentOS 7 نصب کنید. البته همین مراحل برای نصب سرور DNS در لینوکسهای RHEL و Scientific Linux 7 نیز قابلاجرا هستند.
نصب سرور 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 را بر روی سرورتان نصب کنید.
[php]
yum install bind bind-utils -y
[/php]
گام ۱) تنظیمات سرور DNS
برای این منظور، فایل ‘/etc/named.conf’ را ویرایش کنید.
[php]
vi /etc/named.conf
[/php]
مواردی را که در زیر با فونت ضخیم نوشته شدهاند، اضافه کنید.
[php]
//
// 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>[/php]
گام ۲) ساخت فایلهای Zone
در این مرحله میخواهیم Zoneهای فوروارد و ریورس را که در فایل ‘/etc/named.conf’ به آنها اشاره کرده بودیم، ایجاد کنیم.
ساخت Forward Zone
فایل forward.ariaservice را درون دایرکتوری ‘/var/named’ ایجاد کنید.
[php]
vi /var/named/forward.ariaservice
[/php]
خطوط زیر را اضافه کنید.
[php]
$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
[/php]
ساخت Reverse Zone
فایل reverse.ariaservice را درون دایرکتوری ‘/var/named’ ایجاد کنید.
[php]
vi /var/named/reverse.ariaservice
[/php]
حالا نوبت به اضافهکردن خطوط زیر است.
[php]</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>[/php]
گام ۳) راهاندازی سرویس DNS
فعالسازی و شروع سرویس DNS را به صورت زیر انجام دهید.
[php]
systemctl enable named
systemctl start named
[/php]
گام ۴) تنظیمات فایروال
پورت پیشفرض شماره 53 سرویس DNS میبایست مجوّزهای لازم را در فایروال داشته باشد. برای این منظور، فرمانهای زیر به کمک شما خواهند آمد.
[php]
firewall-cmd –permanent –add-port=53/tcp
firewall-cmd –permanent –add-port=53/udp
[/php]
گام ۵) راهاندازی دوباره فایروال
فرمان زیر را تایپ کنید.
[php]
firewall-cmd –reload
[/php]
گام ۶) تنظیمات مجوّزها، مالکیتها و SELinux
فرمانهای زیر را یک به یک اجرا کنید.
[php]
chgrp named -R /var/named
chown -v root:named /etc/named.conf
restorecon -rv /var/named
restorecon /etc/named.conf
[/php]
گام ۷) تست تنظیمات سرور DNS و فایلهای Zone
تست تنظیمات پیشفرض سرور DNS را به صورت زیر میتوان انجام داد.
[php]
named-checkconf /etc/named.conf
[/php]
اگر چیزی نمایش داده نشد، فایل تنظیمات شما معتبر و در دسترس است.
بررسی Forward zone
[php]
named-checkzone ariaservice.local /var/named/forward.ariaservice
[/php]
نمونه خروجی
[php]
zone ariaservice.local/IN: loaded serial 2011071001
OK
[/php]
بررسی reverse zone
[php]
named-checkzone ariaservice.local /var/named/reverse.ariaservice
[/php]
نمونه خروجی
[php]
zone ariaservice.local/IN: loaded serial 2011071001
OK
[/php]
حالا جزئیات سرور DNS را درون فایل تنظیمات رابط کاربری شبکهتان وارد کنید.
[php]
vi /etc/sysconfig/network-scripts/ifcfg-enp0s3
[/php]
به صورت زیر:
[php]
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”
[/php]
حالا نوبت به ویرایش فایل /etc/resolv.conf است.
[php]
vi /etc/resolv.conf
[/php]
برای nameserver آدرس IP را وارد کنید.
[php]
nameserver&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 192.168.1.101
[/php]
فایل را ذخیره کرده و ببندید.
اکنون سرویس شبکه را دوباره راهاندازی کنید.
[php]
systemctl restart network
[/php]
گام ۸) تست سرور DNS
[php]
dig masterdns.ariaservice.local
[/php]
نمونه خروجی
[php]</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
[/php]
و با فرمان زیر:
[php]
nslookup ariaservice.local
[/php]
نمونه خروجی
[php]</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>[/php]
حالا سرور اصلی DNS آماده استفاده است و باید خودمان را برای تنظیمات نصب سرور ثانویه کنیم.
نصب سرور DNS ثانویه
با استفاده از فرمان زیر، بستههای bind را نصب کنید.
[php]
yum install bind bind-utils -y
[/php]
گام ۱) تنظیمات سرور DNS ثانویه
برای این منظور، باید فایل ‘/etc/named.conf’ را ویرایش کنید.
[php]
vi /etc/named.conf
[/php]
مطابق زیر و خطوطی که با فونت ضخیم مشخص شدهاند، تغییرات را انجام دهید.
[php]
//
// 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;nbsp;&amp;nbsp;&amp;nbsp;&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";
[/php]
گام ۲) راهاندازی سرویس DNS
راهاندازی سرور DNS با کمک فرمانهای زیر صورت میگیرد.
[php]
systemctl enable named
systemctl start named
[/php]
حالا Zoneهای فوروارد و ریورس به صورت خودکار از سرور اصلی DNS به آدرس ‘/var/named/slaves/’ در سرور DNS ثانویه کپی میشوند.
[php]
ls /var/named/slaves/
[/php]
نمونه خروجی
[php]
ariaservice.fwd&amp;nbsp; ariaservice.rev
[/php]
گام ۳) اضافهکردن جزئیات سرور DNS
در فایل تنظیمات رابط کاربری شبکه، جزئیات سرور را مطابق زیر وارد کنید.
[php]
vi /etc/sysconfig/network-scripts/ifcfg-enp0s3
[/php]
[php]
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"
[/php]
حالا نوبت به ویرایش فایل /etc/resolv.conf است.
[php]
vi /etc/resolv.conf
[/php]
در اینجا باید آدرس IP سرور را وارد کنید.
[php]
nameserver 192.168.1.101
nameserver 192.168.1.102
[/php]
فایل را ذخیره کرده و ببندید.
اکنون راهاندازی دوباره شبکه را باید انجام دهید.
[php]
systemctl restart network
[/php]
گام ۴) تنظیمات فایروال
حتماً باید به پورت پیشفرض شماره 53 سرویس DNS برای عبور از فایروال مجوّز میدهیم.
[php]
firewall-cmd –permanent –add-port=53/tcp
[/php]
گام ۵) راهاندازی دوباره فایروال
[php]
firewall-cmd –reload
[/php]
گام ۶) تنظیمات مجوّزها، مالکیت و SELinux
[php]
chgrp named -R /var/named
chown -v root:named /etc/named.conf
restorecon -rv /var/named
restorecon /etc/named.conf
[/php]
گام ۷) تست سرور DNS
[php]
dig masterdns.ariaservice.local
[/php]
نمونه خروجی
[php]</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>[/php]
و فرمان زیر:
[php]
dig secondarydns.ariaservice.local
[/php]
نمونه خروجی
[php]</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>[/php]
سپس فرمان زیر:
[php]
nslookup ariaservice.local
[/php]
نمونه خروجی
[php]</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>[/php]
تنظیمات جبهه کلاینت
جزئیات سرور DNS را در فایل ‘/etc/resolv.conf’ در کلیه سیستمهای کلاینت وارد کنید.
[php]
vi /etc/resolv.conf
[/php]
به صورت زیر:
[php]
# Generated by NetworkManager
search ariaservice.local
nameserver 192.168.1.101
nameserver 192.168.1.102
[/php]
حالا سرویس شبکه دوباره راهاندازی کنید یا سیستم را ریبوت کنید.
تست سرور DNS
حالا میتوانید با کمک یکی از فرمانهای زیر، سرور DNS را تست کنید.
[php]
dig masterdns.ariaservice.local
dig secondarydns.ariaservice.local
dig client.ariaservice.local
nslookup ariaservice.local
[/php]
کار ما در اینجا خاتمه یافت. در حال حاضر سرورهای DNS اصلی و ثانویه، آماده دسترسی و استفاده هستند.
جمعبندی
در این آموزش، نحوه نصب یک سرور DNS محلی را بر روی توزیع لینوکس CentOS 7 بررسی کردیم. امیدواریم که این مطلب نیز مورد توجه شما قرار گرفته باشد.
منبع: Unixmen.com
