DNS Propagation

מקבלים DNS_PROBE_FINISHED_NXDOMAIN כשאתם מנסים להכנס לאתר?

לא מאוד קשור לתכנות – אבל כן קשור למבנה הרשת. כל מתכנת שהוא אמור לדעת מה זה DNS – מדובר בראשי תיבות של Domain Name System (לא Servers, באופן מפתיע). אלו השרתים שאחראים לתרגם את הדומיין שלנו לכתובת IP. רובנו מכירים את שרתי ה-DNS מצד הלקוח – השרתים שאני מגדיר בחיבור האינטרנט שלי, כמו 8.8.8.8 או 1.1.1.1 או אלו שמוגדרים אוטומטית על ידי הספק עבורי ודרכם אני מקבל את כתובת האתר שלי.

דוגמה של בקשת DNS

אבל, כמפתחי רשת יש עוד זווית של DNS שאנו אמורים להכיר – העדכון שלהם. כשאנו רוכשים דומיין, אנו אמורים להגדיר את ה-Name Server – השרתים שאמורים להכיל את המידע הסופי על החיבור בין הדומיין שלנו ל-IP של השרת. ה-Name Servers האלו נשמרים יחד עם שם הדומיין והם ה-source of truth של הדומיין שלנו.

מה קורה כשאנו מגדירים דומיין בפעם הראשונה? כשאנו רוכשים אותו, אנו בדרך כלל מגדירים בו את ה-name server של השרת שלנו, זה שמכיל את קבצי האתר שלנו. כאן למשל, הגדרתי בגודדי, שהוא ספק של שם דומיין את ה-name server של סייטגראונד, שהוא הספק שמארח את השרת שלי:

הגדרה של ns בממשק שם מתחם
הגדרה של ns בממשק שם מתחם

מה קורה מייד אחרי שרכשתי שם דומיין וחיברתי אותו ל-name server של השרת שלי? בגדול, כשאני מבצע את הבקשה הראשונה שלי אל הדומיין החדש, שרת ה-DNS של הספקית שלי לא יודע לאיזה ip להפנות אותי, כיוון שזה דומיין חדש. הוא ניגש לשרתי DNS אחרים, אלו שאחראים על השלב העליון של הדומיין (למשל com.) ואחד מהם יתן לו את ה-ns המתאים והוא זה שיתן לו את כתובת ה-IP המתאימה.

הכל טוב ויפה כשרוכשים דומיין חדש – אבל מה קורה כשרוצים להחליף שרת לדומיין קיים? ומחליפים את ה-name server? למשל להעביר ספק אחסון שרת (כמו מדרימהוסט לסייטגראונד) או יותר גרוע – ה-name server משתנה מסיבה מסוימת – כמו למשל החלפת חבילה בספק האחסון. במקרה הזה, שרת ה-DNS לא יוכל לתת לגולש את התוצאה שהוא רוצה ונקבל את השגיאה הנפלאה בכרום:

DNS_PROBE_FINISHED_NXDOMAIN

מה זה אומר? זה אומר ששרת ה-DNS הגיע אל ה-name server והוא החזיר לו תשובה שהוא לא מכיר את הדומיין. ה-DNS לא יכול להחזיר לך את ה-IP של השרת.

אם טרחתם ועדכנתם בממשק את ה-name server החדש, עדיין, כשתנסו להכנס לאתר שלכם – עדיין תקבלו את ה-DNS_PROBE_FINISHED_NXDOMAIN המעצבן! למה? זה בגלל ה-DNS propagation. שזו מילה גדולה מאוד עבור ה-cache של ה-DNS. לכל שרתי ה-DNS יש cache. יש לכם גם DNS cache במחשב שלכם ובכל ה-cache האלו יש כבר את ה-name server הישן וה-IP הישן. שרתי ה-DNS מרעננים את ה-cache שלהם מדי פעם – יש כאלו שבקצב גבוה, יש כאלו שבקצב נמוך. השרתים הטובים של גוגל 8.8.8.8 וקלאוד פלייר 1.1.1.1 עושים את זה בקצב גבוה. אם אתם משתמשים בשרתי ברירת המחדל של ׳אינטרנט אחלה בחלה בינלאומי׳ אז יש סיכוי שזה יקח זמן.

קל גם לבדוק את זה באמצעות פקודה קטנה שנמצאת גם בחלונות וגם בלינוקס ובמק שנקראת nslookup. הפקודה הזו בעצם קוראת לשרת ה-DNS. בדוגמה המוצגת כאן אני מבצע קריאת nslookup לאתר שה-name server שלו השתנה. אפשר לראות איך בשרת ברירת המחדל של הספקית הוא לא מצליח למצוא את הדומיין, כי הוא לא התעדכן ובשרת של גוגל, 8.8.8.8 – הוא מביא את המידע האמיתי.

אם אתם צריכים לשנות name server – או בגלל מעבר ספק או בגלל שדרוג חבילה – מומלץ לא לעשות את זה בדקה ה-99 (כמוני) כי אז אתם בסיכון שעבור הלקוחות שלא משתמשים בשרתי DNS נורמליים – אתם פשוט לא תהיו זמינים. אלא להשאיר את שני השרתים חיים ולבצע את המעבר ורק אחרי 48 שעות להוריד את השרת השני.

אם זו לא אופציה, כמו באתרים עם פעולות משתמשים שמכניסים לשם מידע – אז לפני המעבר כדאי מאוד להוריד, באמצעות הממשק, את ה-TTL של הדומיין למינימום האפשרי (עדיף חמש דקות). מה זה ה-TTL? זה ה-Time To Live והמגבלה של הזמן של ה-cache ששרת ה-DNS ישמור את האתר שלכם. ואז לבצע את המעבר. המקסימום של הדאונטיים יהיה חמש דקות. אחר כך מוטב להעלות את ה-TTL כי אם לא תהיה ב-cache במצב רגיל, הביקור אליכם יקח מעט יותר זמן (כי בכל כניסה, שרת ה-DNS יצטרך לבצע בדיקה איפה הדומיין שלכם נמצא, כי הוא לא יהיה ב-cache).

חשוב לוודא גם, אם אתם עושים שינוי ב-name server – לבצע ניקוי DNS cache מקומי אצלכם. רוב האנשים ואפילו המפתחים לא יודעים שיש גם במחשב המקומי DNS cache. אם אתם (או יותר גרוע – הלקוח שלכם) לא מצליחים להגיע לאתר שלכם למרות שאנשים אחרים מדווחים שהם מצליחים להגיע אליו, יש סיכוי שזה בגלל ה-DNS cache המקומי שלכם. ככה מנקים אותו:

בחלונות 10:

ipconfig /flushdns 

במק:

sudo dscacheutil -flushcache

בלינוקס (דביאן) :

sudo /etc/init.d/networking restart

זה יפתור לכם את הבעיה. אם שיניתם name server, אנשים מדווחים לכם שהם מצליחים להכנס לאתר שלכם בלי בעיה ורק אתם מקבלים DNS_PROBE_FINISHED_NXDOMAIN

אתם גם יכולים, באמצעות הכלי הזה, לראות איזה שרת DNS בעולם כבר התעדכנו.

פוסטים נוספים שכדאי לקרוא

יסודות בתכנות

מספרים בינאריים בקוד

איך, ויותר חשוב למה, משתמשים במספרים בינאריים בתכנות? גם בפייתון ובג׳אווהסקריפט?

פתרונות ומאמרים על פיתוח אינטרנט

המנעו מהעלאת source control לשרת פומבי

לא תאמינו כמה אתרים מעלים את ה-source control שלהם לשרת. ככה תמצאו אותם וגם הסבר למה זה רעיון רע.

גלילה לראש העמוד