همانطور که میدانید انواع مختلفی از راه حل های متن باز برای DNS ارایه شده است که از مهم ترین و کامل ترین آنها BIND میباشد از دیگر راه حل ها که خودم استفاده کرده ام میتوان به DNSMASQ اشاره کرد که خیلی سبک تر از بایند است اما کارایی های آن را ندارد و بیشتر از راه حل های میان رده محسوب میشود.
در این موضوع میخواهیم به آموزش نحوه نصب و پیکره بندی BIND بپردازیم اگر هنوز مبتدی هستید به شما پیشنهاد میکنیم که ابتدا به آموزش نحوه تنظیم Hostname مراجعه نمایید.
قبل از شروع به شما پیشنهاد میکنم که حداقل بر روی 2 سرور ابری سرویس DNS خود را راه اندازی کرده باشید ( اگرچه در صورتیکه تازه کار هستید و بیشتر علاقه مند به یادگیری باشید صرفا استفاده از سیستم local شما کفایت میکند ) همچنین باید همواره سرورهای اصلی و دوم را به صورت افزونه قرار داده تا در صورت خرابی یکی دومی کار کرده و سرویس شما متوقف نشود.
همچنین توصیه میشود مطالعه بفرمایید.
تنظیمات Bind DNS Server در لینوکس (اوبونتو - دبیان)
نحوه نصب و راه اندازی میل سرور لینوکسی با Postfix و Dovecot
معرفی انواع رکورد DNS (یا A - MX - PTR - SOA - SPF - NS - TXT - DKIM - CNAME)
نحوه تعریف رکورد DKIM در سرور Bind
توجه داشته باشید که سیستمی که ما میخواهیم روی آن این سرویس را اجرا نماییم بر پایه RedHat است و شامل RedHat ، CentOS و Fedora ( با کمی تغییر در برخی دستورات ) خواهد بود برای سیستم های مبتنی بر debian باید از مجموعه دستورات مختص به آن استفاده نمود هرچند مجموعه دستورات آن شبیه است اما در برخی موارد تفاوت دارد.
استفاده از سرور های DNS خود باعث میشود که شما دسترسی مستقیم بر زیرساخت های هاستینگ خود داشته باشید و علاوه بر آن رکوردهای DNS خود را بتوانید کنترل نمایید
همانند بسیاری از سرورهای جدید ابتدا باید از به روز بودن سرور خود مطمئن شوید برای این کار از دستور زیر استفاده میکنیم.
پسوند –y برای بله گفتن به پرسش سیستم برای اطمینان از نصب پکیج های repository آورده شده است.
همچنین توصیه میشود مطالعه بفرمایید.
مقاله مدیریت پکیج ها در لینوکس با استفاده از yum
ابتدا bind و bind-utils را با دستور زیر نصب میکنیم :
حال فایل مربوط به تنظیمات آن را باز کرده و تغییرات زیر را در آن اعمال میکنیم توجه داشته باشید که تمام سرویس های لینوکس دارای یک فایل تنظیمات هستند که به وسیله یک text editor میتوانیم انها را باز کرده و تنظیمات خود را در آنها اعمال نماییم. ما در اینجا از نرم افزار ویرایش متن nano استفاده میکنیم چنانچه سرور شما این ویرایشگر را ندارد میتوانید از ویرایشگر vi یا vim استفاده نمایید و یا با دستور زیر این ویرایشگر را نصب کنید :
حال با ویرایشگر متن خود فایل configuration سرویس named که همان bind میباشد را باز کرده و تغییرات میدهیم :
تغییرات مورد نظر را اعمال میکنیم به جای 2.2.2.2 آدرس IP سرور ثانویه خود را قرار میدهیم در داخل متن سعی میکنیم در مورد مواردی که تغییر میکنند و نحوه عمکرد آن توضیحات مختصری را بدهیم :
حالا در فایل بالا بخش listen on را باید کامنت کنیم تا به تمام interface های موجود گوش کند.
قسمت recursion را برای مبارزه با حملات DDoS موسوم به reflection غیر فعال نموده ایم.
با تنظیمات بالا حالا شما آماده اید تا zone خود را به zone های موجود در DNS اضافه نمایید برای این کار متن زیر را به فایل named.conf خود اضافه نمایید.
حال باید فایل را save کرده و از آن خارج شوید. بعد از این کار باید فایل های zone خود را در سرور ایجاد نمایید. با توجه به تغییراتی که در فایل configuration بالا ایجاد نموده این باید اسم فایل zone شما به صورت mydomain.com.zone باشد چنانچه بیش از یک فایل داشته باشید این روش نام گذاری باعث میشود بعدها که سیستم شما شلوغ شد راحت فایل های خود را پیدا نمایید. ایحاد یا تغییر در فایل را نیز میتوانید با همان text editor معروف nano انجام دهید. دستور زیر این کار را برای شما انجام خواهد داد :
در این موضوع میخواهیم به آموزش نحوه نصب و پیکره بندی BIND بپردازیم اگر هنوز مبتدی هستید به شما پیشنهاد میکنیم که ابتدا به آموزش نحوه تنظیم Hostname مراجعه نمایید.
قبل از شروع به شما پیشنهاد میکنم که حداقل بر روی 2 سرور ابری سرویس DNS خود را راه اندازی کرده باشید ( اگرچه در صورتیکه تازه کار هستید و بیشتر علاقه مند به یادگیری باشید صرفا استفاده از سیستم local شما کفایت میکند ) همچنین باید همواره سرورهای اصلی و دوم را به صورت افزونه قرار داده تا در صورت خرابی یکی دومی کار کرده و سرویس شما متوقف نشود.
همچنین توصیه میشود مطالعه بفرمایید.
تنظیمات Bind DNS Server در لینوکس (اوبونتو - دبیان)
نحوه نصب و راه اندازی میل سرور لینوکسی با Postfix و Dovecot
معرفی انواع رکورد DNS (یا A - MX - PTR - SOA - SPF - NS - TXT - DKIM - CNAME)
نحوه تعریف رکورد DKIM در سرور Bind
توجه داشته باشید که سیستمی که ما میخواهیم روی آن این سرویس را اجرا نماییم بر پایه RedHat است و شامل RedHat ، CentOS و Fedora ( با کمی تغییر در برخی دستورات ) خواهد بود برای سیستم های مبتنی بر debian باید از مجموعه دستورات مختص به آن استفاده نمود هرچند مجموعه دستورات آن شبیه است اما در برخی موارد تفاوت دارد.
استفاده از سرور های DNS خود باعث میشود که شما دسترسی مستقیم بر زیرساخت های هاستینگ خود داشته باشید و علاوه بر آن رکوردهای DNS خود را بتوانید کنترل نمایید
همانند بسیاری از سرورهای جدید ابتدا باید از به روز بودن سرور خود مطمئن شوید برای این کار از دستور زیر استفاده میکنیم.
کد PHP:
yum update -y
پسوند –y برای بله گفتن به پرسش سیستم برای اطمینان از نصب پکیج های repository آورده شده است.
همچنین توصیه میشود مطالعه بفرمایید.
مقاله مدیریت پکیج ها در لینوکس با استفاده از yum
ابتدا bind و bind-utils را با دستور زیر نصب میکنیم :
کد PHP:
yum install bind bind-utils -y
کد PHP:
Yum install nano
کد PHP:
nano -w /etc/named.conf
کد PHP:
options
{ #listen-on port 53 { 127.0.0.1; };
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-transfer { localhost; 2.2.2.2; };
recursion no;
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";
};
قسمت recursion را برای مبارزه با حملات DDoS موسوم به reflection غیر فعال نموده ایم.
با تنظیمات بالا حالا شما آماده اید تا zone خود را به zone های موجود در DNS اضافه نمایید برای این کار متن زیر را به فایل named.conf خود اضافه نمایید.
کد PHP:
zone "mydomain.com" IN {
type master;
file "mydomain.com.zone";
allow-update { none; }; };
کد PHP:
nano -w /var/named/mydomain.com.zone
حالا باید مقادیر زیر را در فایلی که ساخته اید اضافه نمایید توجه داشته باشید که سناریوی ما به صورتی است که شما دارای 2 سرور به صورت primary و secondry میباشید و آدرسهای IP را به صورت زیر میتوانید با IP های خود عوض نمایید.
1.1.1.1 آدرس ip اولین سرور 2.2.2.2 آدرس ip دومین سرور 3.3.3.3 آدرس ip جایی که دامنه خود را به آن وصل مینمایید مانند وب سرور یا هر چیز دیگر اما در دنیای واقعی که اکثر سرور ها 2 یا حداکثر 3 آدرس IP دارند بهتر است یکی از این IP ها را برای وب سرور قرار داده و برای سایر موارد از IP دیگری استفاده شود.
حال فایل را ذخیره کرده و سرویس DNS را یک بار restart میکنیم وقتی که این سرویس برای اولین بار اجرا میشود از آنجایی که باید فایل rndc.key خود را ساخته و راه اندازی نماید ممکن است سرعت پایین تری داشته باشد اما بعد از اینکه برای اولین بار این اتفاق افتاد در موارد بعدی این تغییر سرعت را نخواهیم داشت.
کارهای بعد از نصب : یکی از مواردی که مدیر یک سیستم باید آنها را به خوبی بداند و به آنها مسلط باشد امور بعد از نصب است این موارد در بسیاری از اوقات باعث میشود که سیستم روال خود را بعد از restartحفظ کند و بعدها دچار مشکل نشود از جمله این کارها اضافه کردن سرویس به جمع سرویس هایی است که در لیست سرویس های همیشه آماده به کار در کرنل سیستم قرار میگیرند برای این کار از دستور زیر استفاده میکنیم :
همچنین میتوانیم از دستور systemctl enable named نیز استفاده نماییم تبریک میگم شما توانستید که یک سرویس DNS را با موفقیت راه اندازی نمایید برای اطمینان از درست کار کردن سرویس خود بر روی سرور میتوانید از دستور زیر استفاده نمایید با این کار سیستم باید IP شما را به درستی resolve نماید.
برای داشتن کل متن آموزش به صورت pdf میتوانید فایل کل آموزش را از اینجا دانلود نمایید.
1.1.1.1 آدرس ip اولین سرور 2.2.2.2 آدرس ip دومین سرور 3.3.3.3 آدرس ip جایی که دامنه خود را به آن وصل مینمایید مانند وب سرور یا هر چیز دیگر اما در دنیای واقعی که اکثر سرور ها 2 یا حداکثر 3 آدرس IP دارند بهتر است یکی از این IP ها را برای وب سرور قرار داده و برای سایر موارد از IP دیگری استفاده شود.
کد PHP:
$TTL 86400
@ IN SOA ns1.mydomain.com. root.mydomain.com. ( 2013042201 ;
Serial 3600
;Refresh 1800
;Retry 604800
;Expire 86400 ;Minimum TTL);
Specify our two nameservers IN NS ns1.mydomain.com. IN NS ns2.mydomain.com.; Resolve nameserver hostnames to IP, replace with your two droplet IP addresses.ns1 IN A 1.1.1.1ns2 IN A 2.2.2.2
; Define hostname -> IP pairs which you wish to resolve@ IN A 3.3.3.3www IN A 3.3.3.3
کد PHP:
service named restart
##OR you can say :
systemctl restart named
کد PHP:
chconfig named on
کد PHP:
dig @1.1.1.1 mydomain.com