Linux לא מצליח לפתור DNS: סיבות ופתרונות

אם ב-Linux נראה שחיבור האינטרנט פעיל, אבל אתרי אינטרנט לא נפתחים, או שאפשר להתחבר דרך כתובת IP אבל לא דרך שם דומיין, לרוב מדובר בבעיה בפתרון DNS. התפקיד של DNS הוא להמיר שמות דומיין כמו example.com לכתובות IP אמיתיות. כאשר התהליך הזה נכשל, הרשת יכולה להיראות פעילה, אבל השימוש הרגיל באינטרנט נפגע מאוד.

תסמינים נפוצים

  • הדפדפן מציג שלא ניתן למצוא את השרת
  • 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 לא עובדת, סביר יותר שהבעיה נמצאת ב-Wi-Fi, בממשק הרשת, בשער ברירת המחדל או בניתוב.

הגורמים העיקריים

1. הגדרה שגויה של /etc/resolv.conf

במערכות Linux רבות, מידע על שרתי DNS נשמר בקובץ /etc/resolv.conf. אם אין שם nameserver תקין, שמות דומיין לא ייפתרו.

cat /etc/resolv.conf

דוגמה:

nameserver 8.8.8.8
nameserver 1.1.1.1

אם הקובץ ריק או מצביע ל-DNS מקומי שגוי, תופיע הבעיה. חשוב לזכור שבמערכות Linux מודרניות הקובץ הזה נוצר לעיתים קרובות אוטומטית על ידי 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 נכון

ב-Linux למחשבים שולחניים, ‏NetworkManager מקבל לעיתים קרובות את הגדרות ה-DNS דרך DHCP. אם פרופיל הרשת פגום או שהחיבור מחדש נכשל, ייתכן ששרתי ה-DNS הנכונים לא ייושמו.

nmcli dev show | grep DNS
nmcli connection show

אם צריך, אפשר להפעיל אותו מחדש:

sudo systemctl restart NetworkManager

4. השפעה של VPN, פרוקסי או חומת אש

VPN עלול לשלוח בקשות DNS במסלול שגוי, וחומת אש עלולה לחסום את פורט 53. במצב כזה הרשת נראית תקינה, אבל שמות דומיין לא נפתרים.

5. מטמון DNS פגום או מיושן

אם המטמון המקומי פגום או ישן מדי, ייתכן שחלק מהדומיינים יפסיקו לעבוד. במערכות שמשתמשות ב-systemd-resolved או ב-nscd, ניקוי המטמון יכול לעזור.

sudo resolvectl flush-caches

שלבים מעשיים לפתרון

שלב 1: בדיקה ישירה מול DNS ציבורי

nslookup google.com 8.8.8.8
dig google.com @8.8.8.8

אם זה עובד, סביר שה-DNS החיצוני תקין והבעיה נמצאת בהגדרות המקומיות.

שלב 2: הגדרת DNS ציבורי באופן זמני

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

זהו פתרון זמני בלבד. לאחר הפעלה מחדש או חיבור מחדש, הקובץ עלול להשתנות שוב. לפתרון קבוע צריך לתקן את ההגדרות של NetworkManager, ‏netplan או systemd-resolved.

שלב 3: בדיקת netplan ב-Ubuntu

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 סיפק נתוני 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 קבועים

סיכום

כאשר Linux לא מצליח לפתור שמות DNS, הצעד הראשון והחשוב ביותר הוא לבדוק האם התקשורת דרך כתובת IP עדיין פועלת. כך אפשר להבין במהירות האם מדובר רק בבעיה ב-DNS או בבעיה רחבה יותר ברשת. לאחר מכן יש לבדוק בצורה מסודרת את /etc/resolv.conf, ‏systemd-resolved, ‏NetworkManager, ‏DHCP והגדרות ה-VPN. המטרה איננה רק פתרון זמני, אלא גם להבין איזה רכיב במערכת באמת מנהל את DNS.

Leave a Reply

האימייל לא יוצג באתר. שדות החובה מסומנים *