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

کاملترین آموزش رفع مشکل رپلیکیشن ( Replication ) اکتیودایرکتوری

چگونه مشکل Replication اکتیودایرکتوری را حل کنیم؟ مشکلات مربوط به Replication در اکتیودایرکتوری چگونه حل می شوند؟  Active Directory بدون شک قلب تپنده هر شبکه محسوب می شود و دانستن نحوه Troubleshooting آن بر ادمین های شبکه های مایکروسافتی ضروری است. یکی از مشکلات بسیار رایجی که برای اکتیودایرکتوری بوجود می آید مشکلات Replication آن در بین Domain Controller ها است.

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

در این مطلب میخواهیم نحوه برطرف کردن مشکلات Replication در اکتیودایرکتوری را به شما عزیزان آموزش دهیم. دستورات و CMDLET های زیادی برای رفع مشکلات اکتیودایرکتوری وجود دارد اما یکی از مهم ترین و کاربردی ترین دستوراتی که برای برطرف کردن مشکلات Replication در اکتیودایرکتوری بکار برده می شود دستور Repadmin.exe است. این دستور در سرور های اکتیودایرکتوری موجود می باشد و در ابزار RSAT یا Remote Server Administration Tools نیز میتوان از آن استفاده کرد.

نکته ای که در خصوص ابزار Repadmin.exe وجود دارد این است که پیشنهاد می شود که با کاربر های عضو گروه های Domain Administrator و Enterprise Administrator از این ابزار استفاده کنید. اگر چه میتوان با Delegate کردن Permission ها به یکسری کاربر ها مجوز مشاهده وضعیت Replication را به آن کاربر ها داد و مدیریت بخشی از Replication اکتیودایرکتوری را به آن کاربران واگذار کرد. در ادامه به معرفی چند مورد از دستورات و پارامتر های کاربردی ابزار Repadmin.exe برای مشاهده وضعیت Replication میپردازیم.

repadmin /replsummary /bydest

این دستور خلاصه وضعیت Replication را برای همه Domain Controller ها در شبکه بر اساس Replication Destination نمایش می دهد. این دستور دامین کنترلر های مبدا را نمایش نمی دهد. سوئیچ bydest مخفف کلمات By Destination می باشد.

repadmin /replsummary /bysrc

دستور فوق همانند دستور قبلی است با این تفاوت که دامین کنترلر های مقصد را نشان نمی دهد و تنها دامین کنترلر های مبدا را نشان می دهد. سوئیچ bysrc مخفف کلمات By Source می باشد.

repadmin /showrepl REBEL-SRV01.tosinso.com

دستور فوق Replication Partner های سرور SRV01 را نمایش می دهد. این دستور وضعیت Replication و تاریخ و زمان آخرین تلاش برای Sync کردن دیتابیس اکتیودایرکتوری را با این سرور نمایش می دهد.

repadmin /showrepl /errorsonly

دستور فوق Replication Partner هایی که هنگام تلاش برای Sync کردن دیتابیس AD با ارور مواجه شده اند را نمایش می دهد.

repadmin /showrepl /csv

با استفاده از دستور فوق می توانید خلاصه وضعیت Replication را در قالب CSV مشاهده کنید.

repadmin /syncall SRV01 dc=tosinso,dc=com

دستور فوق دامین کنترلر SRV01 را مبدا قرار داده و Domain Partition این سرور را با تمامی Domain Partition های دامین کنترلر هایی که Replication Partner این سرور هستند Synchronize می کند. و اگر مشکلی در فرآیند Replication وجود داشت در خروجی نمایش می دهد.

repadmin /queue

دستور فوق درخواست های Replication پردازش نشده ای که از سمت مقابل به دامین کنترلر شما داده شده است یا بعبارتی Inbound Replication Request ها نشان می دهد. اگر در خروجی این درخواست ها را مشاهده کردید به این معناست که تعداد تغییرات موجود در دیتابیس اکتیودایرکتوری زیاد بوده است و یا اینکه دامین کنترلر شما با کمبود منابع سخت افزاری مواجه است و یا تعداد Replication Partner ها زیاد هستند.

repadmin /showchanges SRV-DST 5c02bcaf-86d9-4bed-811e-d17a5cebf8bb dc=tosinso,dc=com

دستور فوق در خروجی تغییرات Replication ای را که بین دامین کنترلر های SRV-SRC و SRV-DST صورت نگرفته است را در خروجی نشان می دهد. در این مثال سرور SRV-DST سرور مقصد و SRV-SRC سرور مبدا می باشد. به خروجی دستور دقت کنید :

SRV-DST.tosinso.com
Building starting position from destination server SRV-DST.tosinso.com

Source Neighbor:
dc=tosinso,dc=com
==== INBOUND NEIGHBORS ======================================

dc=tosinso,dc=com
    Building7b\SRV-SRC via RPC
        DC object GUID: 5c02bcaf-86d9-4bed-811e-d17a5cebf8bb
        Address: 5c02bcaf-86d9-4bed-811e-d17a5cebf8bb._msdcs.tosinso.com
        DC invocationID: 064152bc-f8e8-404f-bd64-cdd9bb3958cb
        SYNC_ON_STARTUP DO_SCHEDULED_SYNCS WRITEABLE
        USNs: 296048/OU, 296048/PU
        Last attempt @ 2002-09-09 20:03:53 was successful.

Destination's up-to-date vector:
064152bc-f8e8-404f-bd64-cdd9bb3958cb @ USN 296163
fea22f1d-a456-4f70-aa06-bedbda29e7eb @ USN 338287

==== SOURCE DC: 5c02bcaf-86d9-4bed-811e-d17a5cebf8bb._msdcs.tosinso.com ====

No Changes


repadmin /replicate SRV01 SRV02 dc=tosinso,dc=com

دستور فوق بلافاصله Domain Partition بین دو دامین کنترلر SRV01 و SRV02 را Replicate می کند.

یکی از دستورات PowerShell برای جمع آوری خطا های بوجود آمده در فرآیند Replication اکتیودایرکتوری دستور Get-ADReplicationFailure است. به دستور زیر توجه کنید :

Get-ADReplicationFailure -Target SRV01

دستور فوق تمامی خطا هایی که هنگام انجام فرآیند Replication برای سرور SRV01 بوجود آمده است را جمع آوری کرده و درخروجی نشان می دهد. همچنین میتوان سرور های دیگری نیز به این دستور معرفی کرد و خطا های بوجود آمده در فرآیند Replication را برای چندین سرور مشاهده کرد :

Get-ADReplicationFailure -Target SRV01,SRV02


Get-ADReplicationFailure -Target "tosinso.com" -Scope Domain

دستور فوق تمامی دامین کنترلر های موجود در Domain را مورد هدف قرار می دهد و خطا های بوجود آمده در فرآیند Replication را برای تمامی دامین کنترلر ها نمایش می دهد.

Get-ADReplicationFailure -Target " tosinso.com" -Scope Forest

و حتی می توان دامین کنترلر های کل Forest را برای این کار مورد هدف قرار داد.

Get-ADReplicationConnection -Filter *

دستور فوق تمامی Replication Connection های دامین کنترلری که به آن لاگین کرده اید را در خروجی نمایش می دهد.

Get-ADReplicationConnection -Filter {ReplicateToDirectoryServer -eq "SRV01"}

دستور فوق Replication Connection های سرور مقصد یا SRV01 را در خروجی نشان می دهد.

Sync-ADObject -object “test” -source SRV01 -destination SRV02

با استفاده از دستور فوق ما میتوانیم تنها یک یوزر آبجکت از سرور SRV01 را به سرور مقصد یا SRV02 انتقال دهیم و Replicate کنیم.

در این مطلب با ادامه آموزش برطرف کردن مشکلات Active Directory Replication در خدمت شما عزیزان هستیم.دستور زیر تنها ارور ها و یا Failure هایی که هنگام انجام Replication با Replication Partner رخ داده را در خروجی نمایش می دهد.

repadmin /showrepl /errorsonly

برای مثال دامین کنترلر DC02 ما مشکلی برایش بوجود آمده و Down شده و فرآیند Replication انجام نشده است. به خروجی دستور زیر توجه کنید :

Repadmin: running command /showrepl against full DC dc1.ad.tosinso.com
Default-First-Site-Name\DC1
DSA Options: IS_GC
Site Options: (none)
DSA object GUID: a4d22a63-1918-492a-bcd6-7fe286941e72
DSA invocationID: a4d22a63-1918-492a-bcd6-7fe286941e72

==== INBOUND NEIGHBORS ======================================

DC=ad,DC=tosinso,DC=com
    Default-First-Site-Name\DC2 via RPC
        DSA object GUID: 57a1cfbc-88bb-41da-a1a6-f14f5c9df408
        Last attempt @ 2018-03-15 04:19:38 failed, result 8524 (0x214c):
            The DSA operation is unable to proceed because of a DNS lookup failure.
        1 consecutive failure(s).
        Last success @ 2018-03-14 07:52:08.

CN=Configuration,DC=ad,DC=tosinso,DC=com
    Default-First-Site-Name\DC2 via RPC
        DSA object GUID: 57a1cfbc-88bb-41da-a1a6-f14f5c9df408
        Last attempt @ 2018-03-15 04:19:38 failed, result 8524 (0x214c):
            The DSA operation is unable to proceed because of a DNS lookup failure.
        1 consecutive failure(s).
        Last success @ 2018-03-14 07:52:08.

CN=Schema,CN=Configuration,DC=ad,DC=tosinso,DC=com
    Default-First-Site-Name\DC2 via RPC
        DSA object GUID: 57a1cfbc-88bb-41da-a1a6-f14f5c9df408
        Last attempt @ 2018-03-15 04:19:38 failed, result 8524 (0x214c):
            The DSA operation is unable to proceed because of a DNS lookup failure.
        1 consecutive failure(s).
        Last success @ 2018-03-14 07:52:08.

DC=DomainDnsZones,DC=ad,DC=tosinso,DC=com
    Default-First-Site-Name\DC2 via RPC
        DSA object GUID: 57a1cfbc-88bb-41da-a1a6-f14f5c9df408
        Last attempt @ 2018-03-15 04:19:38 failed, result 8524 (0x214c):
            The DSA operation is unable to proceed because of a DNS lookup failure.
        1 consecutive failure(s).
        Last success @ 2018-03-14 07:52:08.

DC=ForestDnsZones,DC=ad,DC=tosinso,DC=com
    Default-First-Site-Name\DC2 via RPC
        DSA object GUID: 57a1cfbc-88bb-41da-a1a6-f14f5c9df408
        Last attempt @ 2018-03-15 04:19:38 failed, result 8524 (0x214c):
            The DSA operation is unable to proceed because of a DNS lookup failure.
        1 consecutive failure(s).
        Last success @ 2018-03-14 07:52:08.

Source: Default-First-Site-Name\DC2
******* 1 CONSECUTIVE FAILURES since 2018-03-14 07:52:08
Last error: 8524 (0x214c):
            The DSA operation is unable to proceed because of a DNS lookup failure.

همانطور که مشاهده کردید خروجی دستور اطلاعات خیلی زیادی به ما می دهد و ما نمیتوانیم براحتی آنرا بخوانیم. برای راحت تر خواندن خروجی دستور میتوانید خروجی را با دستور زیر به یک فایل متنی Export کنید. به دو مثال زیر توجه کنید :

repadmin /replsummary > c:\it\replsummary.txt
repadmin /showrepl > c:\it\showrepl.txt


Repadmin /showbackup *

دستور فوق تاریخ و زمان آخرین Backup ای که از دیتابیس اکتیودایرکتوری یا Naming Contexts (پارتیشن های اکتیودایرکتوری) گرفته شده را نشان می دهد.

repadmin /showoutcalls *

دستور فوق درخواست های Replication ای که از این دامین کنترلر به سمت سایر دامین کنترلر ها در شبکه فرستاده شده را نمایش می دهد.

repadmin /bridgeheads * /verbose

دستور فوق ساختار قرار گیری دامین کنترلر ها در Site ها و توپولوژی آن را در خروجی نمایش می دهد.

repadmin /istg * /verbose

دستور فوق توپولوژی Inter Site در ساختار اکتیودایرکتوری تان را نمایش می دهد.

حالا ما به معرفی رایج ترین خطا های بوجود آمده در فرآیند Replication بین دامین کنترلرها میپردازیم.

برطرف کردن خطای 2146893022 هنگام اجرای دستور Repadmin /showrepl :


زمانی که شما دستور زیر را روی دامین کنترلر خود اجرا می کنید ممکن است با خطای با شماره 2146893022 مواجه شوید :

Repadmin /showrepl DC02

به خروجی دستور توجه کنید :

آموزش برطرف کردن مشکلات Active Directory Replication - قسمت دوم



همانطور که در خروجی دستور مشاهده می کنید خطای Failed با شماره خطای 2146893022 رخ داده است. و مضمون خطا این است که Target Principle Name دامین کنترلر DC02 اشتباه هست. خب طبیعتا نمی توان از روی متن خطا حدس زد که مشکل از چیست. پس باید عمیق تر وارد این مسئله شویم و مشکل را برطرف کنیم. در ابتدا باید بررسی کنید که LDAP connectivity بین دو دامین کنترلر برقرار هست یا خیر. برای چک کردن این موضوع دستور زیر را اجرا کنید :

Repadmin /bind DC1

همانطور که در تصویر فوق مشاهده می کنید LDAP error دریافت کرده اید. حالا با دستور زیر فرآیند Replication را از دامین کنترلر DC2 آغاز کنید :

Repadmin /replicate dc2 dc1 "dc=root,dc=contoso,dc=com"

به احتمال زیاد باز هم ارور Principle name error را دریافت خواهید کرد. وقتی Event Viewer را در دامین کنترلر DC2 باز کنید ارور زیر را خواهید دید :

آموزش برطرف کردن مشکلات Active Directory Replication - قسمت دوم



متن هایلالیت شده به رنگ آبی در تصویر فوق دلیل بوجود آمدن این خطا را بیان می کند. این خطا بیان می کند که پسورد Computer account دامین کنترلر DC1 متفاوت است از پسوردی که در اکتیودایرکتوری برای DC1 در Key Distribution Center یا KDC ذخیره شده است. کار دیگری که باید انجام دهید این است مطمئن شوید که پسورد Computer account دامین کنترلر DC1 با پسورد Computer account دامین کنترلر DC2 یکسان است. برای انجام این کار در دامین کنترلر DC1 دو دستور زیر را اجرا کنید :

Repadmin /showobjmeta dc1 "cn=dc1,ou=domain controllers,
dc=root,dc=contoso,dc=com" > dc1objmeta1.txt


Repadmin /showobjmeta dc2 "cn=dc1,ou=domain controllers,
dc=root,dc=contoso,dc=com" > dc1objmeta2.txt

حالا فایل dc1objmeta1.txt و dc1objmeta2.txt را باز کنید و به تفاوت مقادیر Version پارامتر های زیر به دقت نگاه کنید :

dBCSPwd
UnicodePWD
NtPwdHistory
PwdLastSet
lmPwdHistory

فرض کنید در این مثال فایل dc1objmeta1.txt مقدار Version برابر با عدد 19 را نشان می دهد در حالیکه شماره Version در فایل dc1objmeta2.txt برابر عدد 11 است. بنابراین با مقایسه این دو عدد متوجه میشویم که دامین کنترلر DC2 پسورد قدیمی Computer account دامین کنترلر DC1 را در خود نگهداری می کند. از همین رو عملیات Kerberos به خاطر متفاوت بودن این دو عدد قادر به Decrypt کردن Service Ticket نمی باشد. KDC ای که روی DC2 در حال اجرا می باشد نمی تواند برای Kerberos مورد استفاده قرار گیرد و DC1 را احرازهویت کند زیرا DC2 اطلاعات پسورد قدیمی را در خود نگهداری کرده است. از همین رو باید DC2 را مجبور کنید که از KDC روی DC1 استفاده کند تا Replication انجام شود. برای انجام این کار ابتدا باید سرویس KDC را روی DC2 متوقف کنید :

Net stop kdc

حالا با اجرای دستور زیر فرآیند Replication از Root Partition آغاز می شود :

Repadmin /replicate dc2 dc1 "dc=root,dc=contoso,dc=com"

حالا برای اطمینان دو دستور Repadmin /showobjmeta را باید اجرا کنید تا مطمئن شوید که شماره Version ها با هم برابر هستند یا خیر. در نهایت با دستور زیر سرویس KDC را Start کنید :

Net start kdc

با ادامه رفع مشکلات Active Directory Replication در خدمت شما هستیم. در این مطلب می خواهیم نحوه برطرف کردن یکی دیگر از خطا های رایج بوجود آمده هنگام فرآیند Replication را به شما آموزش دهیم. در قسمت قبلی این آموزش نحوه برطرف کردن خطای 2146893022 را به شما آموزش دادیم حال به سراغ برطرف کردن خطای 1908 میرویم ...

برطرف کردن خطای 1908 در Active Directory Replication

در این سناریو ما چهار عدد دامین کنترلر به نام های DC1 ، DC2 ، TRDC1 و ChildDC1 داریم. سه دامین کنترلر اولی یعنی DC1 ، DC2 و TRDC1 نمی توانند از دامین کنترلر ChildDC1 فرآیند Replication را انجام دهند. بعبارتی دامین کنترلر ChildDC1 به درخواست های Replication سه دامین کنترلری که به آن اشاره کردیم جواب نمی دهد. برای برطرف کردن این مشکل شما بایستی با استفاده از دستور Nltest.exe یک فایل لاگ به نام Netlogon.log ایجاد کنید تا علت بوجود آمدن این مشکل را شناسایی کنید. در ابتدا با استفاده از دستور زیر باید Verbose Logging را در دامین کنترلر DC1 فعال کنید :

Nltest /dbflag:2080fff

حالا که Verbose Logging فعال شد شما بایستی فرآیند Replication را در دامین کنترلر ها آغاز کنید تا هر اروری هست Log برداری شود. در گام اول دستور زیر را در دامین کنترلر DC1 اجرا کنید :

Repadmin /replicate dc1 childdc1 dc=child,dc=root,
dc=tosinso,dc=com

همانطور که در تصویر زیر مشاهده می کنید فرآیند Replication به علت اینکه دامین کنترلر پیدا نشده است با مشکل مواجه شده است.

آموزش برطرف کردن مشکلات Active Directory Replication - قسمت سوم



در گام دوم در دامین کنترلر DC1 با اجرای دستور زیر KDC را در دامین child.root.tosinso.com پیدا کنید :

Nltest /dsgetdc:child /kdc

نتیجه این دستور نیز همانند چیزی که در تصویر بالا مشاهده کردید خواهد بود. در گام سوم از آنجا که KDC پیدا نشده است با استفاده از دستور زیر ببینید دامین کنترلری در Child domain وجود دارد یا خیر :

Nltest /dsgetdc:child

نتیجه این دستور نیز مانند تصویر قبلی خواهد بود. حالا با ارور ها و اطلاعاتی که در اختیار داریم به سراغ حل مشکل میرویم. ابتدا از مسیر C:\Windows\debug فایل Netlogon.log که ایجاد کرده ایم را باز کنید و بخوانید. این فایل را با Notepad باز کرده و به دنبال Entry هایی به شکل DSGetDcName function called باشید. توجه کنید که ممکن است Entry های زیادی با این مشخصه ها پیدا کنید. شما باید Entry هایی که در دستور Nltest پارامتر های آنها را مشخص کردید را پیدا کنید یعنی Dom:child و Flags:KDC. برای راحتی کار Entry هایی که به دنبال آنها باید بگردید شبیه زیر هستند :

DSGetDcName function called: client PID=2176,
Dom:child Acct:(null) Flags:KDC


شما Entry های اولیه و Entry هایی که به دنبال آنها در فایل وجود دارند را نیز باید به دقت نگاه کنید. در تصویر یک نمونه Thread با شماره 3372 را به همراه متن آن مشاهده می کنید :

آموزش برطرف کردن مشکلات Active Directory Replication - قسمت سوم



در تصویر فوق مشکل DNS lookup را برای رکورد SRV سرویس KDC در Child domain مشاهده می کنید. ارور 1355 نیز نشان دهنده این است که دامین مربوطه وجود دارد و یا اتصال به آن با مشکل مواجه شده است و پاسخ نمی دهد. از آنجا که میخواهید به دامین Child.root.tosinso.com متصل شوید ابتدا از دامین کنترلر DC1 آنرا Ping کنید. به احتمال زیاد هنگام Ping با خطای پیدا نشدن Host یا همان دامین کنترلر مورد نظر روبرو خواهید شد. اطلاعات بدست آمده از فایل Netlogon.log و همچنین Ping نشدن دامین کنترلر موجود در Child domain اشاره به مشکل DNS delegation دارد. دستور زیر را در دامین کنترلر DC1 اجرا کنید تا وجود DNS Delegation را تست کنید :

Dcdiag /test:dns /dnsdelegation > Dnstest.txt

محتویات فایل Dnstest.txt شبیه به تصویر زیر خواهد بود :

آموزش برطرف کردن مشکلات Active Directory Replication - قسمت سوم



همانطور که در تصویر فوق میبینید مشکل DNS وجود دارد. توجه کنید که آدرس 192.168.10.1 آدرس IP دامین کنترلر DC1 است. حالا که همه چیز مشخص است و مشکل ریشه یابی شده است یکراست به سراغ برطرف کردن این ارور میرویم. برای برطرف کردن ارور 1908 موارد زیر را به ترتیب انجام دهید :

1. در دامین کنترلر DC1 با فشردن کلید های ترکیبی Windows + R ابتدا RUN را باز کنید و تایپ کنید DNSMGMT.MSC و اینتر را بزنید تا کنسول مدیریتی DNS Management برایتان باز شود.
2. روی قسمت Forward Lookup Zones کلیک کنید تا Expand شود حالا root.tosinso.com را با کلیک روی آن Expand کنید و child را انتخاب کنید.
3. در سمت راست کنسول DNS روی NS رکوردی به نام same as parent folder راست کلیک کنید و Properties را انتخاب کنید.
4. lamedc1.child.tosinso.com رو انتخاب کنید و Remove را بزنید.
5. دکمه Add را بزنید و آدرس DNS server معتبری که در Child domain تان وجود دارد را در تنظیمات Delegation اضافه کنید. در فیلد FQDN آدرس childdc1.child.root.tosinso.com را وارد کنید.
6. در قسمت IP Addresses آدرس صحیح 192.168.10.11 را وارد کنید و OK را بزنید.
7. اگر از شما پرسید که Glue رکورد سرور lamedc1.child.tosinso.com (با آدرس 192.168.10.1) را پاک کنید روی Yes کلیک کنید. ( A Glue record در DNS سرور ، A رکورد آدرس Name Server معتبر یا Authoritative برای Zone ای که Delegate شده هست )
8. حالا با دستور Nltest.exe باید مطمئن شویم که KDC را در Child domain میتوانیم پیدا کنیم یا خیر. از سوئیچ force نیز برای اطمینان استفاده می کنیم تا Netlogon cache مورد استفاده قرار نگیرد :

Nltest /dsgetdc:child /kdc /force

9. حالا فرآیند Replication را از سمت دامین کنترلر ChildDC1 به طرف دامین کنترلر های DC1 و DC2 شروع می کنیم. ابتدا این کار را بصورت خط فرمانی انجام می دهیم :

Repadmin /replicate dc1 childdc1 "dc=child,dc=root,
dc=tosinso,dc=com"

روش بعدی بصورت گرافیکی است. در RUN تایپ کنید DSSITE.MSC و اینتر را بزنید تا کنسول مدیریتی Active Directory Sites and Services باز شود. قسمت Servers را Expand کنید و روی دامین کنترلر DC1 کلیک کنید تا Expand شود سپس روی NTDS Settings کلیک کنید و از سمت راست روی Connection object مربوط به دامین کنترلر ChildDC1 راست کلیک کنید و روی گزینه Replicate Now کلیک کنید. همین کار را برای دامین کنترلر های DC2 و TRDC1 نیز انجام دهید ( دقت کنید نه برای Connection object های این دامین کنترلرها ) . یعنی شما ابتدا از قسمت Servers دامین کنترلر DC2 را انتخاب می کنید و از قسمت NTDS Settings روی Connection object مربوط به ChildDC1 راست کلیک می کنید و سپس Replicate Now را میزنید. برای TRDC1 هم بهمین ترتیب ، از قسمت Servers دامین کنترلر TRDC1 را انتخاب می کنید و از قسمت NTDS Settings روی Connection object مربوط به ChildDC1 راست کلیک می کنید و سپس Replicate Now را میزنید. وقتی که Replicate Now را زدید تصویری شبیه به تصویر نیز نشان داده می شود که روی دکمه OK کلیک کنید.

آموزش برطرف کردن مشکلات Active Directory Replication - قسمت سوم



حالا نرم افزار Active Directory Replication Status Tool را از وب سایت مایکروسافت دانلود کنید و در Forest-wide Replication Status خواهید دید که اروری وجود ندارد. اروری که در تصویر بالا مشاهده می کنید با شماره خطای 8606 ظاهر می شود. ما در آموزش بعد میخواهیم به برطرف کردن این مشکل بپردازیم.

در این مطلب با ادامه آموزش برطرف کردن مشکلات Active Directory Replication در خدمت شما عزیزان هستیم. در این مطلب می خواهیم نحوه برطرف کردن یکی دیگر از خطا های رایج بوجود آمده هنگام فرآیند Replication را به شما آموزش دهیم. در قسمت قبلی این آموزش نحوه برطرف کردن خطای شماره 1908 را به شما آموزش دادیم حال به سراغ برطرف کردن خطای 8606 میرویم ...

برطرف کردن خطای شماره 8606 در Active Directory Replication

Lingering Object ها در اکتیودایرکتوری به Object هایی گفته می شود که در یک دامین کنترلر وجود دارند ولی در دامین کنترلر های دیگر در شبکه به دلیل حذف شدن تصادفی یا به دلایل دیگر وجود ندارند. شماره خطا های 8606 و 1908 در Active Directory Replication و Directory Service event نشانه های خوبی از وجود Lingering Object ها در اکتیودایرکتوری می باشند.

حتما به این نکته توجه داشته باشید که ممکن است فرآیند Replication در Active Directory بخوبی و با موفقیت انجام شود اما Log ای مبنی بر اینکه Lingering Object هایی در یک دامین کنترلر وجود دارد در دامین کنترلر ثبت نشود زیرا فرآیند Replication بر اساس تغییرات Object ها صورت میگیرد. در صورتی که هیچ تغییراتی در این Object ها وجود نداشته باشد در نتیجه Replication ای نیز انجام نمی شود.

بهمین دلیل زمانیکه Lingering Object ها را در اکتیودایرکتوری پاک می کنید شما مجبور هستید که فرض کنید که در تمامی دامین کنترلر ها این Lingering Object ها وجود دارند نه در دامین کنترلر هایی که ارور ها را Log برداری می کنند. خب حالا بهتر است به سراغ برطرف کردن خطای شماره 8606 برویم . ابتدا برای برطرف کردن این مشکل باید مطمئن شویم که دقیقا این ارور با این شماره وجود دارد یا خیر بهمین منظور دستور زیر را در دامین کنترلر DC1 اجرا می کنیم :

Repadmin /replicate dc1 dc2 "dc=root,dc=tosinso,dc=com"

خروجی دستور بالا مشابه تصویر زیر خواهید بود :

آموزش برطرف کردن مشکلات Active Directory Replication - قسمت چهارم



همچنین در Event Viewer دامین کنترلر DC1 اروری با شماره 1988 را مشاهده خواهید کرد. توجه کنید که شماره خطای 1988 تنها اولین Lingering Object ای را گزارش می کند که اتفاق افتاده است. به طور معمول تعداد Lingering Object ها در این گونه مواقع بیشتر از آن است که فکرش را می کنید.

آموزش برطرف کردن مشکلات Active Directory Replication - قسمت چهارم



در تصویر بالا GUID مربوط به Lingering Object که هایلایت شده است را کپی کنید و آنرا یکجا نگهداری کنید. همچنین Source DC و Partition's Distinguished Name را نیز کپی کنید. از طریق این اطلاعات میتوانیم بدانیم که کدام دامین کنترلر این Object را دارد. ابتدا با استفاده از GUID (که در این سناریو 5ca6ebca-d34c-4f60-b79c-e8bd5af127d8 است) این کار را انجام می دهیم. با دستور زیر نتیجه به فایل Objects.txt منتقل خواهد شد :

Repadmin /showobjmeta * "" > Objects.txt

اگر فایل Objects.txt را باز کنید خواهید دید که هر دامین کنترلری که در شبکه شما وجود داره Metadata های مربوط به این Object را که شامل یک و یا بیشتر از یک Lingering Object می باشد را برگردانده است. دامین کنترلر هایی که این کپی از این Object را ندارند شماره خطای 8439 را برمیگردانند که متن آن بصورت زیر است :

The distinguished name specified for this replication operation is invalid.

حالا شما باید DSA object GUID دامین کنترلر DC1 را بدست بیاورید و تمامی Lingering Object های موجود در Root partition دامین کنترلر DC2 را شناسایی کنید. ( DSA مخفف Directory System Agent است و امکان دسترسی به محل فیزیکی اطلاعات Active Directory را در هارد دیسک فراهم می کند. در اکتیودایرکتوری DSA بخشی از پراسس Local Security Authority است ) . برای انجام این کار دستور زیر را اجرا کنید :

Repadmin /showrepl DC1 > Showrepl.txt

در این فایل متنی DSA object GUID مربوط به دامین کنترلر DC1 در قسمت بالای فایل نشان داده خواهد شد و بصورت زیر خواهد بود :

DSA object GUID: 70ff33ce-2f41-4bf4-b7ca-7fa71d4ca13e

با در دست داشتن این اطلاعات شما با اجرای دستور زیر میتوانید از وجود Lingering Object ها در دامین کنترلر DC2 با مقایسه یک کپی از Root Partition دامین کنترلر DC1 با یک کپی از Root Partition دامین کنترلر DC2 مطمئن شوید :

Repadmin /removelingeringobjects DC2 70ff33ce-2f41-4bf4-
b7ca-7fa71d4ca13e "dc=root,dc=tosinso,dc=com"
/Advisory_mode

حالا مجددا میتوانید Event Log های مربوط به Directory Service را در Event Viewer دامین کنترلر DC2 مشاهده کنید تا ببینید که باز هم Lingering Object ها وجود دارند یا خیر. اگر وجود داشت هر یک از آنها با شماره خطای 1946 خودشان را نشان خواهند داد. کل Lingering Object های Partition ای که چک شده است با شماره خطای 1942 همراه خواهد بود. راه های متعددی برای حذف Lingering Object ها وجود دارد روشی که ترجیحا از آن استفاده می شود استفاده از ابزار ReplDiag.exe است. البته از ابزار RepAdmin.exe نیز میتوان استفاده کرد که هر یک را با هم بررسی خواهیم کرد.

استفاده از ابزار ReplDiag.exe برای حذف Lingering Object ها : در ویندوز 8 در Forest Root Domain که روی آن RSAT را نصب کرده اید دستورات زیر را به ترتیب اجرا کنید :

Repldiag /removelingeringobjects
Repadmin /replicate dc1 dc2 "dc=root,dc=tosinso,dc=com"

دستور اول Lingering Object ها را حذف می کند. دستور بعدی نیز مطمئن می شود که Replication به درستی بین دامین کنترلر های DC1 و DC2 انجام می شود ( برای مثال خطای 8606 دیگر بوجود نمی آید ) . شما همچنین با دستور زیر نیز میتوانید مطمئن شوید که Lingering Object ها از روی دامین کنترلر ها حذف شده اند :

Repadmin /showobjmeta * ""

استفاده از ابزار RepAdmin.exe برای حذف Lingering Object ها : روش دوم برای حذف Lingering Object ها استفاده از ابزار RepAdmin.exe است. شما بایستی Lingering Object ها را از Reference DC حذف کنید. دستورات زیر را میتوانید بکار ببرید :

Repadmin /removelingeringobjects childdc1.child.root.
tosinso.com 70ff33ce-2f41-4bf4-b7ca-7fa71d4ca13e 
"cn=configuration,dc=root,dc=tosinso,dc=com"

Repadmin /removelingeringobjects childdc1.child.root.
tosinso.com 3fe45b7f-e6b1-42b1-bcf4-2561c38cc3a6 
"cn=configuration,dc=root,dc=tosinso,dc=com"

Repadmin /removelingeringobjects childdc1.child.root.
tosinso.com 0b457f73-96a4-429b-ba81-1a3e0f51c848 
"cn=configuration,dc=root,dc=tosinso,dc=com"

REM Commands to remove the lingering objects 
REM from the ForestDNSZones partition.

Repadmin /removelingeringobjects childdc1.child.root.
tosinso.com 70ff33ce-2f41-4bf4-b7ca-7fa71d4ca13e 
"dc=forestdnszones,dc=root,dc=tosinso,dc=com"

Repadmin /removelingeringobjects childdc1.child.root.
tosinso.com 3fe45b7f-e6b1-42b1-bcf4-2561c38cc3a6 
"dc=forestdnszones,dc=root,dc=tosinso,dc=com"

Repadmin /removelingeringobjects childdc1.child.
root.tosinso.com 0b457f73-96a4-429b-ba81-
1a3e0f51c848 "dc=forestdnszones,dc=root,
dc=tosinso,dc=com"

REM Commands to remove the lingering objects 
REM from the Root domain partition.

Repadmin /removelingeringobjects dc1.root.
tosinso.com 3fe45b7f-e6b1-42b1-bcf4-2561c38cc3a6 
"dc=root,dc=tosinso,dc=com"

REM Command to remove the lingering objects 
REM from the DomainDNSZones partition.

Repadmin /removelingeringobjects dc1.root.
tosinso.com 3fe45b7f-e6b1-42b1-bcf4-2561c38cc3a6 
"dc=root,dc=tosinso,dc=com"

حالا باید Lingering Object ها را از روی بقیه Domain Controller ها پاک کنید :

Repadmin /removelingeringobjects dc1.root.
tosinso.com 0c559ee4-0adc-42a7-8668-e34480f9e604 
"cn=configuration,dc=root,dc=tosinso,dc=com"

Repadmin /removelingeringobjects dc2.root.
tosinso.com 0c559ee4-0adc-42a7-8668-e34480f9e604 
"cn=configuration,dc=root,dc=tosinso,dc=com"

Repadmin /removelingeringobjects childdc2.child.root.
tosinso.com 0b457f73-96a4-429b-ba81-1a3e0f51c848 
"cn=configuration,dc=root,dc=tosinso,dc=com"

Repadmin /removelingeringobjects trdc1.treeroot.
fabrikam.com 0c559ee4-0adc-42a7-8668-e34480f9e604 
"cn=configuration,dc=root,dc=tosinso,dc=com"

REM Commands to remove the lingering objects
REM from the ForestDNSZones partition.

Repadmin /removelingeringobjects dc1.root.tosinso.
com 0c559ee4-0adc-42a7-8668-e34480f9e604 
"dc=forestdnszones,dc=root,dc=tosinso,dc=com"

Repadmin /removelingeringobjects dc2.root.tosinso.
com 0c559ee4-0adc-42a7-8668-e34480f9e604 
"dc=forestdnszones,dc=root,dc=tosinso,dc=com"

Repadmin /removelingeringobjects childdc2.child.root.
tosinso.com 0b457f73-96a4-429b-ba81-1a3e0f51c848 
"dc=forestdnszones,dc=root,dc=tosinso,dc=com"

Repadmin /removelingeringobjects trdc1.treeroot.
fabrikam.com 0c559ee4-0adc-42a7-8668-e34480f9e604 
"dc=forestdnszones,dc=root,dc=tosinso,dc=com"

REM Command to remove the lingering objects 
REM from the DomainDNSZones–Root partition.

Repadmin /removelingeringobjects dc2.child.root.
tosinso.com 70ff33ce-2f41-4bf4-b7ca-7fa71d4ca13e 
"dc=domaindnszones,dc=root,dc=tosinso,dc=com"

REM Commands to remove the lingering objects 
REM from the Child domain partition.

Repadmin /removelingeringobjects dc1.root.tosinso.
com 0c559ee4-0adc-42a7-8668-e34480f9e604 
"dc=child,dc=root,dc=tosinso,dc=com"

Repadmin /removelingeringobjects dc2.root.tosinso.
com 0c559ee4-0adc-42a7-8668-e34480f9e604 
"dc=child,dc=root,dc=tosinso,dc=com"

Repadmin /removelingeringobjects childdc2.child.root.
tosinso.com 0b457f73-96a4-429b-ba81-1a3e0f51c848 
"dc=child,dc=root,dc=tosinso,dc=com"

Repadmin /removelingeringobjects trdc1.treeroot.
fabrikam.com 0c559ee4-0adc-42a7-8668-e34480f9e604 
"dc=child,dc=root,dc=tosinso,dc=com"

REM Command to remove the lingering objects 
REM from the DomainDNSZones-Child partition.

Repadmin /removelingeringobjects childdc2.child.root.
tosinso.com 0c559ee4-0adc-42a7-8668-e34480f9e604 
"dc=domaindnszones,dc=child,dc=root,dc=tosinso,dc=com"

REM Commands to remove the lingering objects 
REM from the TreeRoot domain partition.

Repadmin /removelingeringobjects childdc1.child.root.
tosinso.com 0b457f73-96a4-429b-ba81-1a3e0f51c848 
"dc=treeroot,dc=fabrikam,dc=com"

Repadmin /removelingeringobjects childdc2.child.root.
tosinso.com 0b457f73-96a4-429b-ba81-1a3e0f51c848 
"dc=treeroot,dc=fabrikam,dc=com"

Repadmin /removelingeringobjects dc1.root.tosinso.com 
0b457f73-96a4-429b-ba81-1a3e0f51c848 
"dc=treeroot,dc=fabrikam,dc=com"

Repadmin /removelingeringobjects dc2.root.tosinso.com 
0b457f73-96a4-429b-ba81-1a3e0f51c848 
"dc=treeroot,dc=fabrikam,dc=com"

البته بغیر از این ابزار ها از ابزار Lingering Object Liquidator نیز میتوانید استفاده کنید که توضیحات آنرا در این آموزش نمیدهیم.

در این مطلب با ادامه آموزش برطرف کردن مشکلات Active Directory Replication در خدمت شما عزیزان هستیم. در این مطلب می خواهیم نحوه برطرف کردن یکی دیگر از خطا های رایج بوجود آمده هنگام فرآیند Replication را به شما آموزش دهیم. در قسمت قبلی این آموزش نحوه برطرف کردن خطای شماره 8606 را به شما آموزش دادیم حال به سراغ برطرف کردن شماره خطای 8453 میرویم ...

برطرف کردن خطای شماره 8453 در Active Directory Replication

در مقاله قبل در مورد برطرف کردن مشکل Active Directory Replication که در آن دامین کنترلر قادر به پیدا کردن دامین کنترلر های دیگر در شبکه نبود بصورت مفصل صحبت کردیم و این مشکل را برطرف کردیم. حالا در این مقاله به برطرف کردن خطای 8453 که در آن دامین کنترلر ما میتواند دامین کنترلر های دیگر را در شبکه ببیند

اما نمیتواند با آن ها Replication داشته باشد میپردازیم. برای مثال فرض کنید که دامین کنترلر ChildDC2 (که یک RODC هست) که در واقع در Child Domain می باشد خود را به عنوان Global Catalog Server به سایر دامین کنترلر ها در شبکه Advertise نمی کند. برای مشاهده وضعیت دامین کنترلر ChildDC2 دستور زیر را در ChildDC2 اجرا کنید :

Repadmin /showrepl childdc2 > Repl.txt

همانطور که مشاهده می کنید خروجی دستور به فایل Repl.txt منتقل می شود. حالا اگر فایل Repl.txt را باز کنید خروجی شبیه زیر را میبینید :

Boulder\ChildDC2
DSA Options: IS_GC DISABLE_OUTBOUND_REPL IS_RODC
  WARNING: Not advertising as a global catalog

در این فایل اگر به دقت به قسمت Inbound Neighbors نگاه کنید خواهید دید که DC=treeroot,DC=tosinso,DC=com partition is missing زیرا این دامین کنترلر Replicate نکرده است. اگر به بالای فایل نگاه کنید خطای زیر را خواهید دید :

Source: Boulder\TRDC1
******* 1 CONSECTUTIVE FAILURES since 2014-01-12 11:24:30
Last error: 8453 (0x2105):
   Replication access was denied
Naming Context: DC=treeroot,DC=tosinso,DC=com

این خطا بیانگر این است که دامین کنترلر ChildDC2 قادر به اضافه کردن Replication link به Treeroot partition نیست. حالا اگر به تصویر زیر نگاه کنید میبینید که با Event ID شماره 1926 در Event Viewer دامین کنترلر ChildDC2 این خطا ثبت و ضبط شده است.

آموزش برطرف کردن مشکلات Active Directory Replication - قسمت پنجم



حالا در این گونه مواقع باید مواردی که مربوط به مشکلات امنیتی است را شناسایی کنید. برای این کار از ابزار dcdiag استفاده می کنیم. دستور زیر را اجرا کنید :

Dcdiag /test:checksecurityerror

در تصویر زیر قسمتی از خروجی دستور فوق را مشاهده می کنید :

آموزش برطرف کردن مشکلات Active Directory Replication - قسمت پنجم



همانطور که در تصویر فوق مشاهده می کنید ارور 8453 دریافت شده است زیرا گروه Enterprise Read-Only Domain Controllers مجوز Replicating Directory Changes permission را ندارد. برای حل این مشکل باید این Permission را به Treeroot partition بدهیم. برای انجام این کار موارد زیر را انجام دهید :

1. در دامین کنترلر TRDC1 کنسول TRDC1 را باز کنید.
2. روی DC=treeroot,DC=tosinso,DC=com راست کلیک کنید و Properties را انتخاب کنید.
3. به تب Security بروید.
4. به Permission های این پارتیشن به دقت نگاه کنید. توجه کنید که Entry ای برای گروه Enterprise Read-Only Domain Controllers وجود ندارد.
5. روی گزینه Add کلیک کنید.
6. در قسمت Enter the object names to select تایپ کنید ROOT\Enterprise Read-Only Domain Controllers
7. روی دکمه Check Names کلیک کنید و سپس روی دکمه OK کلیک کنید.
8. در قسمت Permissions for Enterprise Read-Only Domain Controllers تیک چک باکس های زیر را بردارید :

Read
Read domain password & lockout policies
Read Other domain parameters

9. تیک چک باکس پرمیژن Replicating Directory Changes را بزنید. تصویر زیر را ببینید.

آموزش برطرف کردن مشکلات Active Directory Replication - قسمت پنجم



10. حالا بصورت دستی باید سرویس KCC یا Knowledge Consistency Checker را مجبور کنیم تا Inbound Replication را برای دامین کنترلر ChildDC2 با دستور زیر Recalculate کند :

Repadmin /kcc childdc2

در نتیجه این دستور Treeroot partition مجددا اضافه می شود.

نتیجه گیری : Replication در Active Directory بسیار ضروری است و حل مشکلات Replication یکی از مهم ترین کار هایی است که باید در اولویت کار یک ادمین شبکه مایکروسافتی قرار بگیرد و نحوه رفع اشکال آنرا باید بلد باشد. همانطور که دیدید زمانیکه Replication بین Domain Controller ها به درستی انجام نشود Object ها در دامین کنترلر ها یکسان سازی نمی شوند. انجام نشدن صحیح فرآیند Replication در اکتیودایرکتوری باعث مشکلاتی نظیر Authentication یا احراز هویت نیز می شود.

مشکلات Replication ممکن است بلافاصله ظاهر نشوند. بنابراین اگر شما فرآیند Replication را در اکتیودایرکتوری Monitor نکنید و یا در وهله های زمانی مشخصی آنرا چک نکنید ممکن است مشکل زمانی خودش را نشان دهد که حتی فکرش را هم نمی کردید. پس توصیه من به شما این است که در اکتیودایرکتوری مشکلات Replication را حتما حتما حتما جدی بگیرید. امیدوارم از این سری آموزش ها استفاده کافی را برده باشید.


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

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

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

نظرات