מבינים DNS – מדריך מרמת מתחיל

ברק ארזואן,

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

dns network

אז לפני שנתחיל… קצת היסטוריה

לפני הרבה שנים בשנת 1969 שהאינטרנט הוקם (אז קראו לזה ARPANET) היו כ4 שרתים ברחבי ארה"ב שהיו מטפלים בכל "האינטרנט" שהיה קיים באותה התקופה, לא היו תשתיות מורכבות ומערכות שהיו מבצעות סנכרון אחת עם השנייה על מנת לעדכן נתונים לגבי אתרים ברשת האינטרנט.
היה שרת אחד בודד שעליו אוחסן קובץ hosts, בקובץ זה היו מוגדרות כתובות של אתרי אינטרנט (דומיינים) וכתובות IP של השרתים מהם הם היו עולות.

ברגע שהאינטרנט גדל והפך להיות רציני יותר, הפתרון הנ"ל נמצא פחות ופחות יעיל והיו חייבים להמציא מחדש את השיטה.

בשנת 1983 החליט פול מוקפטריס (מאוניברסיטת קליפורניה, ארה"ב) להרים את הכפפה ולהמציא מחדש את כל המערכת שמחליטה מאיזה שרת יעלה דומיין מסוים. ככה נוצרה מערכת הDNS שבה אנחנו עושים שימוש כיום.

אז מה זה DNS ? ולמה אנחנו צריכים אותו?

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

אם ניקח דוגמא מוחשית יותר, זוכרים שפעם השתמשנו בספר טלפונים כדי למצוא מספר של מישהו מסוים לפי השם שלו ? אז אותו דבר כאן.
ברגע שאנחנו מקלידים את הכתובת www.upress.co.il בדפדפן שלנו בשורת הכתובת, הדפדפן מבצע "תרגום" לכתובת הIP של השרת עליו מאוחסן האתר, ומציג לנו את האתר דרך השרת שהוא מצא "מאחורי הקלעים".

מאחורי כתובת הדומיין מסתתרים שלושה חלקים המופרדים באמצעות נקודות

what-is-a-TLD

לפני שאתחיל, מספר מילים בנוגע לכללי וחוקי הDNS בעולם:

IANA – ראשי תיבות של Internet Assigned Numbers Authority
היא רשות שנמצאת בכפיפות למשרד המסחר והתעשיה האמריקאי ותחת ממשלת ארה"ב ועובדת תחת ICANN, והיא הסמכות הבלעדית לקביעת TLD בעולם, ולקביעת פרוטוקולי תקשורת מקובלים בעולם, ופורטים מסוימים לשירותים ספציפיים שנקבעו מראש כמיועדים לשירותים אלו.

ICANN – ראשי תיבות של Internet Corporation for Assigned Names and Numbers
היא רשות שאחראית על הקצאות שמות מתחם (דומיינים) לכל מדינה, ואחראית על ה"סדר העולמי" בניהול הDNS הגלובלי. כמו כן היא אחראית על פיקוח תחזוקת שרתי הRoot DNS הגלובליים.
עד 2016 הרשות הייתה אחראית בעצמה לתחזוקת שרתי הRoot DNS עד שהנושא עבר לטיפול של חברת Verisign וכרגע נמצא תחת פיקוח של ICANN בלבד.

אסביר לגבי כל חלק בדומיין (משמאל לימין):

Subdomain
הוא החלק שמכיל את תחילת הדומיין (www או תתי דומיינים (Sub-Domains) או שירותים שמנוהלים על ידי הדומיין באמצעות hostnames אחרים (כמו pop, smtp, mail וכו') ומפנים לשרתים אחרים או לשרת בו מנוהל הדומיין הראשי.

SLD – ראשי תיבות של Second Level Domain
זה למעשה החלק שבחרתם לקרוא בו למותג/אתר/עסק שלכם. והוא ינוהל תחת שרתי הNS של רשם הדומיין שממנו רכשתם את הדומיין (כברירת מחדל, מוגדרות באופן אוטומטי לאחר רכישת דומיין כתובות שרתי הNS של רשם הדומיין ממנו רכשתם את הדומיין, מכיוון שבאופן הגיוני והיררכי לא ניתן להשאיר דומיין ללא שרתי NS שינהלו אותו) ולאחר מכן אתם יכולים לשנות את שרתי הNS דרכם ינוהלו רשומות הDNS של הדומיין כאוות נפשכם.

(את לקוחותינו, אנחנו מנחים להגדיר את שרתי הNS שלנו ns1.upress.io וns2.upress.io לאחר שהם מבצעים רישום לדומיין חדש או לחילופין, מעוניינים להעביר דומיין שמנוהל על ידי חברת אחסון אחרת או רשם דומיינים אחר לניהולנו/לשרת האחסון שלנו)

TLD – ראשי תיבות של Top Level Domain
זוהי למעשה הסיומת של הדומיין שלכם, יכולה להיות .co.il, .org, .net, .io ושאר סיומות רבות ומגוונות, אשר מתחלקות למדינות, ארגונים, פעילויות עסקיות וכו'.
נכון לתאריך פרסום הפוסט קיימות 1517 סיומות של TLD שונות ומגוונות, במידה ואתם מסתקרנים לדעת אילו סיומות מוגדרות כTLD תוכלו להיכנס לאתר של IANA.

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

אז איך זה עובד?

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

משם הבקשה עוברת לשרת הDNS של ספקית האינטרנט שלנו (מופיע בתמונה המצורפת כ Recursive Resolver) מדובר בשרת שבו ספקית התקשורת שומרת זיכרון מטמון בכמות מאוד גדולה המכיל רשומות DNS של אתרים אשר נתבקשו על ידי הגולשים של ספקית התקשורת, ובמידה וחסר לספקית התקשורת מידע על הכתובת אתר שאליה אתם מנסים לגשת היא מתשאלת את שרתי הDNS בעולם, מקבלת מהם את המידע ושומרת בזכרון המטמון ע"פ הTTL שהוגדר ברשומות).

לאחר שהקשנו כתובת אתר בדפדפן – מה בעצם התהליך שמתרחש?

מה קורה אחרי הקשת הדומיין בדפדפן

לפני שנצלול לתהליך הטכני שמתרחש, ארצה להסביר מושג חיוני שילווה אותנו בהמשך.

NS – ראשי תיבות של Nameserver
הוא שרת המאגד בתוכו עשרות-מאות אלפי רשומות DNS של דומיינים שפונים אליו בחלק מסוים שלהם (בTLD או בSLD ובHostname, אפרט בהמשך) בתוך קבצי Zone (בשפה הטכנית: Zone Files) לכל שרת NS בעולם יש עשרות-מאות אלפי Zone Files ובעולם כולו אני מעריך שקיימים מאות מיליוני Zone Files.

הZone Files בכל אחד משרתי הNS מציגים הכוונה "איפה" שירות הDNS במחשב שלנו צריך לחפש את הדומיין (באיזה שרת) עד שמגיעים לשרת המאחסן את תכני האתר (באמצעות הכוונה של רשומת A, ארחיב בהמשך).

נחזור לתהליך הטכני, כפי שציינתי בתחילת המאמר, בתחילתו של עידן האינטרנט לא היה קיים DNS וכל רשומות ה"DNS" היו נמצאות על קובץ אחד בשרת מסוים. מאז עידן הDNS ישנם שרתי Root Nameservers גלובליים בין האותיות M-A והכתובות שלהם הן:

A-M.root-servers.net

ריבוי שרתי הRoot Nameservers עוזר לנו לשמור על שרידות של הDNS בעולם ועל Uptime של 100% ברשת האינטרנט הגלובלית.

מהנתון הנ"ל ניתן להבין כי קיימים 13 שרתי Root Nameservers גלובליים, המצב הוא ממש לא כך מהסיבה שהשרתים עובדים בפרוטוקול Anycast, זה אומר שכתובת IP אחת משרתת כמה שרתים, במקרה הזה, תחת כל כתובת IP קיימים בסביבות ה90 שרתים +- שהיא משרתת.

בעולם קיימים 1034 שרתי Root Nameserver נכון לתאריף פרסום הפוסט, והם מפוזרים בכל רחבי העולם (כולל בישראל) ומתוחזקים על ידי 12 ארגונים שונים.

ניתן לצפות במפה המלאה, תפקידם של שרתי ה Root Nameserver הוא לנתב את הבקשה של הדפדפן או הגולש, לשרת הTLD Nameserver (ע"פ הסיומת של הדומיין).

בדוגמא הבאה נציג את התהליך שמתרחש ברגע שאנחנו מקלידים כתובת של אתר מסוים "מאחורי הקלעים" בשרתי הDNS

dig +trace

הכלי הנ"ל שבאמצעותו ביצעתי את הבדיקה נקרא פקודת dig +trace במערכת ההפעלה Linux יש גם כלים webים שבאמצעותם ניתן לבצע את הבדיקה הזו.

נעבור על הרשומות מלמעלה ללמטה,
תחילה ניתן לראות ששירות הDNS פונה בראש ובראשונה לשרתי הRoot Nameservers כמובן, באמצעות Trailing dot – זוהי הנקודה שמגיעה אחרי הדומיין,

על מנת לומר לשרת הDNS עבור איזה דומיין אנחנו מעוניינים לבצע את השאילתה שלנו, לכן בכתיבת רשומות של דומיינים אנחנו נשתמש ב@ שזה אומר שם הדומיין שלנו שמנוהל על ידי שרת הDNS או לחילופין בשם הדומיין עם . בסוף.

לאחר מכן שרתי הRoot Nameservers "מכוונים" את שירות הDNS במערכת ההפעלה לסיומת הil של הדומיין והוא מגיע לשרתי הDNS שמנהלים את כל שמות הדומיין המכילים את הסיומת il,

ולבסוף לאחר שהם מצאו בתוכם את שם המתחם google.co.il הם "מכוונים" את שירות הDNS לשרתי הNS המכילים את שם המתחם.

בתוך שרתי הNS של גוגל נמצא הZone file של הדומיין google.co.il והוא מכיל את כל הרשומות הפופולריות שעליהן אני אפרט כאן:

TTL – ראשי תיבות של Time To Live
זהו הזמן שמוגדר לשירות הDNS שמקבל את הרשומות לשמור את הרשומות אצלו (לאחר מכן הן "פגות תוקף" וצריך לבצע שאילתה חדשה אל מול שרת הNS שמכיל בתוכו את קובץ הרשומות) , הזמן הזה נמדד ביחידות זמן של שניות. 300 שניות זה 5 דקות. וכמה זה 345600 ? תחלקו ל60 תקבלו את מספר הדקות, גם אותן תחלקו ל60 ותקבלו את מספר השעות את המספר הנותר תחלקו לכמות השעות ביממה (24) ונקבל ש345600 שניות שוות למעשה ל4 ימים (שהם 96 שעות שהם 5760 דקות שהן 345600 שניות).

A Record
זוהי הרשומה המצביעה על כתובת הIP (IPv4 – כתובת הIP ה"מסורתית" שאנחנו מכירים) שבה למעשה מתנהל האתר/אפליקציית האינטרנט אליה אנחנו ניגשים.
הכתובת הזו יכולה להצביע גם על CDN ((Content Delivery Network שדרכה עוברים תכני האתר הסטטיים (תמונות, דפי HTML קבצי JavaScript וכל הקבצים הלא דינמיים ולא מה שקשור לצד השרת).

AAAA Record
זוהי הרשומה המצביעה על כתובת הIP ה"חדשה" של עולם האינטרנט (כתובת IPv6) כתובת הIP שנכנסה לשימוש כבר בענקיות השירותים ומובילות הטכנולוגיה המקוונות, לאחר שכתובות הIP ה"מסורתיות" נגמרו בעולם, הכתובת הזו לא באמת חדשה והמציאו אותה מתי שהמציאו את הIPv4 אבל עד ה5 שנים האחרונות לא הכניסו אותה לשימוש כי היה שימוש בכתובות הIP הרגילות, מספר הצירופים של כתובת הIPv6 הוא מספר צירופים עצום, לעומת כתובות הIP הרגילות שמכילות כ4,000,000,000 שכולם נגמרו כפי שאמרתי, ולכן בתקופה הקרובה נראה יותר ויותר שימושים בכתובות הIPv6.

NS Record
רשומות הNS הם רשומות שבהם למעשה מתנהלים הZone files (הקבצים שמכילים את כל הרשומות לגבי דומיין מסוים)

MX Record
זוהי רשומת שרתי הדואר בהם מתנהלים המיילים (הנכנסים והיוצאים) של דומיין מסוים, ישנם שירותי דואר שמסופקים על ידי ספקיות "קטנות" (כמו אצל ספקיות אחסון אתרים למשל) ויש שירותי דואר שמסופקים על ידי ענקיות הטכנולוגיה והענן (Amazon Web Services – SES, Office 365, Google Gsuite) לכל רשומת MX ניתן להגדיר Priority (עדיפות) ככל שהמספר של הPriority יהיה נמוך הפניה לשרת הדואר תהיה ראשונית יותר בתמונה הנ"ל ניתן לראות שקיימות 5 רשומות MX שהPriority שלהם מוגדר על טווח בין 10-50 השרת הראשון שיטפל במיילים נכנסים ויוצאים הוא השרת עם הPriority 10 במידה והוא לא יהיה זמין הניהול של הדואר יעבור לשרת הדואר הבא בעדיפות שהוגדרה וכן הלאה.

TXT Record
זוהי רשומת טקסט, ברשומה הזו אנחנו נשתמש לאמת את בעלותנו על דומיין מסוים באמצעות הדבקת קוד אימות שנקבל משירות כלשהו, ונשתמש גם ברשומות DKIM וSPF על מנת להוציא מיילים מאומתים בשם של הדומיין בו אנחנו משתמשים לשלוח מיילים.

SOA Record – ראשי תיבות של Start Of Authority
הרשומה הזו היא תמצית של אינפורמציה לגבי כתובת של שרת הNS הראשי שמנהל את הדומיין (כפי שציינתי יש שני שרתי DNS על מנת לתת שרידות שהאחד מהם הוא העיקרי והשני הוא המשני, השרתים מוגדרים בתצורת Master-Slave והשרת ns2 מבצע שכפול של רשומות הDNS משרת ns1 ע"פ המספר הסריאלי שנתון ברשומת הSOA לגבי דומיין מסוים בכל רגע נתון)

הסנכרון בין שרתי הNS הראשי והמשני מתבצע ע"פ קונפיגורציית הDNS שהוגדרה ע"י מנהל השרת בהקמתו, יש אפשרות לסנכרן את כל קובץ הרשומות, סנכרון זה נקרא AXFR והוא סנכרון שמתבצע ברגע ששרת הNS המשני מקבל עדכון ששונה קובץ הרשומות בשרת הNS הראשי.
לעומתו, ישנו את הסנכרון האינקרמנטלי, המכונה בשפה המקצועית IXFR, הסנכרון הזה מתבצע על ידי "לוג" של שרתי הDNS, ברגע ששרת הNS המשני מקבל מידע שרשומה כלשהי בדומיין כלשהו שונתה הוא מעדכן מיידית את הרשומה הספציפית מתוך שרת הNS הראשי. ולא את כל הקובץ כולו.

לסיכום

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

ברק ארזואן
ברק ארזואן

בן 24, חי ונושם את תחום המחשבים והרשתות מגיל מאוד צעיר, הספיק להכיר את WordPress 3.0, בגיל 16 ניהל מספר אתרים מבוססי Wordpress, בעל רקע טכני נרחב בתשתיות פיתוח ותשתיות ענן, הצטרף לנבחרת המנצחת של uPress לאחר לאחר ניסיון ניהולי מוכח בהובלת צוות טכני, כיום משרת את לקוחות החברה בכלל ערוצי השירות הטכני.

  • אולי יעניין אותך..

  • כתיבת תגובה

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