הגדרות DNS מתקדמות במחשבי Client

המאמר הזה הוא חלק מסדרת המאמרים בנושא DNS – Domain Name system והוא ינסה להתמקד בהסברה של "פנייה מקוצרת למחשב" – דהיינו, פנייה באמצעות שם בלבד (netbios name), ולא ב FQDN. למשל :

\\host1

במקום ה FQDN

\\host1.mydomain.local

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

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

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

נניח שאני – Host1 רוצה להתחבר למחשב אחר ברשת. אני מחזיק בשם המחשב אליו אני רוצה להגיע – host2 , אבל כדי לתקשר אני צריך כמובן את ה IP (Layer3). ולכן, אבצע שאילתות או חיפושים כדי לדעת מה כתוב ה IP.

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

  • קובץ ה hosts. מין cache פנימי שקיים במחשבים. מדובר בקובץ טקסט פשוט שכל אחד יכול לערוך.
  • ה cache הפנימי בשירות הDNS Client

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

המקום השלישי הוא cache פנימי של ה netbios (פרוטוקול). אפשר לחפש מידע על ה cache בעזרת פקודת ה nbtstat. רלוונטי גם לסביבת Workgroup, לא רק לסביבת דומיין.

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

השיטה החמישית – שימוש ב multicast באמצעות פרוטוקול LLMNR שבדרך כלל נותן תשובה ב IPV6. אם רוצים לבטל את הפרוטוקול, הדרך הטובה ביותר לעשות את זה, היא לשים את הערך הבא ב Group Policy על enabled  :

Computer Configuration\Administrative Templates\Network\DNS Client\Turn off Multicast Name Resolution

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

wins

המקום השביעי בו המחשב יחפש הוא קובץ ה lmhost , עוד cache פנימי שנמצא בתוך כ plain text.

אם כל הניסיונות האלו כשלו, אפשר לנסות לתקשר ישירות דרך IP. . .

עד פה סקירה קצרה על תהליך ה resolution . מי שרוצה להמשיך ללמוד מעט יותר לעומק, מוזמן לעשות את זה בסרטון המעולה הבא :

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

עכשיו, מכיוון שהפוסט עוסק בנושא resolving דרך שרת DNS בסביבות דומיין, לצורך ההדגמה אני מבטל את השימוש בפרוטוקול ה netbios ואת השימוש בפרוטוקל ה LLMNR (לגבי שניהם, הובהר לעיל איך מבטלים את השימוש בהם). כמו כן, לאורך כל ההדגמה לא יהיה שימוש בשום cache (dns client או אחד מקבצי ה hosts), כמובן שלא יהיה שום שימוש בשרת WINS.

הדומיין שעליו אדגים הכל נקראtest.local

בסביבת דומיין, באופן דיפולטיבי, נרשם בכל מחשב שם הדומיין אליו הוא משויך, שמאפשר לו לפנות אל המחשב אחר באותו הדומיין רק לפי השם (netbios), ולא לפי ה FQDN (*עיינו בדוגמה שפסקהה ראשונה במאמר לצורך לרענון). אפשר לראות את ההוספה הזו פה :

netbios

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

dns suffix

ההגדרה המשלימה של ההגדרה הזו, היא ההגדרה : register this connection's addresses in dns –

register

פשוט אומר באופן פשוט, שה Client ירשום את הגררות כרטיס הרשת הרלוונטיות, בשרת ה DNS.

אם מסכמים באופן בסיסי את ההגדרות עד פה, אם למשל אתן פינג רק לשם מחשב, ואקבל את התשובה ב FQDN, זה בגלל שהשאילתא יצאה אחרי append (הוספה) של שם הדומיין לשם המחשב. הנה דוגמה כאשר אני נותן פינג ל netbios name של test1 :

ping2test1

התשובה ב FQDN מראה שהיה שימוש ב zone שהוא test.local שמוגדר בשרת ה DNS. אני כתבתי אמנם בפינג רק את ה netbios name (test1), אבל מאוחרי הקלעים היה append (הוספה) של test.local לשם הזה, כדי לחפש את ה zone הנכון באופן הכי מהיר בשרת ה DNS.

הנה מה שקורה כאשר עשיתי Pause לשרת ה DNS, ודווקא כן איפשרתי את ה LLMNR, זו לא תשובה DNS-ית

LLMNR reuest

והנה מה שקורה כאשר ביטלתי את ה LLMNR, ואיפשרתי שימוש בפרוטוקול netbios, גם זו לא תשובה DNS-ית

netbios protocolאבל זה היה רק לצורך ההדגמה. נבטל את הפרוטוקולים netbios ו LLMNR, ואחזיר לתפקוד את שרת ה DNS.

נסתכל על הגדרות נוספות בכרטיס הרשת :

sub

נניח שאנחנו במחשב sub-host שנמצא בסאב דומיין שנקרא sub.test.local. משתמש במחשב הזה רוצה להגיע באמצעות ה netbios name למחשב test1 שנמצא בדומיין test.local. עכשיו למשתמש הממוצע בסאב זה לא מובן שמדובר בשני דומיינים שונים. הוא חושב שמדובר אולי במחשב נוסף שנמצא "ברשת שלו". אז, ההגדרה הזו, של "append parent suffixes of the primary dns suffix", גורמת לכך, שאם המשתמש לא מצא ב zone שבדומיין שלו – sub.test.local את המחשב test1, אז הוא יבצע חיפוש ב zone של האב שהוא test.local, ושם כמובן הוא יקבל מענה ב FQDN של test1.test.local. אם ה checkbox הזה לא היה מסומן המחשב בסאב דומיין לא היה מצליח להגיע באמצעות שאילתת DNS למחשב test1, אלא באמצעות פרוטוקולים אחרים, או באמצעות IP.

הגדרה נוספת :

append

ההגדרה הזן דורסת כל הגדרה אחרת (כולל הגדרות שיגיעו אחריה), והיא אומרת כך : "בפניית netbios תבדוק ב suffix של הדומיינים הבאים (לפי הסדר) :"

זה גם יכול להיות שימושי בסיטואציה שבה נחבר את כרטיס הרשת לדומיין אחר לגמרי (שהוא לא (test.local, אליו לא משויכים, נניח microsoft.com. ב computer settings נמצא כרגיל את הדומיין test.local, אבל אם נרצה לקבל מענה לשאילתות netbios למחשבים שנמצאים בדומיין של microsoft.com או cola.coom או מה שלא הוגדר בכרטיס הרשת נשתמש במה שהוגדר ברשימה . . .

זאת אומרת, שאם אבצע פניית Netbios למחשב a, אז קודם כל יחפשו אותו בדומיין cola.com, ואם לא נמצא שם אז microsoft.com וכו'.

למה זה נצרך באופן יותר פרקטי?

נניח שאני משתמש במחשב שבדומיין test.local, ואני רוצה לבצע פניית netbios למחשב sub-host שנמצא בסאב דומיין sub.test.local. הדרך לעשות את זה, זה  אם נגדיר ברשימה של כרטיס הרשת במחשבי הדומיין test.local, את הדומיין sub.test.local.

*כמובן שיש גם אפשרות אחרת – להגדיר ידנית או DHCP במחשבי הדומיין test.local את ה DNS של הסאב דומיין, אבל אני לא יודע עד כמה זה נהוג.

ושתי הגדרות אחרונות (מודגשות בצהוב) :

dns connection

ההגדרה "dns suffix for this connection", נראת קצת מיותרת, היא בסך הכל נותנת את האפשרות להשתמש ב suffix מסוים כדי ליישם פנייה ב netbios name. למשל, אם אני בדומיין test.local, ואני רוצה להגיע לפי netbios name למחשב host3 שנמצא בדומיין sub.test.local. אם זה יוגדר שם.

 נשמע מוכר ? נכון! זה בדיוק מה שהיה בסעיף הקודם. אז מה הפונקציונאליות שמוסיפה ההגדרה הזו ? אז התשובה לדעתי היא זו :

ה checkbox האחרון – use this connection's dns suffix in dns registration –  מוסיף את היכולת הנוספות. הוא אומר בסך הכל שאם הוכנס שם דומיין אחר ב"dns suffix for this connection", אז גם שם – בדומיין הנוסף –  תבצע הרשמה של שם המחשב בשרת ה DNS.

רציתי להשתמש בדוגמה שאני מחבר את כרטיס הרשת שלי לרשת אחרת לגמרי (למשל microsoft.com) בלי להצטרף לדומיין (לכן אני עדיין test.local), ומעדכן את ה zone הראשי שם בשם שלי וב IP, אבל זו פשוט סיטואציה הזויה מבחינת אבטחת המידע, ואין מצב שדבר כזה קורה.

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

נניח שבשרת ה DNS של הדומיין test.local פתחו לצרכי אדמיניסטרציה עוד Forward zone שנקרא computers.zzz. למי שלא בקיא, חשוב להדגיש שלא מדובר בדומיין כמובן, אלא רק ב zone שיוצר בעצם namespace ("מרחב שמות") חדש :

computers

אז בתוך CLIENT,  אם בהגדרת ה "dns suffix for this connection" מצורף ה computers.zzz, ואם בנוסף גם סימנו את ה checkbox של "use this connection's dns suffix in dns registration", אז אז, המחשב ירשום את עצמו בשרת ה DNS ב zone של computers.zzz.

שאלה קטנה שצריכה לעלות עכשיו היא, אם המחשב רשום בשני zones, כאשר מחשב אחר יפנה אליו ב netbios name, איזה FQDN הוא יקבל – האם זה שחלקו  ה test.local או את  ה computers.zzz ?

אם מחשב test1 רשום עכשיו גם ב zone של test.local וגם ב zone של computers.zzz, כנראה כאשר נפנה אליו בפניית netbios, התשובה תהיה לפי סדר ה zones בשרת, ה zone הדיפולטיבי הוא זה שמכיל את שם הדומיין, לכן ה FQDN שנקבל בתשובה הוא test1.test.local

כתיבת תגובה