اگر در لینوکس به نظر میرسد که اتصال اینترنت برقرار است، اما وبسایتها باز نمیشوند، یا اگر دسترسی از طریق 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 را مدیریت میکند.