لینوکس نمی‌تواند DNS را resolve کند: علت‌ها و راه‌حل‌ها

اگر در لینوکس به نظر می‌رسد که اتصال اینترنت برقرار است، اما وب‌سایت‌ها باز نمی‌شوند، یا اگر دسترسی از طریق IP address کار می‌کند ولی از طریق نام دامنه نه، معمولاً مشکل از DNS resolution است. DNS وظیفه دارد نام‌های دامنه مانند example.com را به IP address واقعی تبدیل کند. اگر این فرایند دچار مشکل شود، شبکه ممکن است فعال به نظر برسد، اما استفاده عادی از اینترنت به‌شدت مختل می‌شود.

نشانه‌های رایج

  • مرورگر نشان می‌دهد که سرور پیدا نشد
  • ping 8.8.8.8 موفق است، اما ping google.com شکست می‌خورد
  • مدیر بسته‌هایی مانند apt، dnf، yum و pacman درست کار نمی‌کنند
  • پیام خطای Temporary failure in name resolution نمایش داده می‌شود

اول از همه چه چیزی را بررسی کنیم

ابتدا باید مشخص کنید که مشکل مربوط به کل شبکه است یا فقط به DNS محدود می‌شود.

ping -c 4 8.8.8.8
ping -c 4 google.com
ip addr
ip route

اگر 8.8.8.8 پاسخ می‌دهد اما google.com نه، این معمولاً نشانه‌ی مشکل DNS است. اگر حتی دسترسی به IP address هم ممکن نباشد، احتمالاً مشکل در Wi-Fi، رابط شبکه، gateway یا routing است.

علت‌های اصلی

1. تنظیم نادرست /etc/resolv.conf

در بسیاری از سیستم‌های لینوکس، اطلاعات DNS server در فایل /etc/resolv.conf ذخیره می‌شود. اگر در این فایل nameserver درستی وجود نداشته باشد، نام‌های دامنه resolve نخواهند شد.

cat /etc/resolv.conf

نمونه:

nameserver 8.8.8.8
nameserver 1.1.1.1

اگر فایل خالی باشد یا به یک DNS محلی نادرست اشاره کند، مشکل ایجاد می‌شود. همچنین باید توجه داشت که در سیستم‌های مدرن لینوکس، این فایل اغلب به‌صورت خودکار توسط NetworkManager یا systemd-resolved تولید می‌شود، بنابراین تغییرات دستی ممکن است بازنویسی شوند.

2. مشکل در systemd-resolved

در سیستم‌هایی مانند Ubuntu، معمولاً systemd-resolved مدیریت DNS را بر عهده دارد و از 127.0.0.53 به‌عنوان resolver محلی استفاده می‌کند. اگر این سرویس متوقف شود، DNS نیز از کار می‌افتد.

systemctl status systemd-resolved
resolvectl status

در صورت وجود مشکل، سرویس را ری‌استارت کنید:

sudo systemctl restart systemd-resolved

3. NetworkManager تنظیم DNS را درست اعمال نمی‌کند

در لینوکس دسکتاپ، NetworkManager معمولاً اطلاعات DNS را از طریق DHCP دریافت می‌کند. اگر پروفایل شبکه خراب شده باشد یا هنگام اتصال مجدد مشکلی پیش آمده باشد، DNS درست اعمال نمی‌شود.

nmcli dev show | grep DNS
nmcli connection show

در صورت نیاز آن را ری‌استارت کنید:

sudo systemctl restart NetworkManager

4. تأثیر VPN، proxy یا firewall

یک VPN ممکن است درخواست‌های DNS را از مسیر اشتباه ارسال کند و firewall نیز ممکن است پورت 53 را مسدود کند. در این حالت شبکه ظاهراً فعال است، اما نام‌های دامنه resolve نمی‌شوند.

5. خراب یا قدیمی بودن DNS cache

اگر کش محلی خراب یا قدیمی شده باشد، ممکن است بعضی دامنه‌ها دیگر باز نشوند. در سیستم‌هایی که از systemd-resolved یا nscd استفاده می‌کنند، پاک‌کردن cache می‌تواند کمک کند.

sudo resolvectl flush-caches

مراحل عملی برای رفع مشکل

مرحله 1: مستقیماً یک public DNS را آزمایش کنید

nslookup google.com 8.8.8.8
dig google.com @8.8.8.8

اگر این کار جواب بدهد، احتمالاً DNS خارجی سالم است و مشکل بیشتر در تنظیمات محلی قرار دارد.

مرحله 2: به‌طور موقت public DNS تنظیم کنید

sudo sh -c 'printf "nameserver 8.8.8.8\nnameserver 1.1.1.1\n" > /etc/resolv.conf'

این فقط یک راه‌حل موقت است. پس از reboot یا reconnect ممکن است فایل دوباره تغییر کند. برای رفع دائمی باید تنظیمات NetworkManager، netplan یا systemd-resolved اصلاح شود.

مرحله 3: در Ubuntu، netplan را بررسی کنید

sudo nano /etc/netplan/*.yaml

نمونه:

nameservers:
  addresses: [8.8.8.8,1.1.1.1]

سپس تغییرات را اعمال کنید:

sudo netplan apply

مرحله 4: اطلاعات DHCP را دوباره دریافت کنید

sudo dhclient -r
sudo dhclient

اگر DHCP server اطلاعات DNS اشتباه داده باشد، این مرحله می‌تواند کمک کند.

دستورهای مفید برای بررسی

ping -c 4 8.8.8.8
ping -c 4 google.com
cat /etc/resolv.conf
systemctl status systemd-resolved
resolvectl status
nmcli dev show | grep DNS
nslookup google.com
dig google.com
journalctl -u systemd-resolved --no-pager | tail -n 50

چطور از تکرار مشکل جلوگیری کنیم

  • فقط به ویرایش دستی /etc/resolv.conf اکتفا نکنید
  • مشخص کنید که DNS توسط DHCP، NetworkManager یا systemd-resolved مدیریت می‌شود
  • پس از راه‌اندازی VPN، تنظیمات DNS را بررسی کنید
  • در سرورها بهتر است DNS ثابت را به‌صورت شفاف تعیین کنید

جمع‌بندی

وقتی لینوکس نمی‌تواند نام‌های DNS را resolve کند، مهم‌ترین قدم اول این است که بررسی کنید آیا ارتباط از طریق IP address هنوز کار می‌کند یا نه. این کار کمک می‌کند سریع مشخص شود که مشکل فقط در DNS است یا در کل شبکه. سپس باید به‌ترتیب /etc/resolv.conf، systemd-resolved، NetworkManager، DHCP و تنظیمات VPN را بررسی کنید. هدف فقط یک راه‌حل موقت نیست، بلکه باید بفهمید کدام جزء سیستم واقعاً DNS را مدیریت می‌کند.

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *