Home > Windows にまつわる e.t.c.

PowerShell で IPv4/IPv6 アドレスを設定をする


Windows Server / Client で固定 IP アドレスを設定するには、New-NetIPAddress と Set-DnsClientServerAddress を使うのですが、IPv6 はちょっと癖があるで、IPv4 の設定方法と併せて解説します。

 

IP アドレスを設定する NIC を指定する

IP アドレスを設定するには、対象の NIC を指定する必要があります。

 

単一 NIC の場合

1 つしか NIC を持たない環境であれば、Get-NetAdapter で取得した NIC をそのまま New-NetIPAddress / Set-DnsClientServerAddress にリダイレクトします。

Get-NetAdapter | New-NetIPAddress ...

 

MAC アドレスで NIC を指定する

複数 NIC がある場合は、何かしらの方法で NIC を特定しなくてはいけません。

NIC を特定するポピュラーな方法は MAC アドレスか、NIC 名で特定します。

MAC アドレスで特定する場合は、Where-Object(Alias:?) で MAC アドレスを指定して NIC を特定します。

Get-NetAdapter | ? MacAddress -eq 00-00-5E-05-14-8D | New-NetIPAddress ...

 

NIC 名で NIC を指定する

MAC アドレス以外の方法としては、NIC 名を使う手があります。

Get-NetAdapter -Name "イーサネット 2" | New-NetIPAddress ...

 

Default NIC 名だと識別が難しいので、NIC 名を変更することが多いですねよね。
そんな時は、Rename-NetAdapter で NIC 名を変更します。

Get-NetAdapter -Name "イーサネット 2" | Rename-NetAdapter -NewName "NIC01"

 

DHCP で配布されたドメイン名を使って NIC を特定する

複数セグメントに足を出している環境の場合、僕が良く使う手は DHCP を配置してドメインを指定し、そのドメイン名を見て NIC 特定します。

DHCP で配布されたドメイン名を取得するには WMI の Win32_NetworkAdapterConfiguration の DNSDomain を使います。

特定できた NIC の MAC アドレスを使って IP アドレス設定します。

こんな感じですね

# ドメイン名が一致した NIC
$NIC = Get-WmiObject Win32_NetworkAdapterConfiguration | ? DNSDomain -eq "Internal_Segment"

# その NIC の MAC Address
$MACAddress = $NIC.MACAddress

# 形式変更( : を - に 変更)
$MACAddress = $MACAddress.Replace(":", "-")

# MAC アドレスを指定して NIC を特定
Get-NetAdapter | ? MacAddress -eq $MACAddress | New-NetIPAddress ...

 

IPv4 アドレスの設定

IPv4 アドレスの設定は New-NetIPAddress -AddressFamily IPv4 で設定します。

こんな感じです

Get-NetAdapter | New-NetIPAddress -AddressFamily IPv4 -IPAddress 192.0.2.10 -PrefixLength 24 -DefaultGateway 192.0.2.254

 

IPv6 アドレスの設定

IPv6 アドレスの設定は New-NetIPAddress -AddressFamily IPv6 で設定します。

 

同一プレフィックス内の DefaultGateway を指定する場合


同一プレフィックス内の DefaultGateway を指定する場合の オプションは IPv4 と同じです。

Get-NetAdapter | New-NetIPAddress -AddressFamily IPv6 -IPAddress 2001:DB8:400:0:a90c:3ea4:52b0:5e03 -PrefixLength 64 -DefaultGateway 2001:DB8:400:0:fcc9:8445:7ac8:1492

 

リンクローカルアドレスを DefaultGateway に指定する場合

IPv6 環境の場合、DefaultGateway にリンクローカルアドレスを指定することが多いのですが、New-NetIPAddress ではプレフィックスが異なるので受け付けてくれません。

この問題を解決するには、New-NetRoute を使って、デフォルトゲートウェイを別に設定します

# IPv6 Address 設定
Get-NetAdapter | New-NetIPAddress -AddressFamily IPv6 -IPAddress 2001:DB8:400:0:a90c:3ea4:52b0:5e03 -PrefixLength 64

# Default Gateway 設定
Get-NetAdapter | New-NetRoute -AddressFamily IPv6 -DestinationPrefix ::/0 -NextHop fe80::1

 

自動構成されたIPv6アドレスを無効にする

RA 環境では、RA による 自動構成 IPv6 アドレスも割当たってしまうので、Set-NetIPInterface で自動構成を停止します。

Set-NetIPInterface は NIC の特定は不要です。
(IPv6 アドレスを設定する前に停止しないと IPv6 アドレス設定がエラーになります)

Set-NetIPInterface -RouterDiscovery Disabled

 

参照 DNS 設定

参照 DNS の設定は Set-DnsClientServerAddress で設定します。

Set-DnsClientServerAddress は IPv4 / IPv6 混在で指定できます。

Get-NetAdapter | Set-DnsClientServerAddress -ServerAddresses 192.0.2.1, 192.0.2.2, 2001:DB8:400:0::1, 2001:DB8:400:0::2

 

設定を解除する

以下で設定を解除することができます。

# DNS設定の解除
Get-NetAdapter | Set-DnsClientServerAddress -ResetServerAddresses -confirm:$false

# IPアドレス設定の解除
Get-NetAdapter | Remove-NetIPAddress -confirm:$false

# DHCP Client 有効
Get-NetAdapter | Set-NetIPInterface -AddressFamily IPv4 -Dhcp Enabled

# デフォルトゲートウェイの解除(IPv4)
Get-NetAdapter | Remove-NetRoute -DestinationPrefix 0.0.0.0/0 -confirm:$false

# デフォルトゲートウェイの解除(IPv6)
Get-NetAdapter | Remove-NetRoute -DestinationPrefix ::/0 -confirm:$false

# 自動構成 IPv6 アドレス有効
Set-NetIPInterface -RouterDiscovery Enabled

# NIC 再起動
Get-NetAdapter | Restart-NetAdapter

 

back.gif (1980 バイト)

home.gif (1907 バイト)

Copyright © MURA All rights reserved.