====== DHCPサーバ設定をPowerShellで行う ======
今まで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を入力するシーンが出てくる。\\
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サーバやゲートウェイを設定するってのはよくあると思います。\\
== 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
===== IPアドレスを予約する =====
接続するクライアントの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