今までnetshコマンドを使ってDHCPサーバの制御を行っていたのですが、いつの間にかnetshでのDHCPサポートは将来削除されるかもしれませんよー!と警告が出るようになっていたので、将来削除されちゃっても良いようにPowerShellでやってみようかと。
なお、作業には管理者権限が必要なので、PowerShellのプロンプトを起動する時やスクリプトを実行する時には管理者権限に昇格するように!
PowerShellでDHCPサーバを制御する為にはDhcpServerモジュールが必要です。
PS C:\Windows\system32> Import-Module DhcpServer
とりあえず、処理を行う前に実行しとけばおk。
モジュール内にあるコマンドも確認しておくと良い。
PS C:\Windows\system32> Get-Command -Module DhcpServer
ついでに出てきたコマンドの詳細を知りたい場合は
Get-Help コマンド
や
Get-Help コマンド -examples
ってすると幸せになれます。
書式
Add-DhcpServerv4Scope -StartRange 開始IP -EndRange 終了IP -SubnetMask サブネットマスクIP -Name "名前" -State InActive
例
PS C:\Windows\system32> Add-DhcpServerv4Scope -StartRange 192.168.1.50 -EndRange 192.168.1.60 -SubnetMask 255.255.255.0 -Name "サンプルスコープ" -State InActive
他にもいろいろオプション付けられるけど、とりあえずこのくらいかと。
-StateオプションはActiveにしておくとスコープ作成直後から有効になってしまうので、スコープの作成後にオプションを設定したりするのであれば、一旦InActiveにして非アクティブ状態で作成されるようにしておくと良い。
スコープを作成すると、その後でオプションの設定時等にやたらとスコープIDを入力するシーンが出てくる。
IDと言っても生成したスコープのネットワークアドレスなんだけど、それを一覧で確認したい場合はGet-DhcpServerv4Scopeコマンドで参照できる
PS C:\Windows\system32> Get-DhcpServerv4Scope ScopeId SubnetMask Name State StartRange EndRange LeaseDuration ------- ---------- ---- ----- ---------- -------- ------------- 192.168.1.0 255.255.255.0 サンプルスコープ InActive 192.168.1.50 192.168.1.60 8.00:00:00
各スコープにDNSサーバやゲートウェイを設定するってのはよくあると思います。
PS C:\Windows\system32> Set-DhcpServerv4OptionValue -ScopeID 192.168.1.0 -DnsServer 192.168.1.10 PS C:\Windows\system32> Set-DhcpServerv4OptionValue -ScopeID 192.168.1.0 -DnsServer 192.168.1.10 -Force
DNSサーバは設定時に実際にDNSサービスが稼働しているかどうかの有効性確認が行われます。
-Forceオプションをつけるとこの有効性確認をキャンセル(というか有効じゃなくても強制的に設定)できます。
まだDNSが構築される前などではつけると良いかと。
なお、DNSサーバを複数設定する場合は、設定値をカンマ区切りで並べてください。
PS C:\Windows\system32> Set-DhcpServerv4OptionValue -ScopeID 192.168.1.0 -DnsServer 192.168.1.10,192.168.1.11
ネットワークの設定ではよく(デフォルト)ゲートウェイ、デフォゲなどと言われますが、DHCPサーバではRouterという項目になります。
PS C:\Windows\system32> Set-DhcpServerv4OptionValue -ScopeID 192.168.1.0 -Router 192.168.1.254
勘の良い人ならもうわかってそうですが、上記のDNSやGatewayは一つにまとめて実行できます。
PS C:\Windows\system32> Set-DhcpServerv4OptionValue -ScopeID 192.168.1.0 -DnsServer 192.168.1.10,192.168.1.11 -Router 192.168.1.254
他にもDnsDomainや、WinsServerも同様に設定できるので、必要に応じて設定しましょう。
DHCPについて良くご存知の方は上記のオプションの他にも様々なオプションがある事を知っているかと思います。
これらについては、オプションのIDを使って直接指定することで設定が可能です。
PS C:\Windows\system32> Set-DhcpServerV4OptionValue -OptionId オプションの番号 -Value "オプションの値" -ScopeId スコープID
例えばNo12のホスト名だと、こんな感じになります。
PS C:\Windows\system32> Set-DhcpServerV4OptionValue -OptionId 12 -Value "client01" -ScopeId 192.168.1.0
最初のスコープ作成コマンドを使うと、-StateでInActiveを指定しているので、スコープは非アクティブ状態になり、IPアドレスのリースが行われません。
スコープをアクティブにする場合は、下記のようにします。
PS C:\Windows\system32> Set-DhcpServerv4Scope -ScopeID 192.168.1.0 -State Active
接続するクライアントのMACアドレスがわかっている場合、IPアドレスを予約することができます。
予約する場合のコマンドは下記の通り。
書式
PS C:\Windows\system32> Add-DhcpServerv4Reservation -ScopeId スコープID -IPAddress 予約するIPアドレス -ClientId MACアドレス(ハイフン区切り、大文字) -Name "名称" -Type Both
例
PS C:\Windows\system32> Add-DhcpServerv4Reservation -ScopeId 192.168.1.0 -IPAddress 192.168.1.50 -ClientId 08-00-27-00-40-6B -Name "client01" -Type Both
Windows Server 2012 R2とかだと、2台のDHCPサーバを冗長構成(フェイルオーバー構成)にすることができます。
フェイルオーバー構成に設定した後、何らかの設定変更を行った場合、その変更された設定をフェイルオーバー構成の相手側に同期(レプリケート)する必要があります。
書式
PS C:\Windows\system32> Invoke-DhcpServerv4FailoverReplication -ScopeId スコープID
例
PS C:\Windows\system32> Invoke-DhcpServerv4FailoverReplication -ScopeId 192.168.1.0