ある日突然、いつも使っているサーバーにRDPログインしようとすると、こんなエラーが出て弾かれるようになりました。
The trust relationship between this workstation and the primary domain failed
しかも毎日同じサーバーで発生する。ワークグループへの離脱・再参加という重い作業を毎日繰り返すのは限界です。原因を徹底調査した記録をまとめます。
ドメインユーザーでRDPログインを試みると、冒頭のエラーメッセージが表示されてログインできない状態が続いていました。従来の対処法はワークグループへの離脱と再参加という手順で、再起動が2回必要な重い作業でした。毎日発生するため、もっとスマートな方法がないか調査することにしました。
trust relationship failed といえばSecure Channelの破損が定番の原因です。以下のコマンドで確認しました。
Test-ComputerSecureChannel -Verbose 結果は True。「ドメインとの信頼関係は正常」と表示されました。ここで一瞬詰まりましたが、調査を続けます。
(Get-WmiObject Win32_ComputerSystem).PartOfDomain
(Get-WmiObject Win32_ComputerSystem).Domain
nslookup [ドメイン名]
ping [ドメイン名]
nltest /dsgetdc:[ドメイン名] DNS解決・疎通・DCへの接続、すべて正常でした。インフラ起因ではないと判断しました。
gpresult /r GPO自体は正常に適用されていましたが、nltest で検出したDCのホスト名と、GPO適用元のDCのホスト名が1文字異なっていました。DC2台が存在し、役割が分かれている可能性が浮上しました。
repadmin /replsummary ここで原因が確定しました。
LDAP Error 49(0x31): Invalid Credentials
AcceptSecurityContext error, data 52e
The logon attempt failed サーバー自身がDCへのLDAP認証で弾かれていました。つまりコンピューターアカウントのパスワードがDC側と一致していない状態であることが判明しました。
ここが今回の調査で最も重要なポイントです。
Test-ComputerSecureChannel(資格情報なし)
└→ ローカルキャッシュを参照して判定
└→ True(見かけ上は正常)
repadmin /replsummary
└→ 実際にDCへLDAP接続を試みる
└→ Invalid Credentials(実態が露呈) Test-ComputerSecureChannel は資格情報なしで実行するとローカルキャッシュを参照するため、実態と乖離した結果を返すことがあります。真の状態確認には repadmin が有効です。
WindowsサーバーはDCとの間でコンピューターアカウント専用のパスワードを自動管理しています。このパスワードがサーバー側とDC側でズレると、ドメイン認証が通らなくなります。repadmin のLDAP認証エラー(data 52e)がその証拠です。
毎日同じサーバーで発生していることから、VMスナップショットの自動復元が根本原因として最有力です。スナップショット復元によってサーバー側のコンピューターアカウントパスワードが過去の値に巻き戻る一方、DC側は最新の値を保持し続けるため、毎日ズレが生じます。
毎日スナップショット自動復元
│
▼
サーバー側のコンピューターアカウントPWが過去の値に巻き戻る
│
▼
DC側のPWは最新のまま → 不一致
│
▼
LDAP認証失敗 → trust relationship failed ワークグループ経由の手順は不要です。以下のコマンド1つで対処できます。
Test-ComputerSecureChannel -Repair -Credential (Get-Credential) 実行するとドメイン管理者の資格情報を求めるポップアップが表示されます。入力後に再起動1回で復旧します。
| 項目 | 従来手順 | 本手順 |
|---|---|---|
| 再起動回数 | 2回 | ✅ 1回 |
| ワークグループ離脱 | 必要 | ✅ 不要 |
| 所要時間 | 30〜60分 | ✅ 10〜15分 |
グループポリシーの以下の項目を Enabled に設定します。スナップショット運用が前提の環境ではコンピューターアカウントのパスワードを固定することで、復元後のズレが発生しなくなります。本番環境への適用は推奨しません。
Computer Configuration
└ Windows Settings
└ Security Settings
└ Local Policies
└ Security Options
└ Domain member: Disable machine account password changes
→ Enabled スナップショット復元後の起動スクリプトに Test-ComputerSecureChannel -Repair を組み込む方法も有効です。資格情報の安全な保存方法と合わせて設計する必要があります。
人間が使うアカウントのパスワードは一切変わりません。変わるのはサーバー自身のコンピューターアカウントのパスワードのみです。ドメイン管理者・ローカルユーザー・ドメインユーザー全般への影響はありません。
資格情報なしで実行した場合、ローカルキャッシュを参照して判定するため実態と乖離することがあります。repadmin /replsummary で実際にDCへ接続確認することで真の状態を把握できます。
即時対処(-Repairコマンド)は本番環境でも有効です。ただし恒久対処のパスワード自動更新無効化はセキュリティリスクがあるため、本番環境への適用は避けてください。
VM基盤の管理者にスナップショットの自動復元運用が設定されていないか確認することを最初に行ってください。QA・テスト環境では毎朝クリーンな状態に戻す運用が原因となるケースが多いです。
起きます。物理サーバーの場合はスナップショット起因ではなく、長期間のネットワーク断・DCとの時刻ズレ・ADコンピューターアカウントの手動削除が主な原因となります。repadmin /replsummary で同様に確認できます。
trust relationship failed はSecure Channelの破損として知られていますが、Test-ComputerSecureChannel だけでは実態を掴めないケースがあります。repadmin /replsummary でLDAP認証エラーを確認することで原因を確定でき、-Repair オプション1つで従来の半分以下の時間で復旧できます。毎日同じサーバーで発生する場合はスナップショットの運用を真っ先に疑ってください。