ویرایش 1.00 ( آخرین بروزرسانی
28nd Sep 2005 ) -
تغییرات
صورت گرفته Changelog
آدرس
اینترنتی: http://www.hezardastan.org/bind
گردآوری و تالیف : مهدی
حسن پور
این مستندات کاملا آزاد و رایگان منتشر میشوند. شما میتوانید آنها را مجددا تحت اجازه نامه GNU General Public License توسعه دهید و یا تغییراتی در آنها ایجاد نمایید.
این مستندات با امید به اینکه برای شما کاربر گرامی قابل استفاده و مفید باشد تهیه شده و توسعه میابد. در عين حال ذكر اين نكته نيز ضروری است که این مستندات بدون هرگونه ضمانت منتشر ميشوند. لطفا جهت اطلاع از جزئیات بیشتر٬ اجازه نامه GNU General Public License را مطالعه فرمایید.
اصطلاح DNS مختصر شده عبارت Domain Name System است و در واقع كار اصلی این سرویس تبدیل اسامی در محیط شبکه٬ به عنوان مثال www.hezardastan.org به IP آدرس سرویس دهنده میزبان آن دامنه٬ به عنوان مثال 80.68.80.137 است. همانطور كه میدانید به خاطر سپردن این IP آدرسها در شبكه های بزرگ مثل اینترنت بسیار دشوار است. به همین دلیل استفاده از یک سرویس دهنده DNS پایدار و امن از جمله ضروریات یک شبكه اینترنتی یا اینترانتی بزرگ است.
شاید بتوان مجموعه یک دامنه «Domain» و زیردامنههایش «Subdomain» را به اعضای یک خانواده تشبیه كرد. به عنوان مثال٬ می دانیم هر شخص یک نام و یک نام خانوادگی دارد. خانواده دامنه ها نیز این گونه اند. مثلا دامنه های www.hezardastan.org ٬ mail.hezardastan.org و ftp.hezardastan همگی اعضای یک خانواده و زیر دامنههای دامنه hezardastan.org هستند و هر کدام با توجه به IP آدرس خاصی که در سرویس دهنده DNS برایشان تعریف شده است٬ درخواست ها را به سرویس دهنده های مربوطه ارجاع می دهند.
بسته نرم افزاری که ما در اینجا برای سرویس دهنده DNS نصب خواهیم کرد و به صورت پیش فرض نیز همراه خانواده Unix ها نصب می شود٬ از محصولات پروژه BIND است و daemon آن named نام دارد. اصطلاح BIND مختصر شده عبارت Berkeley Internet Name Domain است.سرویس دهنده های Authoritative DNS
سرویس دهنده های Authoritative DNS ٬ بزرگترین سرویس دهنده های DNS دنیا هستند و در واقع آخرین بخش نام دامنه ها مانند com ٬ org ٬ net و... بر روی این سرویس دهنده ها آدرس دهی شده است. امروزه 13 سرویس دهنده Authoritative در شبکه جهانی اینترنت قرار دارند و کلیه سرویس دهنده های DNS دیگر باید از طریق مراجعه به این سرویس دهنده های اصلی IP آدرس درخواست شده را جستجو نمایند.
زمانی که شما توسط یک شرکت ارائه دهنده خدمات ثبت دامنه٬ یک دامنه مانند hezardastan.org را ثبت می نمایید٬ در واقع یک record در سرویس دهنده org. اضافه می شود.
ذکر این
نکته نیز ضروری است که سرویس دهنده های DNS مستقیما
به سراغ سرویس دهنده های اصلی
اینترنت نمی روند٬ بلکه از طریق سرویس دهنده های
Caching DNS Servers آدرس IP
های مورد نظر را جستجو
می نمایند.
پیش از
آغاز نصب ذکر این نکته ضروری است که مراحل
نصب با سطح دسترسی کاربر root انجام
می شوند و
اجرای این
daemon با
سطح دسترسی کاربر root
از نظر امنیتی کار خطرناکی است٬ لذا محیط اجرای این daemon را درون Jail
یا
زندان یا محیط بسته محبوس می نماییم.
# cd /usr/local
# wget -c ftp://ftp.isc.org/isc/bind9/9.3.1/bind-9.3.1.tar.gz
# tar zxf bind-9.3.1.tar.gz
# cd bind-9.3.1
# ./configure --prefix=/usr/local/bind
# make
# make install
# mkdir -p /usr/local/bind/{etc,namedb,dev,var/run}
پیکربندی فایل مخدوم «DNS Client»
مخدوم DNS یا DNS Client فایلی است که ابزارهای سیستمی برای دریافت پاسخ سوالات DNS به این فایل مراجعه نموده و آدرس سرویس دهنده های DNS را از این فایل دریافت می نمایند. این فایل هر بار برای گرفتن پاسخ درخواست ها به سرویس دهنده DNS مراجعه می نماید. توجه نمایید که این فایل پاسخ درخواست ها را در خود نگهداری نمی نماید.
فایل پیکربندی DNS Client ٬ فایل etc/resolv.conf/ است. فایل resolv.conf در واقع دارای دو ستون است.
ستون اول شامل :
search test.com test.net test.org
domain test.com
name server 192.168.0.1
name server 192.9.9.3
options {
directory "/namedb";
version "I do not give any version info";
pid-file "/var/run/named.pid";
allow-transfer { none ;};
};
zone "." IN {
type hint;
file "/etc/named.root";
};
فایل
named.conf را دریافت می نماییم.
# cd /usr/local/bind/etc
# wget ftp://ftp.internic.com/domain/named.root
# groupadd named
# useradd named -d /usr/local/bind -s /bin/false -g named -c "DNS Jail User"
# mknod /usr/local/bind/dev/null c 1 3
# mknod /usr/local/bind/dev/random c 1 8
# chmod 666 /usr/local/bind/dev/{null,random}
# cp /etc/localtime /usr/local/bind/etc/
تنظیمات گزارش نويسی سيستمی BIND
ذکر این نکته نیز ضروری است که با توجه به اینکه تنظیماتی که باید اعمال شوند در فایل تنظیمی syslog نیستند٬ این تنظیمات باید در بخش پیکربندی نحوه بالا آمدن syslog daemon انجام شوند٬ که بسته به توزیعهای مختلف لینوکس متفاوت می باشند.
در توزیع Debianفایل پیکربندی بالا آمدن syslog daemon در مسیر etc/rc.d/init.d/syslog/ قرار دارد. در این فایل٬ به دنبال خط فرمان زیر بگردید.
daemon syslogd -m 0خط فرمان فوق را بصورت زیر تغییر دهید.
daemon syslogd -m 0 -a /usr/local/bind/dev/log
در فایل etc/rc.d/rc.inet2/ خط فرمان a /usr/local/bind/dev/log- را به خط فرمان usr/bin/syslogd/ اضافه نمایید.
نکته! سویچ "a-" در فایل بالا آمدن syslogd به معنی سوکت دیگری است که syslogd باید به آن گوش دهد.در پايان برای بالابردن امنیت پوشه ها:
# chown named:named /usr/local/bind
# chown -R named:named /usr/local/bind/var
# chmod 700 /usr/local/bind
# cd /usr/local/bind/sbinپس از اجرای این خط فرمانها فایل rndc.key در مسیر usr/local/bind/etc/ و فایل rndc.conf در مسیر usr/local/bind/sbin/ ایجاد خواهند شد.
# ./rndc-confgen > rndc.conf
# ./rndc-confgen -a
# Start of rndc.confکپی نموده و کل محتویات فایل rndc.key که در مسیر usr/local/bind/etc/ قرار دارد را پاک نموده و خط فرمانهای بالا را به جای آنها درج نمایید.
key "rndc-key" {
algorithm hmac-md5;
secret "oTp9kfWXibrALQmvdDEixw==";
};
# key "rndc-key" {
# algorithm hmac-md5;
# secret "oTp9kfWXibrALQmvdDEixw==";
# };
#
# controls {
# inet 127.0.0.1 port 953
# allow { 127.0.0.1; } keys { "rndc-key"; };
# };
کپی نموده و خط فرمانهای کپی شده را در فایل named.conf که در
مسیر usr/local/bind/etc/ قرار دارد درج نمایید.# /usr/local/bind/sbin/named -u named -t /usr/local/bind -c /etc/named.conf
# ps aux | grep -v grep | grep namedو یا
# /usr/local/bind/sbin/rndc statusمطمئن میشویم که این سرویس شروع به کار کرده یا خیر.
در صورتی که با موفقیت به این مرحله رسیده اید٬ و به اینترنت متصل هستید با خط فرمان زیر اولین درخواست را برای سرویس دهنده DNS بفرستید (query بگیرید).
# host www.linux.org 127.0.0.1
www.linux.org has address 198.182.196.56
# /usr/local/bind/sbin/rndc statusمی توانید وضعیت سرویس دهنده DNS را ببینید.
# /usr/local/bind/sbin/rndc reloadسرویس دهنده DNS یک بار فایل پیکربندی named.conf را دوباره خوانی می کند تا در صورت ایجاد تغییرات، آن تغییرات را اعمال نماید.
ثبت و آدرس دهی يک دامنه در سرويس دهنده BIND DNS
Forward Zone درواقع جهت ارجاع دامنه ها به IP آدرس٬ تنظیم میشود.فرض کنید دامنه ای به نام hezardastan.org را از یک ارائه دهنده سرویس دامنه مانند register.com خریداری نموده ایم و می خواهیم آنرا در سرویس دهنده DNS خود ثبت کرده٬ سپس زیر دامنه های mail و www را برای آن ایجاد نموده و به سرویس دهنده های مختلف مسیردهی نماییم.
برای هر دامنه ای که می خواهیم در سرویس دهنده DNS ثبت نماییم می بایست خط فرمانهای زیر را در انتهای فایل named.conf سرویس دهنده BIND درج نماییم. این فایل در مسیر usr/local/bind/etc/named.conf/ قرار داشت٬ یاد تونه ؟zone "hezardastan.org" {
type master ;
file "hezardastan.org.zone";
allow-query {any;};
allow-update { none; };
};
$TTL 14400
hezardastan.org. IN SOA ns1.hezardastan.org. mehdi.hezardastan.org. (
2005030601 ; serial
7200 ; Refresh
7200 ; Retry
604800 ; Expire
86400) ; Minimum
hezardastan.org. IN NS ns1.hezardastan.org.
hezardastan.org. IN A 192.168.0.200
mail.hezardastan.org. IN CNAME hezardastan.org.
www.hezardastan.org. IN CNAME hezardastan.org.
hezardastan.org. IN MX 5 mail.hezardastan.org.
ftp.hezardastan.org. IN A 192.168.0.201
مقادیری که در zone فایل نوشته می شوند انواع مختلفی دارند.
MX برای Mail
A برای Forward Lookups
PTR برای Reverse
Lookups
CNAME برای شرایط مشابه یا
alias
ها
SOA برای Start
Of Authority
ساختار کلی قسمت SOA به این شکل است
Name Class Type Name-Server Email-Address Serial-No Refresh Retry Expiry Minimum-TTL
86400 = 1D= 1 شبانه روز
لطفا فراموش نکنید که باید بعد از هر اسم دامنه٬ کاراکتر . را قرار دهید.
Serial Number را مخصوص هر zone فایل می دهیم. این شماره سریال ها را معمولا به صورت تاریخ روز شماره گذاری می کنیم. به عنوان نمونه در Zone فایل دامنه hezardastan.org که در مثال بالا مطرح شد 2005030601 سال 2005 ماه 03 روز 06 و 01 نیز به معنی اولین دامنه ایجاد شده در آن روز می باشد. توجه نمایید که خطوطی که بعد از ; نوشته شده اند توضیح (Comment) هستند.
در Zone فایلی که ما در بالا درست کرده ایم خط
hezardastan.org. IN A 192.168.0.200
خط
ftp.hezardastan.org. IN A 192.168.0.201
به این معنی است که زیر دامنه ftp.hezardastan.org بر روی سرویس دهنده ای با IP آدرس 192.168.0.201 میزبانی میشود.
خط
hezardastan.org. IN MX 5 mail.hezardastan.org.
قسمت پایینی zone فایل را به جای روش بالا٬ به این صورت نیز می توانید ویرایش نمایید.
hezardastan.org. IN A 192.168.0.200
www IN CNAME hezardastan.org.
mail IN CNAME hezardastan.org.
به این ترتیب می توانید زیر دامنه هایی را که نیاز دارید ایجاد نموده و با مشخص کردن IP آدرس سرویس دهنده های میزبان٬ این زیر دامنه ها را به سرویس دهنده های مختلفی ارجاع دهید.
$TTL 14400در مقابل رکورد PTR باید نام کامل سرویس دهنده درج شود.
0.168.192.in-addr.arpa. IN SOA ns1.hezardastan.org. mehdi.hezardastan.org. (
2005030602 ; serial
7200 ; Refresh
7200 ; Retry
604800 ; Expire
86400) ; Minimum
0.168.192.in-addr.arpa. IN NS ns1.hezardastan.org.
200.0.168.192.in-addr.arpa. IN PTR hezardastan.org.
www.0.168.192.in-addr.arpa. IN CNAME hezardastan.org.
mail.0.168.192.in-addr.arpa. IN CNAME hezardastan.org.
201.0.168.192.in-addr.arpa. IN PTR ftp.hezardastan.org.
پس از انجام تنظیمات فوق می بایست سرویس named را راه اندازی دوباره (restart) نمایید.
خط فرمان
# kill -1 `pidof named`
و یا
# /usr/local/bind/sbin/rndc reload
یک بار سرویس named سرویس دهنده شما را راه اندازی مجدد خواهد نمود.
اكنون سرویس DNS ما دوباره راه اندازی شده است و می تواند به درخواست های ما پاسخ دهد. به عنوان مثال به کمک درخواست زیر٬ سرویس دهنده DNS به ما پاسخ می دهد كه كدام سرویس دهنده ایمیل مسؤل دریافت ایمیل های فرستاده شده به دامنه hezardastan.org است .
# host -t mx hezardastan.org 127.0.0.1در صورتی که پاسخ فوق را دریافت نمودید٬ تا اینجای كار مشكلی ندارید و می توانید كار را ادامه دهید.
hezardastan.org mail is handled by 5 mail.hezardastan.org.
zone "." IN {
type hint;
file "named.root";
};
زمانی كه این خطوط را حذف
می نمایید٬ سرویس دهنده DNS شما از سرویس
دهنده
های root اصلی بی خبر خواهد
ماند و نمی تواند به
سؤالات
NS در مورد Zone هایی كه
نسبت به این سرویس دهنده
Authoritative نیستند٬ پاسخ دهد.
allow-recursion { none; };
به این ترتیب سرویس دهنده DNS
شما در پاسخ به درخواستها فقط IP آدرس NS
سرویس دهنده DNS بعدی را
می دهد و نه پاسخ درخواست او را. allow-query {any;};
بنویسید
allow-query { none; };
allow-query {192.168.1.0/24;};