پیکربندی سرور DNS – انجمن DEV 👩💻👨💻

معرفی
سرویس DNS سیستمی است که نقشه برداری بین نام های دامنه و آدرس های IP را مدیریت می کند و این امکان را برای رایانه ها فراهم می کند تا وب سایت ها و سایر منابع آنلاین را پیدا کرده و به آنها متصل شوند.
پورت های DNS 👉 UDP/53، TCP/53
جستجوی ساده 👉 نام دامنه -> آدرس IP
جستجوی معکوس 👉 آدرس IP -> نام دامنه
سرورهای DNS بازگشتی 👉 اطلاعات را در سلسله مراتب DNS برای مشتریان جستجو کنید
سرورهای DNS معتبر 👉 اطلاعات مربوط به دامنه های خاص را ذخیره و ارائه دهید
ساختار نام دامنه
✨ نام میزبان: نامی که به یک دستگاه یا سرور خاص در یک شبکه داده می شود که برای شناسایی و تمایز بین دستگاه های مختلف استفاده می شود
✨ نام دامنه: یک برچسب قابل خواندن برای انسان که برای شناسایی یک وب سایت یا سایر منابع آنلاین استفاده می شود، متشکل از یک یا چند کلمه که با نقطه از هم جدا شده اند و سمت راست ترین برچسب نشان دهنده TLD است.
✨ دامنه ریشه: بالاترین سطح سیستم نام دامنه، که با یک نقطه در انتهای نام دامنه نشان داده می شود و به عنوان نقطه شروع برای همه تصمیمات نام دامنه عمل می کند.
انواع رکورد DNS
✨ یک رکورد: یک رکورد A یک نام دامنه را به آدرس IPv4 نگاشت می کند
✨ رکورد AAAA: یک رکورد AAAA یک نام دامنه را به آدرس IPv6 نگاشت می کند
✨ رکورد MX: رکورد MX سرور پست الکترونیکی را مشخص می کند که مسئول پذیرش پیام های ایمیل برای یک نام دامنه خاص است
✨ رکورد CNAME: یک رکورد CNAME یک نام مستعار یا نام مستعار برای یک نام دامنه را به نام دامنه واقعی نگاشت می کند
✨ رکورد NS: یک رکورد NS سرورهای نام معتبر یک دامنه را مشخص می کند
✨ رکورد TXT: یک رکورد TXT می تواند حاوی هر داده متنی باشد و اغلب برای احراز هویت مبتنی بر DNS و اقدامات ضد هرزنامه استفاده می شود.
✨ رکورد SRV: رکورد SRV مکان سرویس ارائه شده توسط یک دامنه را مشخص می کند، مانند سرویس SIP یا XMPP.
✨ SOARrecord: یک رکورد SOA سرور نام معتبر یک دامنه را مشخص می کند و حاوی اطلاعاتی در مورد دفعات تجدید اطلاعات DNS است.
💡 نام دامنه کاملاً واجد شرایط یک نام دامنه کامل است که مکان دقیق یک منبع را در سلسله مراتب سیستم نام دامنه (DNS) مشخص می کند.
👉 برای مثال، FQDN برای یک وب سایت ممکن است “www.example.com” باشد، که در آن “www” نام میزبان، “example” دامنه سطح دوم و “com” دامنه سطح بالا است. FQDN کامل مسیر کامل سرور وب را مشخص می کند و می تواند توسط دستگاه های سرویس گیرنده برای مکان یابی و اتصال به سرور استفاده شود.
دست های ساده
💡 من از 2 ماشین مجازی لینوکس در ایستگاه کاری VMWare خود برای پیکربندی 2 سرور DNS (1 برای پشتیبان گیری) استفاده کرده ام (شبکه 192.168.1.0/24 است)
ما با نصب شروع خواهیم کرد bind
بسته در هر دو سیستم
yum -y install bind-*
پس از نصب به
vi /etc/named.conf
👉 این فایل فایل پیکربندی اصلی برای سرور DNS است
در داخل این فایل، نظرات این بخش را برای وضوح پاک کردم
12 options {
13 listen-on port 53 { 127.0.0.1; };
14 listen-on-v6 port 53 { ::1; };
15 directory "/var/named";
16 dump-file "/var/named/data/cache_dump.db";
17 statistics-file "/var/named/data/named_stats.txt";
18 memstatistics-file "/var/named/data/named_mem_stats.txt";
19 recursing-file "/var/named/data/named.recursing";
20 secroots-file "/var/named/data/named.secroots";
21 allow-query { localhost; };
22 recursion yes;
23 dnssec-enable yes;
24 dnssec-validation yes;
25 bindkeys-file "/etc/named.root.key";
26 managed-keys-directory "/var/named/dynamic";
27 pid-file "/run/named/named.pid";
28 session-keyfile "/run/named/session.key";
29 };
در داخل این فایل، 127.0.0.1 را به آن تغییر می دهیم
listen-on port 53 { any; };
👉 ما نیاز داریم که همه کاربران به سرور DNS دسترسی داشته باشند
همچنین برای پذیرش باید این خط را تغییر دهید any
allow-query { any; };
در نهایت تغییر بازگشت به no
recursion no;
👉 تنظیم بازگشت به no
پرس و جو بازگشتی را برای عدم رفتن به سرور کش ایجاد می کند. ما این ویژگی را به دلایل امنیتی خاموش می کنیم.
💡 به عبارت ساده تر، ما سرور DNS را مجبور می کنیم به جای جستجوی آن، به هر درخواستی که DNS نمی داند پاسخ دهد.
این موضوع باعث ایجاد یک موضوع دیگر می شود. اگر از یک سرور محلی DNS در شبکه خود استفاده می کنیم، هیچ نام DNS دیگری از سرورهای DNS دیگر جستجو نمی کند. این باعث می شود کاربرانی که از سرور DNS محلی استفاده می کنند نتوانند به وب سایت دیگری خارج از مجموعه آدرس محلی DNS دسترسی داشته باشند.
برای حل مشکل فوق از یک قانون ACL استفاده می کنیم
12 acl AllowRecursion {
13 127.0.0.1;
14 <Your-Local-Network-ID>;
15 };
همچنین اضافه کردن
27 recursion yes;
28 allow-recursion { AllowRecursion; };
به پایین فایل کانفیگ نگاه کنید
include "/etc/named.rfc1912.zones";
👉 اینجا جایی است که ما نام های دامنه خود را که خریداری کرده ایم اضافه می کنیم
همچنین،
zone "." IN {
type hint;
file "named.ca";
};
👉 این نشان می دهد که اگر آدرس درخواستی پیدا نشد، DNS باید به دنبال پرس و جو درخواست شده از named.ca
فایل. را named.ca
فایل حاوی آدرس های سرور DNS از سراسر جهان است
حال باید نام دامنه را در فایل zones قرار دهیم
vi /etc/named.rfc1912.zones
# Adding the following at the end
zone "waji.com" IN {
type master;
file "waji.zone";
allow-update { 192.168.1.129; };
allow-transfer { 192.168.1.129; };
};
zone "1.168.192.in-addr.arpa" IN {
type master;
file "waji.rev";
allow-update { 192.168.1.129; };
allow-transfer { 192.168.1.129; };
};
👉 192.168.1.129 آدرس IP سرور DNS پشتیبان است.
ما به تازگی تنظیمات DNS را برای جستجوی رو به جلو و معکوس انجام داده ایم
💡 داریم
master
slave
وhint
انواع برای ورودی های DNS.master
برای سرور اصلی DNS،slave
برای ورودی DNS پشتیبان وhint
برای سرور کش💡
waji.zone
وwaji.rev
فایل های zone هستند. این فایل ها باید دارای سوابق (سوابق A و غیره) باشند.
اگر از DDNS استفاده نمی کنیم، نیازی نخواهیم داشت allow-update
خط
من از DDNS استفاده نمی کنم بنابراین موارد بالا تبدیل می شوند
zone "waji.com" IN {
type master;
file "waji.zone";
allow-transfer { 192.168.1.129; };
};
zone "1.168.192.in-addr.arpa" IN {
type master;
file "waji.rev";
allow-transfer { 192.168.1.129; };
};
💡 هرگز استفاده نکنید
any
که درallow-transfer
. ما اجازه میدهیم فایل منطقهای را که حاوی نام رکورد است، منتقل کنیم. اگر این فایل در اختیار هر شخص ناشناس قرار گیرد، او می تواند از جزئیات آن فایل برای آسیب رساندن به ما سوء استفاده کند
👉 ما فقط باید به سرور DNS Slave اجازه دهیم. در مورد من 192.168.1.129
سرور DNS برده ما است
در حال حاضر، ما باید به
cd /var/named
در اینجا، ما باید فایل ها را ایجاد کنیم
cp named.localhost waji.zone
cp named.localhost waji.rev
در waji.zone
فایل
$TTL 1D
@ IN SOA ns1.waji.com. root(
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
IN NS ns1.waji.com.
ns1 IN A 192.168.1.128
www IN A 192.168.1.128
aaa IN CNAME www.waji.com.
👉 در اینجا ما آن را طوری تنظیم کرده ایم که اگر مشتری جستجو کند ns1.waji.com
، سرور به 192.168.1.128 پاسخ خواهد داد
@
-> به نام دامنه (منبع) ترجمه می شود
در حال حاضر، در waji.rev
فایل
$TTL 1D
@ IN SOA ns1.waji.com. root(
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
IN NS ns1.waji.com.
128 IN PTR ns1.waji.com.
128 IN PTR www.waji.com.
ما باید مالکیت فایل ها و دایرکتوری های زیر را تغییر دهیم /var/named
به named
برای اینکه DNS واقعاً کار کند
# Current owner
-rw-r----- 1 root root 198 2월 23 13:28 waji.rev
-rw-r----- 1 root root 222 2월 23 13:09 waji.zone
# Changing the group ownership
chown .named ./waji.*
-rw-r----- 1 root named 198 2월 23 13:28 waji.rev
-rw-r----- 1 root named 222 2월 23 13:09 waji.zone
اکنون فقط باید سرویس را فعال و راه اندازی کنیم
systemctl start named
systemctl enable named
در نهایت سرویس را به فایروال اضافه کنید
firewall-cmd --permanent --add-service=dns
firewall-cmd --reload
ما با موفقیت سرور اصلی DNS را پیکربندی کردیم.
👉 از سرور DNS برده پیکربندی نشده، آزمایش خواهیم کرد که آیا Master به درستی پیکربندی شده است
از سرور DNS برده،
nslookup
> server 192.168.1.128
Default server: 192.168.1.128
Address: 192.168.1.128#53
> www.waji.com
Server: 192.168.1.128
Address: 192.168.1.128#53
Name: www.waji.com
Address: 192.168.1.128
ما می توانیم نام دامنه دیگر را آزمایش کنیم
> ns1.waji.com
Server: 192.168.1.128
Address: 192.168.1.128#53
Name: ns1.waji.com
Address: 192.168.1.128
یا می توانیم جستجوی معکوس را انجام دهیم
> 192.168.1.128
128.1.168.192.in-addr.arpa name = ns1.waji.com.
128.1.168.192.in-addr.arpa name = www.waji.com.
اکنون برای پیکربندی سرور DNS برده،
vi /etc/named.conf
listen-on port 53 { any; };
allow-query { any; };
در حال پیکربندی در داخل /etc/named.rfc1912.zones
فایل
zone "waji.com" IN {
type slave;
file "slaves/waji.zone.slave";
notify yes;
masterfile-format text;
masters { 192.168.1.128; };
};
zone "1.168.192.in-addr.arpa" IN {
type slave;
file "slaves/waji.rev.slave";
notify yes;
masterfile-format text;
masters { 192.168.1.128; };
};
👉 ما به آن نیاز نداریم masterfile-format text
پیکربندی در راه اندازی واقعی، زیرا در برابر حملات آسیب پذیر است. فایل ها باید در “باینری” که پیش فرض است ذخیره شوند. من فقط از این تنظیم برای بررسی محتوای فایل برای این دست استفاده می کنم.
بازگشت به سرور DNS Master و اضافه کردن چند خط
zone "waji.com" IN {
type master;
file "waji.zone";
allow-transfer { 192.168.1.129; };
also-notify { 192.168.1.129; };
};
zone "1.168.192.in-addr.arpa" IN {
type master;
file "waji.rev";
allow-transfer { 192.168.1.129; };
also-notify { 192.168.1.129; };
};
👉 ما باید اجازه می دادیم notify
قابلیت استاد همانطور که پیکربندی کردیم notify yes;
در سرور DNS برده ما
در نهایت، هنوز از Master DNS،
vi /etc/named.rfc1912.zones
$TTL 1D
@ IN SOA ns1.waji.com. root(
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
IN NS ns1.waji.com.
IN NS ns2.waji.com.
ns1 IN A 192.168.1.128
ns2 IN A 192.168.1.129
www IN A 192.168.1.128
aaa IN CNAME www.waji.com.
و برای جستجوی معکوس
vi /var/named/waji.rev
$TTL 1D
@ IN SOA ns1.waji.com. root(
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
IN NS ns1.waji.com.
IN NS ns2.waji.com.
128 IN PTR ns1.waji.com.
129 IN PTR ns2.waji.com.
128 IN PTR www.waji.com.
راه اندازی مجدد سرویس
systemctl restart named
👉 بازگشت به سرور DNS برده،
systemctl start named
systemctl enable named
اگر حرکت کنیم به /var/named/slaves
ls -l /var/named/slaves/
total 8
-rw-r--r-- 1 named named 408 Feb 23 14:55 waji.rev.slave
-rw-r--r-- 1 named named 380 Feb 23 14:55 waji.zone.slave
✔ ما می توانیم تأیید کنیم که اطلاعات DNS در سرور DNS برده وجود دارد
✨ با استفاده از ماشینهای مجازی به بررسی این موضوع پرداختیم که سرور DNS چیست و چگونه کار میکند. ما همچنین سرورهای DNS Master-slave را که افزونگی و تحمل خطا را فراهم میکنند، پیوند دادیم