סקירה כללית על DNS

בדף הזה תוכלו לקרוא סקירה כללית על מערכת שמות הדומיינים (DNS).

בסקירה הכללית על Cloud DNS מוסבר על Cloud DNS. מונחי מפתח שקשורים ל-Cloud DNS מפורטים במאמר מונחי מפתח.

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

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

המושגים הבאים שימושיים כשעובדים עם DNS.

סוגי שרתי DNS

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

שרת סמכותי

שרת מוסמך הוא שרת שמכיל את רשומות שמות ה-DNS, כולל A,‏ AAAA ו-CNAME.

שרת לא מוסמך יוצר קובץ מטמון על סמך שאילתות קודמות לגבי דומיינים. היא לא מכילה רשומות של שמות מקוריים.

מפענח DNS רקורסיבי

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

לעומת זאת, מפענח DNS איטרטיבי מחזיר רק הפניה לשרתי ה-DNS הבאים שעשויים להכיל את התשובה.

לדוגמה, כשמפענחים את השם google.com., מפענח ה-DNS הרקורסיבי צריך לקבוע מי מוסמך לגבי . (אזור הבסיס של DNS). לאחר מכן, היא שואלת את שרתי השמות האלה מי מוסמך ל-.com.. לבסוף, השרת שולח שאילתה לשרתי השמות האלה כדי לברר מי השרת המוסמך עבור google.com., ונתוני ה-rdata של רשומת ה-A מוחזרים ללקוח.

בהמשך מוצגת דוגמה לפעולה של מפענח DNS רקורסיבי. אם מריצים את הפקודה dig +trace google.com, מפענח ה-DNS הרקורסיבי מבצע את הפעולה הבאה (8.8.8.8/Google Public DNS הוא אחד ממפענחי ה-DNS הרקורסיביים):

 dig +trace google.com
; <<>> DiG 9.11.5-P4-5.1-Debian <<>> +trace google.com
;; global options: +cmd
.           168383  IN  NS  a.root-servers.net.
.           168383  IN  NS  b.root-servers.net.
.           168383  IN  NS  c.root-servers.net.
.           168383  IN  NS  d.root-servers.net.
.           168383  IN  NS  e.root-servers.net.
.           168383  IN  NS  f.root-servers.net.
.           168383  IN  NS  g.root-servers.net.
.           168383  IN  NS  h.root-servers.net.
.           168383  IN  NS  i.root-servers.net.
.           168383  IN  NS  j.root-servers.net.
.           168383  IN  NS  k.root-servers.net.
.           168383  IN  NS  l.root-servers.net.
.           168383  IN  NS  m.root-servers.net.
.           168383  IN  RRSIG   NS 8 0 518400 20190810170000 20190728160000 59944 .
    ITqCp5bSKwoG1P76GpNfDanh4fXxOtHuld5SJzEm9ez0U/K7kpmBm4TE
    cw82zuqtZlqiGOuq+90KHJEhD1fdX3FujgDqe3kaY/41LgFIo76RBeMP
    CorYg29lKQOBf7pLPiJWewFmnLsRXsvENzxNXl9mynX80EQSS2YlCWpr
    47i2j5SFpGDzmxls7LinB4VvwVLhy0FPwBaVc5NVqQoFS5ZkfKXCUz8x
    urExPT2OtPJeDiGzrQGmT6vDbYZtJRWWGK5tPIKZQyF/08YSJlrjebNa
    1nKZVN8SsO8s7elz6JGmdoM6D/1ByLNFQmKvU55ikaVSnXylqixLbJQI 7LyQoA==
;; Received 525 bytes from 127.0.0.1#53(127.0.0.1) in 22 ms

com.            172800  IN  NS  a.gtld-servers.net.
com.            172800  IN  NS  b.gtld-servers.net.
com.            172800  IN  NS  c.gtld-servers.net.
com.            172800  IN  NS  d.gtld-servers.net.
com.            172800  IN  NS  e.gtld-servers.net.
com.            172800  IN  NS  f.gtld-servers.net.
com.            172800  IN  NS  g.gtld-servers.net.
com.            172800  IN  NS  h.gtld-servers.net.
com.            172800  IN  NS  i.gtld-servers.net.
com.            172800  IN  NS  j.gtld-servers.net.
com.            172800  IN  NS  k.gtld-servers.net.
com.            172800  IN  NS  l.gtld-servers.net.
com.            172800  IN  NS  m.gtld-servers.net.
com.            86400   IN  DS  30909 8 2
    E2D3C916F6DEEAC73294E8268FB5885044A833FC5459588F4A9184CF C41A5766
com.            86400   IN  RRSIG   DS 8 1 86400 20190811170000 20190729160000 59944 .
    KXPRdZspxd6hZYRFx3cj7Yp3d6HDzOG5CmoK46ZrrlKnZkCYMPKzyFQ2
    15pA+jZ37MbQbhe6+S+C4AHWqv95DDsue85ha3ZmWGhnJxcLnDaL5Twp
    Z/W/a+1cTHhhbMZua1riw74mqvzRAF1kVerj7jrvWnOAOZCh69Dr4AFJ
    gRN4MAn+wCZDmPQCtkcGVJ9vyNV7Xra45B4ISqEo0xi8CXewp9cc+aW5
    TSjFRhj1RM9d3k+3Mrq6AAV8dVgWofYTg6Ihph/SfoIx4TrTrEbgfdsv
    MvuLPXvK6Y7oSh5WknbFduw7HQdo1jH3/QR54FORswBJT8VmYD7Zii88 tAjbRQ==
;; Received 1170 bytes from 192.58.128.30#53(j.root-servers.net) in 2 ms

google.com.     172800  IN  NS  ns2.google.com.
google.com.     172800  IN  NS  ns1.google.com.
google.com.     172800  IN  NS  ns3.google.com.
google.com.     172800  IN  NS  ns4.google.com.
    CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN NSEC3 1 1 0 -
    CK0Q1GIN43N1ARRC9OSM6QPQR81H5M9A NS SOA RRSIG DNSKEY NSEC3PARAM
    CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN RRSIG NSEC3 8 2
    86400 20190803044434 20190727033434 17708 com.
    rMmiNL7bYvJpB3Bc+WnqS2iiczm2PwxBvJcl7SL/vcTj88GsxM1ycTSV
    PsHZHxfrv1dv2C5BCSZ+mzeVBu8upLoeraQy+UVf3VXyt3i3rNGzcXYV
    8HSrHcXrRoAJopFim3Ge1xdZ+uERg3cTIcN2tJxxkCeqt/EcUTqtQl8t EAc=
    S84BDVKNH5AGDSI7F5J0O3NPRHU0G7JQ.com. 86400 IN NSEC3 1 1 0 -
    S84CFH3A62N0FJPC5D9IJ2VJR71OGLV5 NS DS RRSIG
    S84BDVKNH5AGDSI7F5J0O3NPRHU0G7JQ.com. 86400 IN RRSIG NSEC3
    8 2 86400 20190804045723 20190728034723 17708 com.
    jypPsaWVop9rzuf70CFYyiK0hliiJ+YYtkjgb3HVj9ICc57kLmv9DkvG
    DddF5GBQpqNEakzyJtya179MAdDT7RhJB4XfmY6fu5I5QTeIjchfP5wt
    7gU1AL7cqTmBAo2RWu62vtUytV09+O3KGFq5O+Cwr11dSTfq1yYyw6YW cMI=
;; Received 772 bytes from 192.41.162.30#53(l.gtld-servers.net) in 2 ms

google.com.     300 IN  A   172.217.7.14
;; Received 55 bytes from 216.239.32.10#53(ns1.google.com) in 13 ms

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

תחומים

אזור ציבורי

אזור ציבורי גלוי באינטרנט. אתם יכולים ליצור רשומות DNS באזור ציבורי כדי לפרסם את השירות שלכם באינטרנט. לדוגמה, אפשר ליצור רשומת A באזור ציבורי בשם example.com. (שימו לב לנקודה בסוף) עבור האתר הציבורי www.example.com..

אזור פרטי

אזור פרטי הוא כל אזור שלא ניתן לשלוח אליו שאילתות באינטרנט הציבורי.

אזור משנה עם הרשאת גישה

מערכת ה-DNS מאפשרת לבעלים של אזור להשתמש ברשומות NS כדי להקצות תת-דומיין לשרת שמות אחר. מערכות לפתרון שמות פועלות לפי הרשומות האלה ושולחות שאילתות לגבי שם תת-הדומיין לשרת השמות של היעד שצוין בהעברה.

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

DNS עם אופק מפוצל

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

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

רשומות

רשומת A היא מיפוי בין משאב DNS לבין שם דומיין. לכל רשומת DNS יש סוג (שם ומספר), זמן תפוגה (TTL) ונתונים ספציפיים לסוג.

אלה כמה מסוגי הרשומות הנפוצים:

  • A: רשומת כתובת שממפה שמות מארחים לכתובות ה-IPv4 שלהם.
  • AAAA: רשומת כתובת IPv6, שממפה שמות מארחים לכתובת ה-IPv6 שלהם.
  • CNAME: רשומת שם קנוני שמציינת שמות חלופיים.
  • MX: רשומת חילופי דואר, שמשמשת לניתוב בקשות לשרתי דואר.
  • NS: רשומת שרת שמות, שמקצה תחום DNS לשרת מוסמך.
  • PTR: רשומת מצביע, שמגדירה שם שמשויך לכתובת IP.
  • SOA: תחילת הסמכות, משמש לציון שרת השמות הראשי והאדמין שאחראי על אזור. לכל אזור שמארח שרת DNS צריכה להיות רשומת SOA (תחילת הסמכות). אפשר לשנות את הרשומה לפי הצורך (לדוגמה, אפשר לשנות את המספר הסידורי למספר שרירותי כדי לתמוך בניהול גרסאות לפי תאריכים).

קבוצות רשומות

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

זוהי דוגמה לקבוצת רשומות עם יותר מרשומה אחת בעלת אותו שם וסוג:

שם DNS סוג TTL (בשניות) נתונים
db-01.dev.gcp.example.com A 50 10.128.1.35
db-01.dev.gcp.example.com A 50 10.128.1.10

במאמר סוגים נתמכים של רשומות DNS מפורטת רשימה של סוגי הרשומות שנתמכים ב-Cloud DNS.

הענקת גישה לתתי-דומיינים

כשיוצרים רשומות, חשוב לוודא שרשומות ה-NS וה-SOA זהות. רשומות NS ו-SOA שמתנגשות יכולות לגרום לכך שחלק מהמנתחים ידחו את ההעברה כלא תקפה ויסרבו לשמור במטמון תשובות לשאילתות.NO DATA התוצאה יכולה להיות מספר גדול ולא צפוי של שאילתות שמופנות לאזורים ציבוריים מנוהלים על ידי רכיבי resolver רקורסיביים של צד שלישי, כשרכיבי resolver שולחים שאילתות לאזורים ציבוריים מנוהלים לגבי רשומות שלא קיימות.

לדוגמה, נניח שיש שני תת-דומיינים, example.com ו-subdomain.example.com ב-Cloud DNS. רשומות ה-NS ו-SOA של subdomain.example.com לא תואמות. אף אחד מהאזורים לא מכיל רשומות AAAA. כשחלק משרתי ה-DNS הרקורסיביים של צד שלישי שולחים שאילתה subdomain.example.com לגבי רשומת AAAA ומקבלים תגובה NO DATA, אם השרתים מזהים את ההקצאה הלא חוקית של subdomain.example.com, הם מסרבים לשמור במטמון את אי-הקיום של רשומות AAAA באזור הזה. התוצאה היא ניסיון חוזר של השאילתות. הם שולחים שאילתות לכל שרתי השמות של Cloud DNS, בתורם, כדי לקבל את המידע הזה.

רשם

רשם שמות דומיינים הוא ארגון שמנהל את ההזמנה של שמות דומיינים באינטרנט לאזורים ציבוריים. רשם חייב להיות מוסמך על ידי מרשם של דומיין גנרי ברמה העליונה (gTLD) או מרשם של דומיין ברמה העליונה עם קוד מדינה (ccTLD). כך שרתי שמות ברמה גבוהה יותר מסכימים על רשומת SOA ומעדכנים את רשומות NS של האזור כדי להפנות בקשות לשרתי שמות עם מטמון או לשרתי שמות מוסמכים.

מספר סידורי של SOA

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

עם זאת, אפשר לשנות את המספר הסידורי של רשומת SOA למספר שרירותי, כולל תאריך בפורמט ISO 8601, כמומלץ ב-RFC 1912.

DNSSEC

תוסף האבטחה של DNS‏ (DNSSEC) מטפל בפגיעויות בנתוני DNS. DNSSEC הוא חבילה של מפרטים של IETF שמספקת אימות של נתוני DNS, אימות של אי-קיום ושלמות נתונים ללקוחות DNS (מקודדים). בקיצור, DNSSEC מספק לתוכנה דרך לאמת את המקור של נתוני DNS ולוודא שהם לא שונו במהלך ההעברה.

מידע נוסף על DNSSEC זמין ב-RFC 4033.

רשימה של מונחי DNS כלליים מופיעה ב-RFC 7719.

המאמרים הבאים