はじめに
マイクロソフト社の製品の動作検証や不具合の調査などのため、Active Directory ドメインサービス (AD DS) の検証環境を用意する場合があります。
そのような場合は、下記の公開情報に紹介されているようなウィザードによる GUI 操作で、設定などを指定しながら構築することが (多分) 比較的一般的な方法です。
上記のような GUI 操作による構築は視覚的にはわかりやすいですが、操作を画一化しにくいといった欠点もあります。
そこで本記事では可能な限り以下の Hyper-V モジュールなどの PowerShell コマンドレットを使用し、Hyper-V ホスト上に AD DS の検証環境を構築する方法についてまとめてみました。
本記事は、検証に使用する環境の構築手順をまとめたものです。
実際の運用システム上での利用を想定していませんので、検証環境上での参考情報としてご活用ください。
本記事の手順を順番に実行することで、下記のような環境を構築できます。
VMSwitch に NAT を設定することで、インターネット接続が必要な Entra ID Connect などの動作検証も可能です。
また、DHCP サーバーの役割をインストールすれば IP アドレスを配布できますが、検証環境への影響を考慮し任意手順としています。(後述)
事前準備
Windows OS インストールのためのメディアおよび Hyper-V 環境を準備します。
- Windows をインストール可能な ISO メディアファイル
- Windows Server (Windows Server 2019/2022)
- Windows Client (Windows 10/11)
- Hyper-V の役割がインストールされたホスト用の Windows
以降の手順は上記各 ISO メディアファイルを "ISO格納フォルダ" に格納している前提でのコマンド例です。
また、"VHDXファイル格納フォルダ" に指定したフォルダパスに仮想マシンのファイルが作成されます。
実行する環境上で、ISO メディアファイル名やメディアを格納しているフォルダ名、仮想マシンの保存先のフォルダ名に読み替えて実行してください。
Hyper-V の役割インストールに必要な要件や、具体的なインストール方法については本記事では触れませんので、下記を参考に Hyper-V の役割をインストールしてみてください。
仮想スイッチの作成、NAT アドレス変換の設定
Hyper-V ホスト上で、管理者権限の Powershell を起動して実行します。
New-VMSwitch -SwitchName "vSwitch ADDS env" -SwitchType Internal
[任意] 仮想スイッチ経由でゲストの Windows OS からインターネット接続したい場合 (NAT アドレス変換の構成)
検証環境からインターネットに接続する必要がなければ、本手順の実施は不要です。
NAT アドレス変換の設定を構成します。
Get-NetAdapter
New-NetIPAddress -IPAddress 192.168.1.1 -PrefixLength 24 -InterfaceIndex 28
New-NetNat -Name WinNAT -InternalIPInterfaceAddressPrefix 192.168.1.0/24
[TIPS] 仮想スイッチの作成、NAT アドレス変換の設定を削除するときの手順
検証の終了後、設定したネットワーク環境を削除したいときは通常の仮想スイッチの手順に加えて作成した NAT インタフェースの削除が必要となります。
下記のコマンドで、仮想スイッチおよび NAT インタフェースの削除が可能です。
## 作成した NAT 変換の名称確認 (未作成の場合は実行不要)
Get-NetNat | Select-Object -ExpandProperty Name
Remove-NetNat "WinNAT"
## 内部スイッチの削除
Remove-VMSwitch "vSwitch ADDS env"
Windows Server (ADDS) の仮想マシンを作成する
Hyper-V ホスト上で、管理者権限の Powershell を起動して実行します。
# Hyper-V ホスト上で設定する VM 名などの変数宣言
$VMName = 'ADDS'
$Switch = 'vSwitch ADDS env'
$InstallMedia = '<ISO 格納フォルダ フルパス>\ja_windows_server_2016_vl_x64_dvd_11645964.iso'
$Path = '<VHDX ファイル格納フォルダ フルパス>\'
$VHDPath = $Path+$VMName+'.vhdx'
$VHDSize = '64424509440'
# 60 GB 固定の場合
# 仮想マシンの作成
New-VM -Name $VMName -MemoryStartupBytes 16GB -BootDevice VHD -Path $Path -NewVHDPath $VHDPath -NewVHDSizeBytes $VHDSize -Generation 2 -Switch $Switch
# OS インストール時の要件を満足するため、動的メモリは無効化する
Set-VMMemory $VMName -DynamicMemoryEnabled $false
# インストールする OS は DVD から起動するため、ドライブを追加
Add-VMDvdDrive -VMName $VMName -ControllerNumber 0 -ControllerLocation 1 -Path $InstallMedia
# 前述のドライブにインストールメディアを挿入
$DVDDrive = Get-VMDvdDrive -VMName $VMName
# OS の起動順を DVD からに設定する
Set-VMFirmware -VMName $VMName -FirstBootDevice $DVDDrive
仮想マシンが作成されたことを確認し、管理コンソールで起動します。
インストール時のウィザードに従ってインストールし、管理者のパスワードの設定などを実施します。
管理者ユーザーでサインイン可能になったら以降の手順を実施します。
Windows Server (ADDS) のホスト名, IPアドレス更新
Windows Server (ADDS) に管理者ユーザーでサインインし、Powershell (あるいは Powershell ISE) で以下のコマンドを実行します。
# IP アドレス、設定するホスト名の宣言
$ipaddress = "192.168.1.101"
$ipprefix = "24"
$ipgw = "192.168.1.1"
## ipdns は任意の DNS サーバー
## NAT アドレス変換を構成し、ipdns にGoogle Public DNS (8.8.8.8) を構成するとインターネット接続可能
## ドメインに昇格すると ipdns に設定された IP アドレスが DNS フォワーダーとして構成される
## (優先 DNS サーバーは 127.0.0.1 になる)
$ipdns = "8.8.8.8"
## ipdns2 は未設定で問題ない
$ipdns2 = ""
$ipif = (Get-NetAdapter).ifIndex
$featureLogPath = "c:\poshlog\featurelog.txt"
$newname = "ADDS"
$addsTools = "RSAT-AD-Tools"
# インターフェースに前述の IP アドレスを設定
New-NetIPAddress `
-IPAddress $ipaddress `
-PrefixLength $ipprefix `
-InterfaceIndex $ipif `
-DefaultGateway $ipgw
# DNS サーバーとして自身 (ADDS) と外部の DNS を設定
Set-DnsClientServerAddress `
-InterfaceIndex $ipif `
-ServerAddresses ($ipdns, $ipdns2)
# ホスト名を更新 (ここでは "ADDS" に)
Rename-Computer -NewName $newname -force
# RSAT のインストール
New-Item $featureLogPath -ItemType file -Force
Add-WindowsFeature $addsTools
Get-WindowsFeature | Where installed >>$featureLogPath
#Restart the computer
Restart-Computer
再起動が完了するまで待機し、後続の手順を実施します。
Windows Server (ADDS) に Active Directory の役割をインストールする
Windows Server (ADDS) に管理者ユーザーでサインインし、Powershell (あるいは Powershell ISE) で以下のコマンドを実行します。
#Declare variables
$DatabasePath = "c:\windows\NTDS"
$DomainMode = "WinThreshold"
$DomainName = "contoso.com"
$DomainNetBIOSName = "CONTOSO"
$ForestMode = "WinThreshold"
$LogPath = "c:\windows\NTDS"
$SysVolPath = "c:\windows\SYSVOL"
$featureLogPath = "c:\poshlog\featurelog.txt"
$Password = ConvertTo-SecureString "Passw0rd" -AsPlainText -Force
#Install Active Directory Domain Services, DNS, and Group Policy Management Console
start-job -Name addFeature -ScriptBlock {
Add-WindowsFeature -Name "ad-domain-services" -IncludeAllSubFeature -IncludeManagementTools
Add-WindowsFeature -Name "dns" -IncludeAllSubFeature -IncludeManagementTools
Add-WindowsFeature -Name "gpmc" -IncludeAllSubFeature -IncludeManagementTools }
Wait-Job -Name addFeature
Get-WindowsFeature | Where installed >>$featureLogPath
#Create a new Windows Server AD forest
Install-ADDSForest `
-CreateDnsDelegation:$false `
-DatabasePath $DatabasePath `
-DomainMode $DomainMode `
-DomainName $DomainName `
-SafeModeAdministratorPassword $Password `
-DomainNetbiosName $DomainNetBIOSName `
-ForestMode $ForestMode `
-InstallDns:$true `
-LogPath $LogPath `
-NoRebootOnCompletion:$false `
-SysvolPath $SysVolPath `
-Force:$true
再起動を要求されるため、ポップアップに従い再起動します。
ドメイン機能レベルを表す "-DomainMode $DomainMode" ですが、WIndows Server R2 の場合は対応する "Win2012R2" の指定が必要です。
$DomainMode = "Win2012R2"
Set-ADDomainMode (ActiveDirectory) | Microsoft Learn
https://learn.microsoft.com/en-us/powershell/module/activedirectory/set-addomainmode?view=windowsserver2022-ps#-domainmode
(任意) 検証用のユーザーを作成する
検証用の一般ユーザー "amccray" を作成します。
パスワードが期限切れにならず、リモートデスクトップ接続を許可する設定とします。
#Declare variables
$Givenname = "Allie"
$Surname = "McCray"
$Displayname = "Allie McCray"
$Name = "amccray"
$Password = "*******"
$SecureString = ConvertTo-SecureString $Password -AsPlainText -Force
#Create the user
New-ADUser `
-Name $Name `
-GivenName $Givenname `
-Surname $Surname `
-DisplayName $Displayname `
-AccountPassword $SecureString
#Set the password to never expire
Set-ADUser `
-Identity $Name `
-PasswordNeverExpires $true `
-ChangePasswordAtLogon $false `
-Enabled $true
#Enable user to Remote Desktop
Add-ADGroupMember `
-Members $Name `
-Identity "Remote Desktop Users"
(任意) DHCP サーバーの役割をインストール,スコープを有効化する
本手順により DHCP サーバーと同一ネットワークに接続されているコンピュータに対し IP アドレスが配布されます。
サーバーの接続先が外部スイッチであるなど外部に IP アドレスが配布される構成となっていた場合は、意図しないコンピューターに IP アドレスが配布されることにより Hyper-V ホストが接続されているネットワーク環境の動作の不具合につながる可能性があります。
記事内で作成している "vSwitch ADDS env" は内部スイッチ設定のため配布範囲は Hyper-V ホスト上の仮想マシンに限られますが、それ以外の構成で DHCP サーバーを構成する場合は前述の内容について十分ご理解いただいた上で設定は自己責任にてお願いします。
Microsoft としては、AD DS と DHCP を同一サーバーに導入することは推奨していません。(下記公開情報 参照)
それぞれの機能に問題が発生した際の対処が難しくなるので、実際に運用する環境では AD DS とは別サーバーにインストールするのが望ましいです。
ドメイン コントローラーの構築時に言われないと気付かないこと | Microsoft Japan Windows Technology Support Blog
https://jpwinsup.github.io/blog/2023/10/23/ActiveDirectory/Authentication/design-consideration/#DHCP-との同居も非推奨!
DHCP クライアントが有効な仮想マシンに対して、以下の設定が配布されるようにします。
- 192.168.1.151 から 254 の IP アドレスを設定
- DNS サーバーとして、AD DS の IP アドレス 192.168.1.101 を設定
- ゲートウェイアドレスとして、仮想スイッチに指定した 192.168.1.1 を設定
上記の設定により、同じ仮想スイッチに接続している仮想マシンからドメイン参加が可能になります。
また、ドメイン非参加の状態でもインターネットに疎通ができるようになります。
Windows Server (ADDS) に管理者ユーザーでサインインし、Powershell (あるいは Powershell ISE) で以下のコマンドを実行します。
Install-WindowsFeature DHCP -IncludeManagementTools
netsh dhcp add securitygroups
Restart-Service dhcpserver
Add-DhcpServerInDC `
-DnsName DHCP1.contoso.com `
-IPAddress 192.168.1.101
Get-DhcpServerInDC
Set-ItemProperty –Path registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ServerManager\Roles\12 –Name ConfigurationState –Value 2
Set-DhcpServerv4DnsSetting -ComputerName "ADDS.contoso.com" -DynamicUpdates "Always" -DeleteDnsRRonLeaseExpiry $True
# ドメインの管理者の認証情報入力 (ドメイン名\ユーザー名)
$Credential = Get-Credential
Set-DhcpServerDnsCredential -Credential $Credential -ComputerName "ADDS.contoso.com"
Add-DhcpServerv4Scope `
-name "151-254" `
-StartRange 192.168.1.151 `
-EndRange 192.168.1.254 `
-SubnetMask 255.255.255.0 `
-State Active
Set-DhcpServerv4OptionValue `
-OptionID 3 `
-Value 192.168.1.1 `
-ScopeID 192.168.1.0 `
-ComputerName ADDS.contoso.com
Set-DhcpServerv4OptionValue `
-DnsDomain contoso.com `
-Router 192.168.1.1 `
-DnsServer 192.168.1.101
DHCP サーバーを再起動します。
net stop dhcpserver
net start dhcpserver
[TIPS] Set-DhcpServerv4OptionValue の -OptionID 3 について
"Set-DhcpServerv4OptionValue" のコマンドの説明文には言及がありませんが、内部的には "3" はルーターに設定された ID のようです。
表示上のオプション名と、ID の対応は DHCP の管理画面で確認できます。
Windows Client (ADmenber) の仮想マシンを作成する
Hyper-V ホスト上で、管理者権限の Powershell を起動して実行します。
#Declare variables
$VMName = 'ADmember'
$Switch = 'vSwitch ADDS env'
$InstallMedia = '<ISO 格納フォルダ>\ja-jp_windows_11_business_editions_version_22h2_updated_nov_2023_x64_dvd_ba7f1c52.iso'
$Path = '<VHDX ファイル格納フォルダ>'
$VHDPath = $Path + '\' + $VMName + '.vhdx'
$VHDSize = '64424509440'
# 固定 60 GB。要件により変更
#Create a new virtual machine
New-VM -Name $VMName -MemoryStartupBytes 4GB -BootDevice VHD -Path $Path -NewVHDPath $VHDPath -NewVHDSizeBytes $VHDSize -Generation 2 -Switch $Switch
#Set the memory to be non-dynamic
Set-VMMemory $VMName -DynamicMemoryEnabled $false
#Add a DVD drive to the virtual machine
Add-VMDvdDrive -VMName $VMName -ControllerNumber 0 -ControllerLocation 1 -Path $InstallMedia
#Mount installation media
$DVDDrive = Get-VMDvdDrive -VMName $VMName
#Configure the virtual machine to boot from the DVD
Set-VMFirmware -VMName $VMName -FirstBootDevice $DVDDrive
[TIPS] Windows 11 をインストールする場合の追加手順
必要要件を満足するために、以下のコマンドの実行が追加で必要になります。
# Windows 11 のときのみ必要
Set-VMKeyProtector -VMName $VMName -NewLocalKeyProtector
Enable-VMTPM -VMName $VMName
Set-VMProcessor $VMName -Count 2
Windows Client (ADmenber) のホスト名を設定する
Windows Client (ADmenber) に管理者ユーザーでサインインし、Powershell (あるいは Powershell ISE) で以下のコマンドを実行します。
#Declare variables
$newname = "ADmember"
$addsTools = "RSAT-AD-Tools"
$featureLogPath = "c:\poshlog\featurelog.txt"
#Rename the computer
Rename-Computer -NewName $newname -force
#Install features (Windows Server の場合のみ実行)
#New-Item $featureLogPath -ItemType file -Force
#Add-WindowsFeature $addsTools
#Get-WindowsFeature | Where installed >>$featureLogPath
#Restart the computer
Restart-Computer
実行後、再起動されることを確認します。
Windows Client (ADmenber) をドメインに参加させる
Windows Client (ADmenber) に管理者ユーザーでサインインし、Powershell (あるいは Powershell ISE) で以下のコマンドを実行します。
Add-Computer -DomainName contoso.com -Credential contoso\Administrator -Restart
おわりに
今回は、検証用によく使用している環境構築のコマンドをまとめてみました。
GUI による検証環境の構築は意外と時間がかかりがちでオペレーションミスが発生しやすい作業のため、本記事の内容が調査の効率化や自動化などに少しでも役に立てばうれしいです。
また、Azure 環境が使用できる場合は以下の情報も参考になるかもしれません。
機会があれば、同様の環境を Azure 上に構築する方法も調査してみたいと思います。
なお、本情報は検証環境の構築を目的としたものですが、例えば仮想環境上で本番向けの環境を構築したい場合は、下記のような公式の公開情報も参考にしてください。
仮想 Active Directory Domain Services ドメイン コントローラー Hyper-V |Microsoft Learn
https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/dd363553(v=ws.10)