Zone

هر zone برای خود دارای یک فایلی دارد که database ان zone است که برای مثال ARecord و یا MXRecord های ان در ان وجود دارد .

در windows ظاهر gui نمیگذارد که ما کاری کنیم که سروریس  به اصطلاح crash کند به بیان دیگر نمیگذارد که ما syntax error داشته باشیم در کاری که در حال انجام ان هستیم .

ولی در linux به این شکل نیست چرا که   text file است .

Bindutils

زمانی که در config file مربوط به bind تغییرات ایجاد میکنیم  ئ یا اگر zone file را تغییرات ایجاد میکنیم , حتما با ابزار bindutils چک میکنیم تا مشکل syntax ای نداشته باشیم تا reload کردن سرویس باعث crash کردن ان سرویس نشود .

چرا که تا زمانی که restart و یا reload  نکنیم , اتفاقی نمی افتد زیرا نمی اید تا ان conf file را بخواند .

Download

تعداد root hint ها

یک سری root hint داریم که تعداد انها13 سرور است .

در واقع root hint ها zone  مربوط به . را نگهداری میکنند .اگر www.test.com را در نظر بگیریم , در اخر com نیز یک . قرار دارد که دیده نمی شود .این . همانی است که به دست root hint ها است .

سروری که این zone را دارد می تواند راجع به هر domain ای به ما اطلاعات دهد چرا که در اخر هر fqdn یک . قرار دارد .

در حقیقت اینها مارا سمت سرور های TLD هدایت میکنند و سرور های TLD هم که .COM ,.IR,.ORG و … را نگهداری میکنند .

Recursion به چه معناست ؟

ما ادرس www.test.com را میخواهیم .ابتدا به سراغ root hint ها می رویم .root hint می گوید که من نمیدانم ip مربوط به www.test.com جیست ولی میدانم که .com دست چه کسی است و در واقع رکورد ns ان را به ما می دهد و می گوید که name server مربوط به .com دارای فلان ip است .

حال به سراغ .com می اییم و میگوید که من نمیدانم www.test.com چه ip ای دارد ولی میدانم که www.test.com دست کی است .به معنای دیگر اشاره می کند به یک zone دیگری به اسم test.com

حال client به سراغ test.com می اید .

در zone file  مربوط به test.com یک رکورد dns  ساختیم به اسم www که ip ان برای مثال 1.1.1.1 است .

زمانی که client به سراغ ما می اید و می پرسد که www.test.com چه کسی است , یک رکورد را lookup میکند و پاسخ 1.1.1.1 بازگردانده می شود .

به این ساختار recursion  در Dns می گویند

اگر recursion را yes  بگذاریم چه اتفاقی می افتد؟

ما در client نمی اییم root hint ها را معرفی کنیم .نمی اییم به client 13 تا ip به عنوان root hint بدهیم .

ما در نهایت 2 ادرس را برای client به عنوان dns server قرار می دهیم .

Client به سراغ dns server خودش می اید و در مورد www.test.com می پرسد .dns server می گوید که من zone برای www.test.com ندارم و می رور از root hint ها می پرسد .

در این شرایطی که به سراغ root hint ها می رور recrusuion اتفاق می افتدو در نهایت به client ادرس 1.1.1.1  را بر میگرداند .

زمانی که این recursion را yes میکنیم یعنی به dns server مان که bind dns server است می گوییم که تو میتوانی در نقش dns client بازی کنی و بروی از root hint ها سوال بپرسی و به صورت recursive  به client ها جواب دهی.

Forwarder  چیست:

در Dns server میتوانیم recursion  انجام دهیم و یا سوال ان client را برای یک dns server دیگر ارسال کنیم .حال ان dns server  یا میتواند recursion  انجام دهد و یا خودش به سوال پاسخ دهد .

پس caching only dns server ها می روند سراغ root hint ها و ساختار recursion  را دارند و یا به سراغ forwarder  می روند و جواب را میگیرند و به dns server ما می دهند و در نهایت dns server هم به client پاسخ می دهد .

در هر 2 حالت dns server خودمان جواب را cache میکند .

نکته:

رم برای dns server باید خوب باشد چرا که cache را در رم نگهداری میکند .

برای انکه بتوانیم forwarder راه اندازی کنیم میتوانیم recursion را yes قرار دهیم و یا میتوانیم بگوییم که من فقط میخواهم از forwarder استفاده کنم و یا اول از forwarder بپرس و اگر نبود ان forwarder , حال recursion انجام شود

نکته:

Caching only dns server ها برای isp ها فوق العاده هستند چرا که در پهنای باند بهینه سازی میکند .

اگر netflow خوبی داشته باشیم متوجه می شویم که سوالاتی که Dns server می پرسد و بر میگرداند در طول 6 ماه به 3 گیگ برای مثال می رسد ولی با cache کردن به 500 mb می رسد .

به معنای دیگر میتوانیم تعداد زیادی از سوالات را از داخل cache جواب دهیم , در این صورت مشتری راضی است چرا که سریع پاسخ را دریافت کرده است و ما هم پهنای باندمان را حفظ کرده ایم چرا که برای پاسخگویی به سوال های dns مدام به اینترنت نرفته ایم و باز گردیم .

نصب BIND بر روی Ubuntu 20.04 :

ابتدا با دستور زیر شروع به نصب bind9  و همچنین utility های مورد نیاز میکنیم :

apt install bind9 bind9utils -y

حال برای Setup کردن  caching only dns server  با استفاده از bind9  بر روی Ubuntu 20.04 :

ابتدا از کانفیگ default مربوط به options یم بکاپ تهیه میکنیم :

cp /etc/bind/named.conf.options{,.bak}

و سپس فایل مربوط به named.conf.options را باز میکنیم تا در ان تغییرات را اعمال کنیم :

vim /etc/bind/named.conf.options

حال میتوانیم برای شروع کار acl تعریف کنیم , برای مثال با allow-query مشخص میکنیم تا چه کسانی میتوانند سوال بپرسند .این کار را با استفاده از acl انجام میدهیم .

برای مثال من تعریف میکنم که ادرس 192.168.247.130 را در acl به نام allowed قرار میدهم .

// DNS Server ACL

acl “allowed”

{ 192.168.247.130/32;

};

حال به سراغ global configuration options میرویم که در قسمت options تعریف می شود :

options {

directory “/var/cache/bind”;

recursion yes;

allow-recursion { localhost; allowed; };

listen-on port 53 { localhost; 192.168.57.6; };

allow-query { localhost; allowed; };

allow-transfer { none; };

dnssec-validation auto;

listen-on-v6 { any; };

};

در اخر برای چک کردن ان که مشکل syntax ای نداشته باشیم در conf.options دستور زیر را وارد میکنیم :

named-checkconf

در نهایت سرویس bind را restart  میکنیم :

systemctl restart named

و یا دستور rndc reload

حال با توجه به تنظیماتی که انجام دادیم تنها 192.168.247.130 و خود سرور اجازه ی query را دارد .

از روی خود سرور دستور nslookup را میزنیم و با مشخص کردن سرور به 127.0.0.1 و سپس query گرفتن برای مثال yahoo.com خواهیم دید ک ip مربوط به yahoo.com بازخواهد گشت .