Windows AD裡若有多台DC, 當其中一台出現問題時, 解決過程! (考古文)

 沒錯! 2025年了, 還在用Windows 2003 server的AD網域。所以, 最新版的Windows AD應該已經不會有這些問題了吧! 我不知道! 但是windows 2003的AD, 就已經可以有多台DC, 當然是為了防止單一台主機故障, 我們辛苦一筆一筆建立的使用者帳號就不見了。有了多台DC, 就可以把這些帳號資料同時存在不同的DC, 萬一有一台機器壞了, 還有其他DC保存個這些資料。

  那麼平常使用AD帳號登入機器時, 自然也是去DC查詢帳號密碼對不對。是不是多台DC環境下, 只要有一台DC正常運作, 就可以了呢? 很多人都會理所當然的這麼想的, 但在2003, 其實不是這樣的。我們有一台主機, 在登入畫面, 當選擇登入AD網域時, 一直出現 "無法登入, 因為無法連線到網域" 的錯誤訊息。因為之前已經檢查了相關主機狀況, 所以我知道多台DC中有一台有點問題。它出現了以下幾個徵狀:

    1. 在Active Directory使用者及電腦, 要查找使用者時出現問題

    2. 查看事件檢視器的目錄服務分類, 看到一些複寫的錯誤及警告, 例如:

------------------------------------------------------------------------------------------------------------------------

這個伺服器是下列 FSMO 角色的擁有者,但並不認為它是有效 的。對於含有 FSMO 的磁碟分割,這個伺服器自從重新啟動後即 未以任何它的協力電腦成功複寫過。複寫錯誤正阻礙這個角色的 確認。 

 要求連絡 FSMO 操作主機的操作將會失敗直到這個問題被更正 為止。 

 FSMO 角色: CN=RID Manager$,CN=System,DC=princo,DC=com,DC=tw 

 使用者動作: 

 1. 初始同步處理是系統啟動時所做的第一個早期複寫,初始 同步處理失敗可能說明了為什麼無法確認 FSMO 角色。這個程序 已在 KB article 305476 中說明。 

2. 這個伺服器擁有一 或多個複寫協力電腦,而所有這些協力電腦的複寫都將失敗。 請使用命令 repadmin /showrepl 來顯示複寫錯誤,更正有問題 的錯誤。例如,阻礙複寫成功的問題可能在 IP 連線能力,DNS 名稱解析或安全性驗證。 

3. 在所有複寫協力電腦全都關閉是預期發生 (可能因為維護 或從嚴重損毀中修復) 的稀有狀況中,您可以強迫確認角色。這 可以經由使用 NTDSUTIL.EXE 拿取角色給相同的伺服器來達到。 這可以使用 http://support.microsoft.com 上 KB articles 255504 和 324801 中所提供的步驟來達到。 

 下列操作可能會受影響: 

架構: 您將不再能夠修改這個樹系的架構。 

網域命名: 您將不再能夠從這個樹系新增或移除網域。 

PDC: 您將不再能夠執行諸如群組原則更新和非 Active Directory 帳戶密碼重設之類的主要網域控制站操作。 

RID: 您將不再能夠為新使用者帳戶、電腦帳戶或安全性群組 配置新的安全性識別元。 

基礎結構: 諸如萬用群組成員資格之類的跨網域名稱參照將 無法正確地更新,如果參照目標物件已移動或重新命名。

------------------------------------------------------------------------------------------------------------------------

以及:

-------------------------------------------------------------------------------------------------------------------------

這是本機網域控制站上,下列目錄磁碟分割的複寫狀態。 

 目錄磁碟分割:

DC=princo,DC=com,DC=tw 

 本機網域控制站最近並未從一些網域控制站收到複寫資訊。 顯示出的網域控制站計數,分成下列的間隔。 

 超過 24 小時:

超過一週:

超過一個月:

超過兩個月:

超過標記存留時間:

標記存留時間 (天):

180 

 未及時複寫的網域控制站可能會發生錯誤。它可能會遺失密碼變更,並且無法驗證。未在標記存 留時間內進行複寫的 DC 可能已遺失某些物件的刪除,在重新調整之前,它將被自動中止以後的 複寫操作。 

 如果要依照名稱來識別網域控制站,請安裝包含在安裝 CD 中的支援工具,然後執行 dcdiag.exe。 

您也可以使用支援工具 repadmin.exe 來顯示樹系中網域控制站的複寫延遲。 命令為 "repadmin /showvector /latency <partition-dn>"。

------------------------------------------------------------------------------------------------------------------------

   針對"無法登入, 因為無法連線到網域" 的錯誤訊息, 我當然問了AI, 它給我很多可能的問題原因和查找方法, 包括網路是否斷線, DNS查找是否正常等。這些, 我都已經排除了, 所以我直接告訴AI, 都不是這些問題, 而是多台DC中的一台壞了, 而那台要登入的主機, 那台DC不選, 偏要選壞掉的DC來查找登入資訊。

  這就是Windows 2003的AD網域, 最令人不能理解的地方了。

  我即然已經知道是有某台DC出問題, 那麼把它修好就是了。但不希望使用者等待我修護, 最直接的方式, 就是先將壞掉的DC關機。然後, 使用者再重新登入他的主機, 就會看到原本直接立刻跳出錯誤訊息的情況, 變成等待一會後, 就成功登入了。由行為來看, 問題並不在AD, 而昰要登入的主機(剛好也是Windows 2003), 為什麼不會(聰明一點)自動去試另一台DC? 而是固著在一台有問題的DC, 直到那台DC被關機?

  使用者問題排除後, 我如何修這台出問題的DC? 因為查了一下, 發現是複寫失敗太久了(標記存留時間 =180天), 可能遺失某些物件的刪除, 等等的。我並沒有把握可以完整的修好它, 所以就選擇簡單一些的方法: "把該台DC降級", 然後以後有必要, 再考慮是否把它升級回去。

  但因為該台DC和其他正常的DC連線已經有問題, 所以用dcpromo指令, 做降級動作時, 會無法成功, 因為它要先連回AD, 做清除自己這個DC的資訊。這時候AI幫上忙了:
--------------------------------------------------------------------------------------------------------------------------

在 Windows Server 2003 中,如果你使用 dcpromo 降級網域控制站(DC)時遇到錯誤,例如無法聯繫其他 DC 或複製失敗,可以考慮使用 強制移除(/forceremoval) 的方式跳過某些檢查。

🛠️ 使用 dcpromo /forceremoval 強制降級

這個指令會將 DC 降級為成員伺服器,即使它無法與其他 DC 通訊:

dcpromo /forceremoval

⚠️ 注意:這不會清除 Active Directory 中的該 DC 資料,會留下「孤立的 metadata」,你必須在其他健康的 DC 上手動清理。

🧹 強制降級後的清理步驟

  1. 清除 AD metadata
    • 在其他 DC 上執行:
    • ntdsutil metadata cleanup

    • 選取要移除的 DC,並執行 remove selected server
  2. 移除 DNS 記錄
    • 刪除該 DC 的 A 記錄、SRV 記錄、反向查詢記錄
    • 檢查 _msdcs_sites 等區域是否仍有殘留
  3. 移除 AD Sites and Services 中的伺服器物件
  • 📌 額外提醒

    • 若該 DC 擁有 FSMO 角色,請先轉移或在其他 DC 上「強制接管(seize)」角色
    • 若該 DC 是 Global Catalog 或 DNS Server,也需在其他 DC 上重新設定
  • -----------------------------------------------------------------------------------------------------------------

      所以, 做法是先找故障DC是否有 FSMO 角色, 若有則強制接管(seize)該角色, 還好我的情況是只有一個RID master。由另一台正常的DC先行強制接管後, 就去把故障DC降級, 接著還要去清一些AD metadata。這樣就暫時解決這個問題了。

      至於如何查找 FSMO 角色及強制接管這些角色, 就問AI就可以了:

    ------------------------------------------------------------------------------------------------------------------

    🛠️ 使用 netdom 查詢 FSMO 角色分布

    netdom query fsmo

    這個指令會列出目前網域中五個 FSMO 角色的持有者:

    FSMO 角色

    功能說明

    Schema Master

    控管 AD 架構的變更

    Domain Naming Master

    控管網域新增/移除

    RID Master

    分配 RID 給 DC,用於建立 SID

    PDC Emulator

    模擬舊版 PDC,處理密碼同步與時間同步

    Infrastructure Master

    更新跨網域物件參照資訊

    netdom 工具包含在 Windows Server 2003 Support Tools 中,請確認已安裝。

    🛠️ 強制接管 RID Master 的步驟

    請在你要接管角色的 DC 上執行以下操作:

    1. 開啟命令提示字元
    2. ntdsutil

    3. 進入 FSMO 管理模式
    4. roles

    5. 建立連線到目標 DC(你要接管角色的 DC)
    6. connections connect to server <你的DC名稱> quit

    7. 執行強制接管 RID Master
    8. seize rid master

    9. 完成後退出工具

    quit quit

    ------------------------------------------------------------------------------------------------------------------

      同樣, 清除AD metadata, 也是問AI:

    -------------------------------------------------------------------------------------------------------------------

    🧹 使用 ntdsutil 清除 AD metadata 的步驟

    請在健康的 DC 上執行以下操作:

    1. 開啟命令提示字元
    2. ntdsutil

    3. 進入 metadata cleanup 模式
    4. metadata cleanup

    5. 建立連線到本機或其他 DC
    6. connections connect to server <你的DC名稱> quit

    7. 選擇要移除的 DC
    8. select operation target list domains select domain <編號> list sites select site <編號> list servers in site select server <編號> quit

    9. 移除選定的 DC
    10. remove selected server

    11. 退出工具

    quit quit

    📋 清理後的額外步驟

    • Active Directory Sites and Services
      • 刪除該 DC 的 NTDS Settings 與 Server 物件
    • Active Directory Users and Computers
      • 刪除該 DC 的電腦帳戶(位於 Domain Controllers OU)
    • DNS 管理主控台

    • 移除該 DC 的 A、SRV、PTR 記錄,特別是 _msdcs 區域
    -----------------------------------------------------------------------------------------------------------------

      雖然, Windows 2003是個老系統了, 這些問題別人肯定也碰過, 微軟的文件也是會有的。但是, 查找文件還是很花時間精神的。有了AI的協助, 要下什麼指令, 或找問題, 會更有效率。但是人類的判斷能力還是更好一些的, AI受限於我們輸入給它的資訊, 不見得看得到全貌。但是透過多次的來回問答, AI給了我許多協助, 得以更快的解決問題。

    留言

    這個網誌中的熱門文章

    D-BUS學習筆記

    Cisco Switch學習筆記: EtherChannel

    Cisco Switch學習筆記: interface的封包錯誤統計