شستشوی حافظه پنهان DNS محلی می تواند خطاهای HTTP را حل کند و از شما در برابر جعل DNS محافظت کند. در اینجا نحوه انجام این کار در لینوکس آورده شده است.
هنگامی که با استفاده از نام دامنه آن به وب سایتی دسترسی پیدا می کنید، سیستم شما درخواستی برای دریافت آدرس IP آن دامنه به سرور DNS ارسال می کند. این جفت آدرس دامنه-IP برای استفاده بعدی در حافظه پنهان DNS ذخیره میشود، بنابراین لازم نیست هر بار برای برقراری اتصال درخواستهایی را به سرور DNS ارسال کنید.
اما گاهی اوقات، حافظه پنهان DNS محلی خراب می شود و باعث خطاهای HTTP می شود. خوشبختانه، شستشو و بازسازی حافظه پنهان DNS در رایانه لینوکس ساده است. در اینجا نحوه انجام آن آمده است.
چرا DNS Cache را در لینوکس شستشو دهیم؟
دلایل مختلفی وجود دارد که ممکن است بخواهید حافظه پنهان DNS ذخیره شده در سیستم خود را بازسازی کنید. شاید شما یک رکورد DNS قدیمی برای یک وب سایت داشته باشید و بخواهید آن را دوباره از سرور DNS واکشی کنید. یا شاید، سیستم شما به خطر افتاده است و می خواهید مطمئن شوید که حافظه پنهان DNS دستکاری نشده است، که به عنوان جعل DNS نیز شناخته می شود.
هنگامی که حافظه نهان DNS خود را شستشو می دهید، سیستم باید دوباره سرور DNS را پینگ کند و رکورد آدرس IP جدید دامنه را از آن دریافت کند و هر گونه داده قدیمی یا در معرض خطر را در این فرآیند حذف کند.
نحوه مشاهده کش DNS محلی در لینوکس
قبل از systemd، اکثر توزیعهای لینوکس دارای حافظه پنهان DNS در سراسر سیستم نبودند، مگر اینکه برنامهای مانند dnsmasq یا nscd به صورت دستی تنظیم شده باشد. systemd با systemd-resolved ارائه میشود، سرویسی که نام دامنهها را به آدرسهای IP تفکیک میکند و ورودیهای DNS را ذخیره میکند.
بخشهای زیر شما را راهنمایی میکنند که چگونه محتویات کش DNS تولید شده توسط systemd-resolved، nscd و dnsmasq را مشاهده کنید، بنابراین میتوانید قبل از اینکه تصمیم به شستشوی آنها بگیرید، دادههای کش را درک کنید.
مشاهده کش DNS برای سیستم حل شده است
برای مشاهده رکوردهای حافظه پنهان با حل سیستم، ابتدا باید سرویس را به طور موقت حذف کنید، سپس گزارش های آن را به یک فایل صادر کنید.
با ارسال یک سیگنال SIGUSR1 برای از بین بردن سرویس systemd-resolted شروع کنید:
sudo killall -USR1 systemd-resolved
از دستور journalctl و عملگر خروجی استاندارد برای ذخیره خروجی در یک فایل متنی استفاده کنید:
sudo journalctl -u systemd-resolved > ~/cache.txt
سپس می توانید محتویات فایل را با استفاده از ویرایشگر متنی مانند Vim مشاهده کنید:
vim ~/cache.txt
در فایل، با فشردن Escape، تایپ کردن “/CACHE:” و زدن Enter، “CACHE:” را جستجو کنید. تمام رکوردهای DNS فهرست شده در CACHE: بخشی از کش محلی DNS هستند. اگر از Vim استفاده می کنید، n را فشار دهید تا به مجموعه بعدی ورودی های DNS بروید.
Local DNS Cache را برای nscd مشاهده کنید
برای مشاهده حافظه نهان محلی تولید شده توسط nscd، باید محتویات پایگاه داده میزبان nscd را با استفاده از دستور strings بخوانید.
در توزیعهای مبتنی بر دبیان و اوبونتو، این فایل در /var/cache/nscd/hosts قرار دارد. برای مشاهده فایل دستور زیر را اجرا کنید:
sudo strings /var/cache/nscd/hosts | uniq
برای مشاهده آمار کلی در مورد حافظه کش nscd DNS، از پرچم -g استفاده کنید:
sudo nscd -g
نمایش کش DNS ایجاد شده توسط dnsmasq
dnsmasq حافظه نهان DNS را در حافظه ذخیره می کند، بنابراین گرفتن رکوردهای دقیق آسان نیست. اما می توانید یک سیگنال kill به dnsmasq ارسال کنید و خروجی آن را ثبت کنید تا تعداد پرس و جوهای DNS پردازش شده را دریافت کنید.
برای انجام این کار، ابتدا با استفاده از دستور systemctl مطمئن شوید که dnsmasq راه اندازی و اجرا می شود:
sudo systemctl status dnsmasq
اگر وضعیت Active را نشان میدهد، دستور زیر را برای از بین بردن سرویس اجرا کنید:
sudo pkill -USR1 dnsmasq
با استفاده از دستور journalctl، لاگ های dnsmasq را استخراج کرده و در یک فایل متنی ذخیره کنید:
sudo journalctl -u dnsmasq > ~/cache.txt
در نهایت، محتویات فایل را با استفاده از یک ابزار مشاهده فایل مانند cat یا کمتر مشاهده کنید:
cat ~/cache.txt
نحوه شستشوی کش DNS در لینوکس
شستشوی کش DNS به معنای حذف سوابق DNS کش شده از رایانه شما است. این باعث می شود که درخواستی برای بازیابی ورودی های DNS جدید به سرور DNS ارسال کند.
در اینجا نحوه شستشوی کش DNS در لینوکس آمده است:
با استفاده از systemd-resolved
میتوانید از دستور solutionctl برای شستشوی کش DNS ذخیره شده توسط systemd-resolved استفاده کنید:
sudo resolvectl flush-caches
اگر اوبونتو 17.04 یا 18.04 را اجرا می کنید، از دستور systemd-resolved برای پاک کردن کش استفاده کنید:
sudo systemd-resolved --flush-caches
nscd DNS Cache را در لینوکس شستشو دهید
راحت ترین راه برای حذف کش DNS برای nscd، راه اندازی مجدد سرویس است. شما می توانید این کار را با اجرا انجام دهید:
sudo /etc/init.d/nscd restart
اگر کار نکرد، ابتدا بررسی کنید که حافظه پنهان محلی ذخیره شده در رایانه شخصی شما پایدار است یا خیر. می توانید از پرچم -g برای تأیید آن استفاده کنید:
sudo nscd -g
اگر اینطور است، از پرچم -i با دستور nscd برای پاک کردن رکوردها استفاده کنید (i مخفف عبارت invalidate است):
sudo nscd -i hosts
کش DNS dnsmasq را حذف کنید
شستشوی کش DNS تولید شده توسط dnsmasq ساده است. از آنجایی که کش در حافظه ذخیره می شود، راه اندازی مجدد سرویس تمام ورودی های ذخیره شده را حذف می کند.
برای راه اندازی مجدد dnsmasq، دستور systemctl زیر را اجرا کنید:
sudo systemctl restart dnsmasq
یا دستور زیر را صادر کنید:
service dnsmasq restart
در صورت درخواست رمز عبور مدیر را وارد کنید. اکنون dnsmasq مجدداً راه اندازی می شود و تمام ورودی های DNS موجود شما از کش حذف می شوند.
پس از شستشوی کش DNS، بهتر است ورودی های کش محلی را مشاهده کرده و بررسی کنید که آیا داده ها با موفقیت حذف شده اند یا خیر. میتوانید از dig، یکی از چندین دستور عیبیابی شبکه لینوکس استفاده کنید و مقدار زمان Query را در خروجی بررسی کنید. اگر بیش از 0 میلیثانیه باشد، حافظه پنهان با موفقیت پاک شد (0 میلیثانیه به این معنی است که رکورد دامنه هنوز در حافظه پنهان است).
dig google.com
کش DNS گوگل کروم را پاک کنید
مرورگر وب که اغلب استفاده می کنید، رکوردهای DNS را نیز ذخیره می کند. هنگامی که یک URL را وارد می کنید، سیستم یک ورودی حافظه پنهان را در حافظه پنهان مرورگر محلی جستجو می کند. اگر پیدا نشد، سوابق موجود در حافظه پنهان سیستم محلی را بررسی می کند. پاک کردن کش DNS مرورگر وب شما بسیار مهم است زیرا اولویت بیشتری نسبت به حافظه نهان سراسر سیستم دارد.
برای نمایش، بیایید کش DNS را در Google Chrome پاک کنیم. راههایی برای انجام این کار در سایر مرورگرها نیز وجود دارد، بنابراین بهتر است نحوه انجام آن را برای مرورگر مورد استفاده خود در گوگل جستجو کنید.
برای شروع، “chrome://net-internals/#dns” را در نوار URL تایپ کنید و Enter را بزنید:
برای پاک کردن ورودی های DNS ذخیره شده در گوگل کروم، روی پاک کردن کش میزبان کلیک کنید.
لینوکس بهترین سیستم عامل برای یادگیری شبکه است
لینوکس ممکن است در ابتدا پیچیده به نظر برسد، اما اگر مدتی را برای یادگیری نحوه عملکرد آن صرف کنید، به سرعت متوجه خواهید شد که فوق العاده است و شاید حتی بهتر از ویندوز یا macOS باشد.
اکثر سرورهای آنلاین لینوکس را اجرا می کنند، و این یکی از دلایلی است که لینوکس ایده آل است اگر می خواهید شبکه سازی را یاد بگیرید یا به طور کلی می خواهید بدانید که کامپیوترها چگونه کار می کنند.