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 را بخواند .
تعداد 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 بازخواهد گشت .

شاهدی گرفته ام برای بودن در روز موعود