デモート済みドメインコントローラーのSRVレコードがDNSに再生成される原因と完全削除の手順|Active Directoryの確実な対処法

ドメイン コントローラーを降格(demote)してメタデータも消したのに、DNS の _ldap_kerberos・(いわゆる GC レコード)などの SRV が何度削除しても蘇る――この現象は、AD 統合 DNS の複数レイヤーや「静的フラグ」、「アプリケーション パーティション残骸」、NS 設定、KMS の自動登録といった複数の要因が絡み合って発生します。本記事では、再生成のメカニズムを正しく分解し、確実に再出現を止めて完全削除するための包括的な実務手順と検証方法を整理します。

目次

現象の要約

  • 降格済みで Active Directory 上から該当 DC(例:DCB)のオブジェクトが見つからない。
  • DNS ゾーンから該当 DC の SRV レコード(_ldap_kerberosgc 相当)が削除しても復活する。
  • 一部に -static フラグが付与され、スカベンジングの対象外になっている。
  • 副次的に _vlmcs._tcp(KMS)レコードも勝手に作られることがある。

SRV レコードが復活するメカニズムの理解

まず、「なぜ復活するのか」を部品ごとに押さえます。

要素役割再生成の起点になり得る理由
Netlogon による自動登録各現行 DC が %systemroot%\System32\netlogon.dns を元に SRV を登録古い SRV が残ると、複製・再登録・参照が混線して復活に見える
AD 統合 DNS のアプリケーション パーティションDomainDnsZones / ForestDnsZones に DNS オブジェクトを格納GUI から見えない残骸が残ると、別の DNS サーバーからレプリケートされ復活
静的フラグ(-static)レコードの「動的更新/スカベンジ対象外」を示すビットスカベンジしても消えないため、手動削除後にどこかから転送されると復活
ゾーンの NS(Name Servers)権威 DNS の一覧降格済み DC が NS に残っていると、ゾーン転送の経由で古い SRV が再登場
KMS(_vlmcs._tcpソフトウェア ライセンス認証の自動公開KMS ホストが DNS へ自動登録を継続し、関連レコードが作られ続ける

なお「GC レコード」と呼ばれるものは、DNS 上は _ldap._tcp.gc._msdcs.<forest root> 等として登録されます(_gc というサービス名で登録されるわけではありません)。

対応の全体像(先に全体設計)

  1. 降格・レプリケーションの健全性を再確認(残骸やレプリケーション エラーがあると他の DC/DNS から“復活”)。
  2. メタデータ クリーンアップ全 DC 同期(構成パーティションの残骸排除)。
  3. DNS の静的 SRV を明示削除(GUI/コマンド)。
  4. ADSIEDIT でアプリケーション パーティション中の残骸を直接削除DomainDnsZones/ForestDnsZones)。
  5. ゾーンの NS から古い DC を除外(ゾーン転送の再汚染を阻止)。
  6. KMS の自動 DNS 公開を停止(該当時)。
  7. 正規 DC で SRV を再登録し、期待通りの状態に収束させる。
  8. Aging/Scavenging を設計・有効化(長期的な自動クリーンアップ)。

作業前の安全対策

  • 作業対象の DNS ゾーンをエクスポート(ロールバック手段の確保)
dnscmd &lt;DNSサーバー名&gt; /ZoneExport &lt;ゾーン名&gt; &lt;ファイル名&gt;.dns
  • 必要に応じて System State バックアップを取得(AD/DNS は密接に連動)。
  • メンテナンス時間帯を確保(SRV はクライアントのログオンやサービス探索に影響)。

詳細手順

1. 降格が完了しているかを再確認

GUI 上で見えない残骸やレプリケーション異常があると、別 DC から古い DNS オブジェクトが再転送されます。

  • Active Directory ユーザーとコンピューターActive Directory サイトとサービスの双方で該当 DC が存在しないことを確認。
  • レプリケーション健全性の確認:
repadmin /replsummary
repadmin /showrepl * /csv &gt; C:\Temp\repl.csv
repadmin /showrepl &lt;任意の現行DC&gt; /verbose /all /intersite

エラーが出ている場合は、先にレプリケーションの修復を完了させます。

2. メタデータ クリーンアップの再実行と強制同期

降格時の通信不良などで構成パーティションに残骸が残ることがあります。再実行しておくと安心です。

ntdsutil
metadata cleanup
connections
connect to server &lt;健全な現行DC&gt;
quit
select operation target
list domains
select domain &lt;対象ドメイン番号&gt;
list sites
select site &lt;該当サイト番号&gt;
list servers in site
select server &lt;削除対象DC番号(DCBなど)&gt;
quit
remove selected server
quit

完了後、AD の全ドメイン コントローラー間で同期をかけます。

repadmin /syncall /AdeP

3. DNS から静的 SRV レコードを手動削除

SRV が -static の場合、スカベンジでは消えません。GUI か CLI で明示的に削除します。

  • DNS マネージャーで該当ゾーンを開き、当該 SRV を手動削除。
  • CLI を使う例(SRV 名は環境に合わせて置換):
dnscmd &lt;DNSサーバー名&gt; /RecordDelete &lt;ゾーン名&gt; "_ldap._tcp.dc._msdcs.&lt;forest root&gt;" SRV /f
dnscmd &lt;DNSサーバー名&gt; /RecordDelete &lt;ゾーン名&gt; "_kerberos._tcp.&lt;domain&gt;" SRV /f

PowerShell(DnsServer モジュール)で一括検索・削除する例:

$TargetHost = "DCB.contoso.local"
$Zones = Get-DnsServerZone
foreach ($z in $Zones) {
  $records = Get-DnsServerResourceRecord -ZoneName $z.ZoneName -RRType SRV -ErrorAction SilentlyContinue |
             Where-Object { $_.RecordData.DomainName -match $TargetHost }
  foreach ($r in $records) {
    Remove-DnsServerResourceRecord -ZoneName $z.ZoneName -InputObject $r -Force
  }
}

4. アプリケーション パーティション(DomainDnsZones / ForestDnsZones)の残骸削除

GUI で見えない“生レコード”が残っていると、そこからレプリケートされて復活します。ADSIEDIT.mscで直接削除します。

  1. ADSIEDIT を起動し、コンテキストをそれぞれ開く:
    • CN=MicrosoftDNS,DC=DomainDnsZones,<Domain DN>
    • CN=MicrosoftDNS,DC=ForestDnsZones,<Forest DN>
  2. 配下のゾーン > _msdcs_tcp などを辿り、オブジェクト名や dnsRecord の中に DCB の FQDN が含まれるものを確認。
  3. 該当オブジェクトを削除。必要に応じて事前にエクスポート/スクリーンショットで記録。

削除後は再度 repadmin /syncall /AdeP を実行します。

5. ゾーンの NS(Name Servers)を整理

降格済み DC が NS に残っていると、ゾーン転送や権威の解決過程で古い SRV の再登場を招きます。

  • DNS マネージャー > ゾーンのプロパティ > Name Servers から古い DC を除外。
  • CLI 例:
dnscmd &lt;DNSサーバー名&gt; /RecordDelete &lt;ゾーン名&gt; @ NS DCB.contoso.local. /f

6. KMS(_vlmcs)レコードの扱い

KMS ホストが DNS に SRV を自動登録する設定になっていると、_vlmcs._tcp が再生成されます。不要または管理したい場合は以下を実施します。

  • KMS ホスト上で DNS 公開を無効化:
slmgr /cdns
  • 不要な _vlmcs._tcp の SRV を DNS から削除(上記 3 と同様)。

7. 現行 DC で正しい SRV を再登録

不要を消したら、正しい SRV のみを登録させて整合性を回復します。

nltest /dsregdns
ipconfig /registerdns
net stop netlogon &amp;&amp; net start netlogon

確認例:

nslookup -type=SRV _ldap._tcp.dc._msdcs.&lt;forest root&gt;
nslookup -type=SRV _kerberos._tcp.&lt;domain&gt;
nslookup -type=SRV _ldap._tcp.gc._msdcs.&lt;forest root&gt;

8. Aging/Scavenging を設計・有効化(再発防止)

長期運用では老朽レコードの自動削除が有効です。No-Refresh/Refresh は典型的に 7/7 日や 7/21 日など、サイトの更新頻度に合わせ調整します。

  • サーバー全体のスカベンジ設定(例):
dnscmd &lt;DNSサーバー名&gt; /Config /ScavengingInterval 7
  • ゾーン単位で Aging を有効化。
  • 古い静的印を動的に変換してスカベンジ対象にする場合:
dnscmd &lt;DNSサーバー名&gt; /AgeAllRecords &lt;ゾーン名&gt;

無計画に /AgeAllRecords を行うと必要な静的レコードまで消える恐れがあるため、事前にリスト化とバックアップを推奨します。

9. マルチベンダー/複製構成の見直し

以下の構成では、別経路から再注入されることがあります。

  • セカンダリ/スタブゾーンを他社 DNS や別フォレストから受けている。
  • 非 AD 統合のプライマリ ゾーンが混在し、転送/同期の経路が複数ある。

該当する場合、権威の一本化と古い権威サーバーの NS/転送設定の整理 が重要です。次のコマンドで全ゾーンを棚卸しできます。

dnscmd &lt;DNSサーバー名&gt; /EnumZones

10. 監視と自動検出(再発にすぐ気づく)

降格済みホスト名が SRV に紛れ込んだら通知する簡易スクリプト例です。

$TargetHost = "DCB.contoso.local"
$Zones = Get-DnsServerZone
$found = @()
foreach ($z in $Zones) {
  $r = Get-DnsServerResourceRecord -ZoneName $z.ZoneName -RRType SRV -ErrorAction SilentlyContinue |
       Where-Object { $_.RecordData.DomainName -match $TargetHost }
  if ($r) { $found += $r | Select-Object @{n="Zone";e={$z.ZoneName}}, HostName, RecordType, TimeStamp, @{n="Target";e={$_.RecordData.DomainName}} }
}
if ($found.Count -gt 0) {
  $found | Format-Table -AutoSize | Out-String | Write-Output
  Write-EventLog -LogName Application -Source "DNS-SRV-Monitor" -EventId 9001 -EntryType Warning -Message "SRV for $TargetHost detected."
}

トラブルシュートの要点(よくある落とし穴)

  • GUI で見えない SRV 残骸ADSIEDIT.mscCN=MicrosoftDNS,DC=DomainDnsZones/ForestDnsZones を必ず点検。
  • -static は手動削除が必要:スカベンジでは一切消えません。
  • NS の見落とし:ゾーンの権威に古い DC が残ると、ゾーン転送が“汚染源”に。
  • 降格の未完了ntdsutilremove selected serverrepadmin /syncall /AdeP のセットが定石。
  • KMS の自動登録slmgr /cdns を忘れると _vlmcs._tcp が増殖。

確認すべき SRV パターン(チェックリスト)

用途代表的なレコード備考
DC 検出_ldap._tcp.dc._msdcs.<forest root>サイト別は _ldap._tcp.<Site>._sites.dc._msdcs
Kerberos_kerberos._tcp.<domain> / _kerberos._udp.<domain>サイト別にも作成される
グローバル カタログ_ldap._tcp.gc._msdcs.<forest root>サイト別は _ldap._tcp.<Site>._sites.gc._msdcs
PDC 役割_ldap._tcp.pdc._msdcs.<domain>一意であるべき
KMS_vlmcs._tcpslmgr /cdns で公開抑止

コマンド サマリー(現場でそのまま使える)

目的コマンドメモ
レプリケーション状況repadmin /replsummary失敗があると DNS にも影響
同期のフル実行repadmin /syncall /AdePAD 全体の整合性回復
SRV 一括検索Get-DnsServerResourceRecord -RRType SRVPowerShell で絞り込み
SRV 明示削除Remove-DnsServerResourceRecord -Force-static も確実に削除
ゾーン エクスポートdnscmd /ZoneExportロールバック用
KMS DNS 公開停止slmgr /cdns_vlmcs の抑止
Netlogon 再登録nltest /dsregdns / ipconfig /registerdns正しい SRV を復元

ケース別の原因切り分け

ケース A:GUI では消えているが 24 時間以内に復活する

アプリケーション パーティションの残骸が本命。ADSIEDIT で該当オブジェクトを削除し、repadmin /syncall /AdeP 後に再確認。

ケース B:削除直後にほぼ即復活する

ゾーンの NS に古い DC が残っている可能性。NS の整理とゾーン転送経路の遮断を優先。

ケース C:-static が混在してスカベンジされない

手動削除または慎重に /AgeAllRecords を適用。静的にすべきレコードの棚卸しが必須。

ケース D:_vlmcs._tcp だけが復活する

KMS の DNS 公開が有効。slmgr /cdns を適用してから DNS を整理。

検証のしかた(完了条件を明確にする)

  1. ゾーン内 SRV を“ホスト名で”検索して該当 DCB がゼロ件であること。
  2. 権威 NS の一覧に降格済み DC が含まれないこと。
  3. 現行 DC で nltest /dsgetdc:<domain> を実行し、解決先に降格済み DC が登場しないこと。
  4. 24~48 時間の運用後も復活しないこと(スケジューラで監視スクリプトを回す)。

運用ベストプラクティス

  • DC 降格の標準手順に「メタデータ クリーンアップ & repadmin /syncall /AdeP」を組み込む。
  • DNS Aging/Scavenging の値を標準化(例:No-Refresh=7 日、Refresh=7~21 日)。
  • ゾーンの NS を定期棚卸し(まだ存在するはずのないサーバーが紛れていないか)。
  • 降格作業前に ゾーン エクスポートSystem State を取得。
  • KMS 運用ポリシーとして DNS 自動公開の要否を明確化。

フル自動クリーン(サンプル スクリプト)

ターゲット FQDN を含む SRV を全ゾーンから削除し、レプリケーション後に正しい SRV を再登録する例です。検証環境で必ず試してから本番へ適用してください。

# 変数
$TargetHost = "DCB.contoso.local"
$DomainName = "contoso.local"
$ForestRoot = "contoso.local"
$DnsServer  = $env:COMPUTERNAME

# 1) SRV 一括削除(全ゾーン)

$Zones = Get-DnsServerZone -ComputerName $DnsServer
foreach ($z in $Zones) {
$srv = Get-DnsServerResourceRecord -ComputerName $DnsServer -ZoneName $z.ZoneName -RRType SRV -ErrorAction SilentlyContinue |
Where-Object { $_.RecordData.DomainName -match [regex]::Escape($TargetHost) }
foreach ($r in $srv) {
Remove-DnsServerResourceRecord -ComputerName $DnsServer -ZoneName $z.ZoneName -InputObject $r -Force
}
}

# 2) 名前サーバー(NS)から古い DC を除去

try {
$ns = Get-DnsServerResourceRecord -ComputerName $DnsServer -ZoneName $DomainName -RRType NS |
Where-Object { $_.RecordData.NameServer -match [regex]::Escape($TargetHost) }
foreach ($r in $ns) {
Remove-DnsServerResourceRecord -ComputerName $DnsServer -ZoneName $DomainName -InputObject $r -Force
}
} catch {}

# 3) レプリケーション

repadmin /syncall /AdeP | Out-Null

# 4) 現行 DC から SRV を正規再登録

nltest /dsregdns | Out-Null
ipconfig /registerdns | Out-Null 

まとめ

「降格したのに SRV が復活する」現象は、(1)メタデータ/アプリケーション パーティションの残骸(2)静的フラグ(3)ゾーンの NS(権威設定)(4)KMS の自動登録のいずれか(または複合)で説明できます。対処は、AD の健全化 → DNS 静的削除 → パーティション残骸の直当て削除 → NS 整理 → KMS 停止 → 正規再登録の順で“汚染源を断つ”ことが肝要です。最後に Aging/Scavenging を運用へ組み込み、定期監視で早期検知できる体制を整えれば、同種の再発を効果的に防止できます。


付録:質問に対するコンパクト回答(要点だけ)

  • なぜ復活する? AD 統合 DNS の残骸、静的フラグ、権威 NS、KMS の自動登録が主因。
  • どう止める? ntdsutil 再実行&同期 → DNS の静的 SRV 削除 → ADSIEDITDomainDnsZones/ForestDnsZones から直接削除 → ゾーンの NS 見直し → KMS の slmgr /cdns → 正規 DC で nltest /dsregdns
  • _vlmcs の扱い? KMS で DNS 公開を無効化(slmgr /cdns)、不要 SRV を削除。

コメント

コメントする

目次