画像やリンクが無効になっている可能性もあるのでご了承下さい。
はじめに
筆者宅のネットワーク環境は PPPoE 接続と DS-Lite 接続による IPv4 通信を併用出来るものにした。
これはネットワーク内に Gateway が 2 つ存在し、どちらを Default Gateway に設定するかで経路が決まる仕組み。
Gateway を手早く切り替えて経路を変えたい場合は、今回作成した PowerShell のスクリプトを実行するだけでもう一方の Gateway に切り替える事が出来るようになる。
PowerShell のスクリプト
作成したスクリプトは以下の通り。
冒頭の変数 $ip4, $if_name, $pppoe, $dslite
を各自適切に設定することで流用が出来るハズ。
保存する時は Windows10 の言語設定に合わせた文字コードで保存する必要がある。デフォルトなら SJIS で。
# IPv4 の経路を PPPoE、DS-Lite 交互に Switch するスクリプト
# ** 要管理者権限 **
$ip4 = "192.168.1.11" # 割り当てている IP アドレス
$if_name = "イーサネット" # Interface の Alias 名。以下のコマンドで確認可能。
# Get-NetIPAddress | sort InterfaceAlias | select InterfaceAlias,IPAddress
$pppoe = "192.168.1.1" # PPPoE 担当 Gateway の IP アドレス
$dslite = "192.168.1.2" # DS-Lite 担当 Gateway の IP アドレス
# Default Gateway の設定値を取得
$a = Get-WmiObject Win32_NetworkAdapterConfiguration | select -ExpandProperty DefaultIPGateway
# 取得した Default Gateway の IP アドレスによって削除/設定する IP アドレスをセット
if ( $a -eq $pppoe ) {
# PPPoE to DS-Lite
$gw_now = $pppoe
$gw_new = $dslite
} else {
# DS-Lite to PPPoE
$gw_now = $dslite
$gw_new = $pppoe
}
# 一旦現在の設定をクリア
Remove-NetIPAddress -InterfaceAlias $if_name -AddressFamily "IPv4" -IPAddress $ip4 -DefaultGateway $gw_now -Confirm:$false
# 新たに設定を行う
New-NetIPAddress -InterfaceAlias $if_name -AddressFamily "IPv4" -IPAddress $ip4 -PrefixLength 24 -DefaultGateway $gw_new
InterfaceAlias は次の様にコマンドを打ち込めば確認が可能。
IPAddress がスクリプトを実行する PC に割り当てられた IPv4 アドレスとなっている行の InterfaceAlias がそれ。大体は「イーサネット」になっていると思う。
Get-NetIPAddress | sort InterfaceAlias | select InterfaceAlias,IPAddress
InterfaceAlias IPAddress
-------------- ---------
Loopback Pseudo-Interface 1 127.0.0.1
Loopback Pseudo-Interface 1 ::1
イーサネット 192.168.1.11
イーサネット 2405:6581:1a80:0:xxxx:xxxx:xxxx:xxxx
イーサネット 2405:6581:1a80:0:xxxx:xxxx:xxxx:xxxx
イーサネット fe80::xxxx:xxxx:xxxx:xxxx
ローカル エリア接続* 1 fe80::xxxx:xxxx:xxxx:xxxx
ローカル エリア接続* 1 169.254.xxx.xxx
ローカル エリア接続* 2 fe80::xxxx:xxxx:xxxx:xxxx
ローカル エリア接続* 2 169.254.xxx.xxx
使い方
上記スクリプトを例えば switch_gateway.ps1
という名前で保存したとすると、次の様にバッチファイルでラップしてあげる。
@echo off
powershell.exe -NoProfile -ExecutionPolicy Unrestricted -File "path\to\switch_gateway.ps1"
そしてこのバッチファイルのショートカットをデスクトップ上に作成し、ショートカットのプロパティーから ショートカット のタブにある 詳細設定 をクリックし、「管理者として実行」にチェックを入れておいてあげる。
こうすることでショートカットをダブルクリックすれば管理者権限でバッチファイルから switch_gateway.ps1
が呼び出されて実行されることとなる。
おわりに
今までは netsh コマンドを用いてバッチファイルを 2 つ用意して Gateway を切り替えていた。
しかし netsh コマンドは将来的に廃止される方向との事だし、PC を再起動すると NIC の IPv4 設定から Gateway の項目が空欄になってしまうので、今後も息が長くなりそうな PowerShell を採用してみた。
PowerShell で設定する分には NIC の設定が飛んだりしなかったので正解だったようで。
コメント