مقدمات

کاربرد سرویس دی‌ان‌اس

اول از همه بدونید دارید چیکار میکنید چون اگر دارید روی لینوکس دی‌ان‌اس کانفیگ میکنید ماجرا خیلی فرق میکنه با حالتی که میخواین همین کار رو روی مثلن ویندوز انجام بدین و فرقش همینه که تو لینوکس اگر خودت ندونی داری چیکار میکنی نمیتونی به هدفت برسی‎ ولی تو ویندوز اینجوری نیست‎. مثلن سیس ادمین های ویندوزی هر کاری میخوان بکنن از جمله همین نصب دی ان اس رو ویندوز سرور‎ یه برنامس باز میکنن چهار تا نکست میزنن و مدتی منتظر میمونن تا یه ستونی پر شه و بعد همه چی نصب میشه‎. کارشون ظاهرا خیلی راحت‌تره ولی در بیشتر موارد ازشون بپرسی دی‌ان‌اس نقشش چیه یا دقیقن داره چیکار میکنه جواب سوالت رو نمیدونن. اگر ترمینال رو باز میکنید و نمیدونید برای رسیدن به هدفتون چی باید بنویسید لزومن به این خاطر نیست که دستورش رو نمیدونید شاید به این خاطره که نمیدونن باید چیکار کنین. روش درست آموزش لینوکس اینه که به شما بگن باید چیکار کنین و پیدا کردن دستوراتش رو به عهده خودتون بذارن. چون اگر بدونید باید چیکار کنین ۹۰ درصد کار رو کردین.

همین قضیه در مورد دی‌ان‌اس کانفیگ کردن هم وجود داره. اگر بدون دونستن جواب این سوال بخواین دی ان اس بیارین بالا هیچوقت موفق نمیشین حتی اگر از قبل یکی دیگه دستوراتش رو بهتون گفته باشه‎. برای همین من ابتدا یه توضیحی میدم و بعد گام‌به‌گام روش انجام کار رو توضیح میدم. دی‌ان‌اس یک سرویسه که دامنه رو به یه نشانی وصل میکنه. این تعریف چند تا نکته قابل توجه داره ولی قبل اینکه نکاتش رو بگم باید این نکته رو شفاف‌سازی کنم که هدف از راه‌انداختن این سرویس اینه که راحت‌تر بشه نشانی یک سیستم متصل به شبکه رو حفظ کرد. چون حفظ کردن یک عدد کار سختیه و آی‌پی یک عدده ولی حفظ کردن یک کلمه معنی‌دار کار راحت‌تریه. نکته اول تعریفی که نوشتم اینه که دی‌ان‌اس هم یک سرویسه مثه سرویس وب و سرویس ایمیل و … و راه‌انداختنش کار سیس‌ادمین‌هاست. نکته بعد اینه که دی‌ان‌اس دامنه رو به آی‌پی وصل میکنه نه آی‌پی رو به دامنه. وصل کردن آی‌پی به دامنه میشه مفهوم برعکس دی‌ان‌اس که بهش هم میگن reverse dns یعنی دی‌ان‌اس معکوس که کاربردهای مختلفی داره که وقتی بحث دی‌ان‌اس تموم شد با هم میبینیم دو موردش رو. نکته آخر تعریف هم مفهوم وصل کردنه. وصل میکنه یعنی به جای اینکه لازم باشه موقع نوشتن آدرس اون سیستم داخل شبکه آی‌پیش رو وارد کنید میتونید یه کلمه وارد کنید. طبیعیه که دامنه سایت‌هایی که روی اینترنت میبینیم یکی از کاربردهای خیلی جزئی تنظیم دی‌ان‌اس هست و برای مواردی مثه استفاده از یک آدرس بعد @ در نشانی‌های ایمیل و … هم از دی‌ان‌اس استفاده میشه.

پکیج بایند

برای راه‌اندازی دی‌ان‌اس در لینوکس برنامه‌های مختلفی وجود داره. یکی از قدیمی‌ترین‌هاشون برنامه BIND هست که در دانشگاه برکلی نوشته شده و برای همین مخفف Berkeley Internet Name Domain هست ضمن اینکه خود واژه بایند معنی وصل کردن هم میده و این برنامه به طور گسترده استفاده میشه. خیلی از برنامه‌های دیگری که برای دی‌ان‌اس تعریف کردن ازشون استفاده میشه همین بایند هستن که روشون مقداری تغییرات انجام شده و ریدیستیریبیوت شده. ما از بایند استفاده می‌کنیم نه به این خاطر که لزومن بایند بهترین سولوشن برای اینکاره بلکه برای اینکه بایند زیاد استفاده شده و برای همین قابل اطمینان‌تره و اگر هم مشکلی داره این مشکلات شناخته شده‌تر هستن و برای همین میدونیم رو سرورمون داره چیکار میکنه. خیلی از برنامه‌های به ظاهر ساده‌تر از بایند ممکنه حتی به لحاظ امنیت و سرعت و … بهبودهایی داشته باشن ولی هم سنگین‌تر از بایندن و هم تا وقتی به قدر کافی ازشون استفاده نشده کسی نمیدونه این برنامه‌ها چیکار میکنه و چقدر کارش رو کیلین انجام میده. ضمن اینکه خیلی از مشکلات بایند رو میشه از طریق استفاده از پکیج‌های دیگه در کنار بایند حل کرد و این روش بهتره چون هم کور خود بایند اینجوری سبک‌تر و کم‌حجم‌تره و هم اگر باگی داخل سیستم وجود داشته باشه میشه حدس زد به افزونه‌ها مربوطه نه به خود بایند ولی وقتی یک سیستم سنگین که روش کلی کار شده و تغییرات زیادی روی نحوه کار کردن یا تنظیمات پیشفرض بایند داده، داشته مشکل بخوره نمیشه فهمید این مشکل به کجای سیستم یا به کدوم تغییر درون اون سیستم مربوط میشه.

مراحل باز شدن یک url در وب

همونطور که بالا توضیح دادم دی‌ان‌اس به سرویس وب هیچ ربطی نداره با این وجود خیلی‌ها کارکرد بایند رو با کارکرد ویرچوال‌هاستی که روی وب‌سرور تعریف میشه اشتباه میگیرن برای همین لازمه که در مورد مثال وب یه توضیحی بدم و وقتی روش انجام کار برای استفاده از یک دامنه برای یک سایت جا افتاد کارهای اضافه‌تری که در مورد مثال ایمیل لازمه رو توضیح بدم چون دونستن منطق ماجرا در مورد وب به فهم بهتر منطق ماجرا در مثال ایمیل هم کمک میکنه. جریان از این قراره که شما وقتی یک آدرسی مثل http://sub.example.com/path/to/dir رو وارد میکنید این آدرس به بخش‌های مختلفی تقسیم می‌شه که هر کدوم ارزش معنایی متفاوتی دارن. یک بخش http هست که پروتوکل ارتباطی شبکه رو مشخص میکنه. یک بخش .com هست که به اصطلاح بهش میگن TLD یا Top Level Domain یعنی بالاترین یا تاپ‌ترین بخش دامنه. عرفا به example.com میگن دامنه و به sub. میگن سابدامین اما درستش اینه که وقتی .com میشه لول اول example هم لول دوم باشه و sub هم لول بعد و اگر بازم ادامه داشت به همین ترتیب الی آخر لول‌های بعدی رو تشکیل بدن. path/to/dir هم که محل دایرکتوری روی سرور هست و به دی‌ان‌اس کلن ارتباطی نداره.

گام بعد اینکه فرمت یک url رو با هم بررسی کردیم اینه که ببینیم به ترتیب چه اتفاقی میوفته اولین گام اینه که بروزر کاربر میره از بالا ترین لول یعنی دی‌ان‌اس سرور .com میپرسه دی‌ان‌اس example.com رو کجا باید پیدا کنم. دی‌ان‌اس .com هم بهش جواب میده example.com معادل فلان آی‌پیه و این آی‌پی معادل آدرس دی‌ان‌اس سرور اون دامنه هست. خب بروزر میره سراغ اون سرور و ازش سوال میکنه sub.example.com رو از کجا پیدا کنم و اونم آی‌پی دی‌ان‌اس سرور sub.example.com رو بهت میده. بعد میره از دی‌ان‌اس سروری که آی‌پیش رو گرفته سوال میکنه و اونم آی‌پی وب سروری که sub.example.com روش هست و قراره این سایت رو نمایش بده رو بهش میده. بعد میره سراغ وب سرور و وب‌سرور ازش آدرس کامل صفحه رو میپرسه و بروزر جواب میده sub.example.com و اونم میره تو تنظیمات ویرچوال‌هاست‌ها میگرده و میبینه که sub.example.com توی فلان دایرکتوری بود. بعد که دایرکتوری که مکان سایت مورد نظر هست رو پیدا کرد به بروزر کاربر در قالب یک فایل html تحویلش میده و بروزر هم سایت رو به کاربر نشون میده. حالا اگر دی‌ان‌اس سرور قبلی با یه آدرس sub2.example.com یا اصن example2.com میومد سراغ همین وب‌سرور بازم همین فرایند اتفاق میوفتاد وب سرور یو آر ال رو دریافت میکرد و میرفت تو ویرچوال‌هاست‌هاش نگاه میکرد ببینه سایت مربوط به example2.com کجای سروره یعنی تو کدوم دایرکتوریه و بعد سایت داخل اون دایرکتوری رو میساخت و به کاربری که میخواست example2.com رو ببینه نشونش میداد.

دلیل وجود داشتن انواع ریکوردها

نکته مهم دیگه اینه که تو این مثال ما ۳ تا دی‌ان‌اس سرور داشتیم اولیش دی‌ان‌اس com بود بعدیش example و بعدی sub درصورتیکه با یک دی‌ان‌اس سرور هم میشد همینکارو کرد! یعنی اینطوری که بروزر وقتی میره سراغ سرور .com و آدرس سایت رو بهش نشون میده اون صاف آی‌پی وب سرور رو بهش بده. اینکار از نظر منطقی هیچ مشکلی نداره ولی فرض کنید در همین مثال من میخوام امکان تحویل دادن آی‌پی به کاربر برای دامنه sub.example.com و تمام زیر دامنه‌هاش مثه sub.sub.example.com رو بدم به یه دی‌ان‌اس سرور ولی اختیار example.com و بقیه زیردامنه‌هاش مثه sub2.example.com رو به طرف ندم در این شرایط این روش دیگه جواب نمیده. از طرف دیگه یه نکته خیلی ظریف وجود داشت در مثالی که اول زدم و توش ۳ تا دی‌ان‌اس سرور داشتیم و یک وب‌سرور یه فرق اساسی بین دی‌ان‌اس سرور com و example و sub بود. فرقش این بود که com نمیگفت برو سراغ آی‌پی example.com و یه سایت ازش بخواه. میگفت برو سراغ این آی‌پی و ازش آی‌پی دی‌ان‌اس sub.example.com رو بخواه ولی دی‌ان‌اس sub میگفت برو سراغ آی‌پی وب‌سرورم و ازش یه سایت بخواه. خب این فرق از کجا تنظیم میشه؟ جوابش اینه که موقع تنظیم دی‌ان‌اس با انواع recordها روبرو هستیم و باید بدونیم کجا از چه ریکوردی استفاده کنیم. شرایطی رو متصور بشید که اومدیم سراغ دی‌ان‌اس سرور example و بهش گفتیم من sub.example.com رو میخوام یه جواب ممکن میتونه این باشه که اگر میخوای سایت sub.example.com رو باز کنی برو سراغ آی‌پی وب سرور و اگر با یه زیردامنه‌ای از sub.example.com کار داری برو سراغ یه آی‌پی دیگه. در این مثال ما ۲ تا ریکورد نیاز داریم. یه ریکورد که بگه برای دی‌ان‌اس زیردامنه‌های sub.example.com برو سراغ دی‌ان‌اس سرورش و یه ریکورد که بگه اگه سایتشو میخوای برو سراغ وب‌سرورش که این ۲ تا سرور دو تا سرور مختلف با دو تا نشانی مختلفن. همینکارو میشد یه جور دیگه انجام داد. رو دی‌ان‌اس example.com با یک ریکورد گفت برو دی‌ان‌اس sub.example.com رو از آی‌پی سرور خودش بپرس و بعد رو اون سرور با یک ریکورد دیگه گفت وب sub.example.com رو برو از وب سرورش بپرس. فرقش با حالت قبل اینه که در حالت قبل ۲ تا ریکورد رو یک دی‌ان‌اس سرور بود اینجا رو دو تا سرور مختلفه. چیزی که انتظار میره تا اینجا متوجه شده باشید اینه که ما ۲ نوع ریکورد مختلف داریم. نوع اول رو بهش میگیم A Record که یه دامنه میگیره و آی‌پی یک وب‌سرور رو نشون طرف میده و طرف میره اونجا که یه وب تحویل بگیره با اون آدرس بخصوص. ریکورد نوع بعد NS Record هست که دامنه میگیره و آی‌پی یه دی‌ان‌اس سرور دیگرو میده. درواقع از سر خودش باز میکنه. انواع ریکوردهای دیگه مثه SPF و MX و AAAA و AAA و PTR و CNAME و …. هم داریم. بقیه انواعش رو سر جاش توضیح میدم.

شما وقتی میرید دامنه example.com رو از .com میخرید به شما یه پنل میدن که میتونید توش یه دونه آی‌پی وارد کنین. این درواقع همون دی‌ان‌اس سرور .com هست. معمولن این دی‌ان‌اس سرور امکانات محدودی داره و شما نمیتونید هر نوع ریکوردی که دلتون خواست روش تنظیم کنید. مثلن ممکنه به شما فقط امکان تعریف NS Record رو بده پس شما باید برید یه جای دیگه یه دی‌ان‌اس سرور نصب کنید بعد تو دی‌ان‌اسی که .com برای example.com در اختیارتون میذاره آی‌پی اونو وارد کنید و بعد برید رو دی‌ان‌اس سرور example.com که خودتون راش انداختید هر تعداد ریکورد از هر نوعی که خواستید ایجاد کنید. برای راه انداختن این سرور میشه از همین برنامه بایند استفاده کرد که به ما اجازه میده برای دامنه‌هایی که براشون میخوایم دی‌ان‌اس کانفیگ کنیم ریکوردهای مورد نظرمون رو بنویسیم. دقت کنید لزومی نداره که سروری که روش سرویس دی‌ان‌اس هست یه سرور جدایی باشه از اونی که روش دامنه هست ممکنه همه اینایی که اول گفتم یه جا باشه. یعنی ممکنه شما رو همون سروری که سرویس وب یا ایمیل روش میگیرید رو همون سرویس دی‌ان‌اس هم داشته باشید.

راهنمای گام‌به‌گام تنظیم bind

این راهنما برای سیستم‌عامل اوبونتو نوشته شده است. بعدن برای سنت‌او‌اس هم می‌نویسم.

Step # 1: Install BIND
$ sudo apt-get install bind9
Step # 2: Define yourdomain.com domain:
$ sudo nano /etc/bind/named.conf.local
Define yourdomain.com domain:
zone "yourdomain.com" {
        type master;
        file "/etc/bind/db.yourdomain.com";
        };
Save the file.
Step # 3: Create a zone file for yourdomain.com domain:
sudo nano /etc/bind/db.yourdomain.com
Add yourdomain.com zone:
;
; BIND data file for yourdomain.com
;
$TTL    604800
@       IN      SOA     ns1.yourdomain.com. root (
                            2011050111         ; Serial
                                  7200         ; Refresh
                                   120         ; Retry
                               2419200         ; Expire
                                604800)        ; Default TTL
;
yourdomain.com.              IN      A       96.43.137.235
www                     IN      CNAME   yourdomain.com.
subdomain               IN      CNAME   yourdomain.com.
subdomain                    IN      CNAME   yourdomain.com.
Save the file
Step # 4: Restarting:
$ sudo /etc/init.d/bind9 restart
Test it:
$ nslookup yourdomain.com
Output:
Server: 202.55.1.2
Address: 202.55.1.2#53
Name: yourdomain.com
Address: 202.55.1.2

تست اعمال درست تنظیمات

از اونجایی که بعد از اعمال تنظیمات بایند طول میکشه تا کش روترها آپدیت شن و وقتی سایت رو میزنین بیاد بهترین راه‌حل برای فهمیدن اینکه آیا تنظیمات دی‌ان‌اسمون درسته یا نه اینه که داخل network manager کامپیوتر خودمون در قسمت دی‌ان‌اس آی‌پی سرور رو وارد کنیم و شبکه کامپیوتر رو ریست کنیم بعد یه ترمینال باز کنیم همون دستور nslookup example.com رو وارد کنیم. اگر تنظیماتمون درست باشه بهمون یه جواب سر راست مشابه همون چیزی که تو وبلاگم نوشتم میده. دقت کنین اگر به سرور اس‌اس‌اچ بزنین و همین دستور رو وارد کنین یا رو کامپیوتر خودتون بدون اعمال تنظیم دی‌ان‌اس اینو بزنین الزامن بهتون جواب مثبت نمیده.