امیرحسین کریم پور
مدیر ارشد توسینسو و متخصص سرویس های مایکروسافت

DC Locator چیست و چگونه در اکتیودایرکتوری کار می کند؟

امروز در این مقاله قصد داریم به صورت مفصل درباره اینکه فرآیند Domain Controller Locator یا به اختصار DC Locator چیست و چگونه کار می کند صحبت کنیم. قبل از اینکه به سراغ تشریح مکانیزم کاری DC Locator برویم بایستی ابتدا بدانیم که اصلا DC Locator چیست و در چه سطحی کار می کند و برای چه کاری ما آنرا لازم داریم. در ابتدا بهتر است کمی زمینه سازی در خصوص تشریح این مبحث کنیم تا درک خوبی از فرآیند کاری DC Locator پیدا کنید. همانطور که میدانید کاربران دامین برای اینکه بتوانند از منابع دامین Active Directory استفاده کنند ابتدا باید توسط Domain Controller احرازهویت شوند اما فرآیند احرازهویت سیستم کلاینت بایستی بصورت سریعتر و بهینه تر صورت بگیرد. موضوع اصلی این مقاله ما هم دقیقا همین است. پس تا انتهای مقاله همراه ما باشید.

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران

خب بصورت خلاصه فرآیندی که سیستم کلاینت یا Application یا بعبارتی یک سرویس نصب شده روی سیستم کلاینت طی می کند تا با نزدیک ترین Domain Controller موجود در دامین اکتیودایرکتوری ارتباط برقرار کند DC Locator نامیده می شود. DC Locator الگوریتمی است که در پس زمینه سرویس Net Logon در سیستم کلاینت کار می کند و ارتباط مستقیمی با پیکربندی های انجام شده در DNS resolution و AD Sites and Subnets برای شناسایی نزدیک ترین دامین کنترلر دارد. DC Locator به دلایل زیر فرآیندی بسیار حیاتی می باشد :

  1. Site ها در اکتیودایرکتوری غالبا با لینک های کم سرعت در ارتباط هستند و این باعث کندی در ارتباطات با اکتیودایرکتوری می شود.
  2. DC Locator تاثیرات ناشی از در مدار نبودن دامین کنترلر در شبکه دارد به حداقل می رساند.
  3. DC Locator ترافیک غیر ضروری شبکه را با شناسایی و پیدا کردن نزدیک ترین دامین کنترلر در بین Site ها کاهش می دهد و در حقیقت هدف اصلی DC Locator همین است.

در تصویر زیر فرآیند کلی و خلاصه ای از مکانیزم کاری DC Locator را میتوانید مشاهده کنید.

وب سایت توسینسو

ما در این مقاله مرحله به مرحله و با ذکر جزئیات مکانیزم کاری DC Locator را به همراه دو سناریو برای شما دوستان تشریح می کنیم.

1. در اولین مرحله فرآیند DNS discovery انجام می شود. سرویس Net Logon در سیستم کلاینت (که در واقع دنبال مکان یابی دامین کنترلر است) یک DNS query برای Resolve کردن SRV رکورد ldap.-tcp.dc.-msdcs.tosinso.com- می کند (آدرس DNS Server در تنظیمات کارت شبکه کلاینت ست شده است).

2. DNS Server در پاسخ به کلاینت لیستی از SRV رکورد های ثبت شده در خودش را که با درخواست داده شده تطابق دارد بر میگرداند (رکورد هایی که شامل Domain Controller های موجود در اکتیودایرکتوری است). اگر رکوردی پیدا نشد فرآیند مکان یابی دامین کنترلر با مشکل مواجه می شود.

3. سیستم کلاینت به لیست SRV Record ها نگاه می کند و SRV رکوردی که پایین ترین اولویت یا Priority را دارد را انتخاب می کند. اگر Target Host ها یا بعبارتی DC ها اولویت یکسانی داشتند ، کلاینت SRV رکورد را با توجه به weight یا وزن آن انتخاب می کند. الگوریتم های انتخاب آن در RFC 2782 و RFC2052 توضیح داده شده است.

4. حالا که کلاینت دامین کنترلر مورد نظر را مکان یابی کرد پس باید آدرس IP آنرا بداند تا بتواند با آن ارتباط برقرار کند. برای این کار یک DNS query برای Resolve کردن A record به DNS Server میفرستد و آدرس IP دامین کنترلر مد نظر را بدست می آورد.

5. DNS server از داخل Zone خود A Record آن دامین کنترلر را چک می کند و در پاسخ ، آدرس IP دامین کنترلر را تحویل کلاینت می دهد.

6. حالا که کلاینت ما آدرس IP دامین کنترلر را میداند یک "LDAP “Ping به منظور شناسایی و بدست آوردن مشخصات دامین کنترلر به دامین کنترلر ارسال می کند. "LDAP “Ping به Connectionless LDAP نیز معروف است و بدیهی است که با پروتکل UDP دیتاگرام ها را ارسال می کند.

7. بعد از اینکه هر پکت به دامین کنترلر ارسال شد کلاینت منتظر پاسخ از طرف دامین کنترلر میماند تا پاسخش را دریافت کند و اگر کلاینت پاسخی دریافت نکرد درخواست را به دامین کنترلر بعدی ارسال می کند. این فرآیند آنقدر ادامه پیدا می کند تا بالاخره کلاینت یک پاسخ از دامین کنترلر دریافت کند. کلاینت برای اینکار حتی به تمام دامین کنترلر ها برای دریافت پاسخ پکت هایش را میفرستد.

8. "LDAP “Ping یک LDAP rootDSE search به دامین کنترلر است که هدفش پیدا کردن Attribute ای به نام Net Logon است. سرویس Net Logon به آدرس IP کلاینت در جدول Subnet ای که در آن قرار دارد نگاه می کند و آدرس IP دامین کنترلری که نزدیک ترین فاصله را با کلاینت دارد پیدا می کند. دامین کنترلر کوئری را بررسی می کند و نتیجه Net Logon را به کلاینت برمیگرداند. پاسخ معمولا به شکل NETLOGON-SAM-LOGON-RESPONSE-EX داده می شود :

1. اسم Site که کلاینت در آن واقع شده است. یا بعبارتی Site ای که نزدیک ترین فاصله را به آدرس IP کلاینت دارد.

2. اسم Site ای که دامین کنترلر در آن واقع شده است.

3. فلگ DSClosestFlag که مقدارش یا یک است یا صفر نشان دهنده این است که دامین کنترلر فعلی به Site ای کلاینت در آن قرار دارد نزدیک است یا خیر.

9. پس از اینکه کلاینت پاسخ را از دامین کنترلر دریافت کرد کلاینت Capability ها یا صلاحیت ها را تایید اعتبار می کند.

10. اگر این Capability ها با نیازمندی هایی که توسط الگوریتم DC Locator بوسیله Invoker در Entry مشخص شده بود ناسازگاری داشت آنوقت کلاینت باید دامین کنترلر دیگری را از لیست SRV Record هایی که در مرحله سوم بدست آورده بود انتخاب کند.

  • نکته : ناسازگاری در این جا به این خاطر بوجود می آید که کلاینت از KDC درخواست می کند اما دامین کنترلر نمی گوید که KDC وجود دارد یا خیر ، بعبارتی کلاینت از دامین کنترلری که فرض می کند R/W DC است درخواست می کند اما دامین کنترلر Read Only است.

کلاینت همچنین میتواند تصمیم بگیرد که دامین کنترلری فعلی را انتخاب کند یا نکند که در این صورت دو سناریو مطرح می شود.سناریوی یک : کلاینت و دامین کنترلر انتخابی در یک AD Site اکتیودایرکتوری قرار دارند یا اینکه در نزدیکترین Site به کلاینت قرار دارد که توسط فلگ DSClosestFlag با مقدار 1 گزارش می شود. در این سناریو موارد زیر اتفاق می افتد :

1. دامین کنترلر انتخابی توسط کلاینت به کلاینت اسم AD Site ای که کلاینت در آن قرار دارد را اعلام می کند. به تصویر زیر دقت کنید.

وب سایت توسینسو

2. سیستم کلاینت اسم AD Site ای که در آن قرار دارد را به همراه نام دامین کنترلری که از آن Query خواهد گرفت را Cache می کند. این دامین کنترلر تا زمانی که در دسترس است توسط کلاینت مورد استفاده قرار خواهد گرفت. توجه کنید که سیستم کلاینت لازم نیست که فرآیند مکان یابی دامین کنترلر را هر زمان که خواست با آن ارتباط برقرار کند انجام دهد.

سناریوی دو : کلاینت و دامین کنترلر انتخابی در یک AD Site اکتیودایرکتوری قرار ندارند. در این صورت موارد زیر اتفاق می افتد :

1. دامین کنترلر انتخابی توسط کلاینت به کلاینت اسم AD Site ای که کلاینت در آن قرار دارد را اعلام می کند و به کلاینت اعلام می کند که در نزدیک ترین AD Site نسبت به تو قرار ندارم. این مورد را با توضیحات زیر به کلاینت می گوید :

  • اعلام کردن نام AD Site که خودش در آن قرار دارد.
  • اعلام کردن نام AD Site که کلاینت در آن قرار دارد.
  • اعلام کردن صفر بودن مقدار فلگ DSClosestFlag
  • و سایر اطلاعاتی که دامین کنترلر درباره خودش می گوید.

نکته : اطلاعات Site ای که دامین کنترلر در آن قرار دارد در Configuration Partition دیتابیس اکتیودایرکتوری ذخیره می شود و این اطلاعات بین تمامی دامین کنترلر ها در Forest اکتیودایرکتوری Replicate می شود. دامین کنترلر AD Site که در سیستم کلاینت در آن قرار دارد با استفاده از Subnet Object موجود در Site Container متوجه می شود. هر Subnet Object دارای یک siteObject property می باشد که به siteObject لینک(Link) شده است. مقدار siteObject property برابر Distinguished name آن siteObject است. این Link دامین کنترلر را قادر میسازد تا آدرس IP کلاینت را که در AD Site مشخصی قرار دارد شناسایی کند.

2. کلاینت یک DNS query با Site مشخصی به LDAP.-TCP.sitename.-sites.domainname- ارسال می کند و از دامین کنترلری که قبلا پاسخش را داده بود استفاده می کند.

3. DNS Server در پاسخ لیستی از SRV رکورد های ثبت شده در خودش را که لیستی از Domain Controller های اکتیودایرکتوری در آن AD Site را شامل می شود به کلاینت می دهد.

4. سیستم کلاینت به لیست SRV Record ها نگاه می کند و یک دامین کنترلر را با توجه به Priority و Weight مشخص شده در Record انتخاب می کند. بعد از انتخاب دامین کنترلر از DNS Server آدرس IP آنرا Query میگیرد.

5. DNS server از داخل Zone خود A Record آن دامین کنترلر را چک می کند و در پاسخ ، آدرس IP دامین کنترلر را تحویل کلاینت می دهد.

6. سیستم کلاینت با دامین کنترلر مربوطه ارتباط برقرار می کند. به تصویر زیر دقت کنید :

وب سایت توسینسو

توجه 1 : اگر سیستم کلاینت نتوانست با Domain Controller انتخابی ارتباط برقرار کند کلاینت سعی می کند با توجه به Priority و Weight اختصاص داده شده در SRV Record با دامین کنترلر دیگری ارتباط برقرار کند.

توجه 2 : اگر دامین همان دامینی باشد که سیستم کلاینت به آن Join شده است و کلاینت بصورت فیزیکی تا زمان آخرین Query به Site دیگری منتقل نشده است ، اسم Site ثبت شده در تنظیمات رجیستری همان Site ای است که کلاینت در آن قرار دارد. این اسم در کلید رجیستری زیر ذخیره شده است :

HKLM\System\CurrentControlSet\Services\Netlogon\Parameters\DynamicSiteName

توجه 3 : به هیچ وجه مقدار DynamicSiteName که در بالا به آن اشاره کردیم را تغییر ندهید. برای override کردن این اسم باید مقدار SiteName را تغییر بدهید. وقتی به این Entry مقدار می دهید مقدار DynamicSiteName نادیده گرفته می شود. این Entry در مسیر زیر در رجیستری است :

HKLM\SYSTEM\CurrentControlSet\Services\NetLogon\Parameters\SiteName

با تشریح مکانیزم کاری DC Locator دانستیم که سیستم کلاینت بصورت هوشمند نزدیک ترین Domain Controller درAD Site را مکان یابی کند. اگر چه این فرآیند زمانی درست و بدون مشکل کار می کند که AD Site and Subnets بصورت صحیح نگهداری شود. بعد از اینکه کلاینت ارتباطاش را با موفقیت با دامین کنترلر برقرار کرد حالا کاربر میتواند فرآیند Logon و وارد کردن Credentials را برای احرازهویت شدن انجام دهد.

اگر سیستم کلاینت عضو دامین به دامین کنترلر درخواست احرازهویت دهد و این در حالی باشد که تمامی Domain Controller ها در آن AD Site خاموش باشد آنگاه DC Locator به ناچار درخواست کلاینت را به یک دامین کنترلر موجود در Site دیگر ارسال می کند. مکان این Domain Controller در حافظه Cache سیستم کلاینت نگهداری می شود. طول عمر Cache در Entry ای به نام CloseSiteTimeout در رجیستری ذخیره می شود. به علاوه ، دامین کنترلر برای احرازهویت کردن سیستم کلاینت از یک کانال امن یا Secure Channel استفاده می کند.

زمانی که درخواست های پی در پی برای احرازهویت به دامین کنترلر های موجود در Site های مختلف ارسال شد طول عمر حافظه Cache و طول عمر Secure Channel اطلاعات کمکی برای مکان دامین کنترلر در نزدیک ترین Site هستند. اگر Domain Controller که در حافظه Cache سیستم کلاینت ذخیره شده در Site ای در نزدیکی سیستم کلاینت نباشد آنوقت سرویس Net Logon تلاش می کند تا نزدیک ترین دامین کنترلر را زمانی که یکی از این موارد زیر اتفاق بیفتد پیدا کند :

  • فرآیند Interactive logon از Pass-through Authentication در Secure Channel استفاده کند.
  • مقدار CloseSiteTimeout در رجیستری تا زمان آخرین تلاش سپری شده باشد و یا تلاش های دیگر از Secure Channel استفاده کند ( برای مثال Pass-through Authentication یا Network Logon )

بدین ترتیب تلاش های Net Logon برای پیدا کردن نزدیک ترین Domain Controller تنها بر اساس تقاضا یا بعبارتی در صورت لزوم صورت میگیرد. مقدار پیش فرض CloseSiteTimeout در رجیستری 15 دقیقه است و حداکثر تا 49 روز میتواند مقدار دهی شود و بصورت حداقل 60 ثانیه. اگر مقدار این Entry را بزرگتر از مقداری تنظیم کنید که میتواند آنرا بپذیرد آنوقت کلاینت تلاش نمی کند تا دامین کنترلر نزدیک به خودش را پیدا کند زمانیکه دامین کنترلری در هنگام Startup در دسترسش قرار ندارد. و اگر مقدار این Entry را کمتر از 60 ثانیه تنظیم کنید ترافیک Secure Channel در زمان تلاش های Discovery برای پیدا کردن دامین کنترلر بدون نیاز کاهش پیدا می کند. امیدوارم مورد توجه شما قرار گرفته باشد.

نویسنده : امیرحسین کریم پور

منبع : جزیره سرویس های شبکه مایکروسافت وب سایت توسینسو

هرگونه نشر و کپی برداری بدون ذکر منبع و نام نویسنده دارای اشکال اخلاقی میباشد


امیرحسین کریم پور
امیرحسین کریم پور

مدیر ارشد توسینسو و متخصص سرویس های مایکروسافت

امیرحسین کریم پور ، مدیر ارشد توسینسو ، متخصص شبکه ، تخصص در حوزه سیستم عامل های کلاینت و سرور مایکروسافت و سرویس های مربوطه ، سیستم عامل لینوکس و... ، سابقه کار با سازمان ها و شرکت های مختلف در زمینه سرویس های مایکروسافت در قالب پروژه ، مشاوره و آموزش. علاقه مند به حوزه امنیت اطلاعات و تست نفوذ سنجی

نظرات