Windows OSでTCP/IPなどのネットワーク関係のパラメータの設定をコマンドプロンプトから行うには「netsh」コマンドが利用できる。IPv4アドレスを設定するには「netsh int ip set addr 〜」、DNSサーバなら「netsh int ip set/add dns 〜」と実行すればよい。netshコマンドを活用すれば、ネットワーク関連の設定をバッチファイルなどで自動実行できる。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
対象OS:Windows 10/11、Windows Server 2012/2012 R2/2016/2019/2022
例えばWindows PCを何台もセットアップする際、いちいち「設定」アプリや「コントロールパネル」などのGUIでIPアドレスを設定するのは面倒だ。誤ったIPアドレスを入力する可能性だってある。
このような場合、コマンドラインでIPアドレスを設定できれば、それをバッチファイルなどに記述して自動実行しやすい。その方がGUIよりずっと効率的だ。
Windows OSでは「netsh」という標準装備のコマンドラインコマンドで、TCP/IPパラメータの設定や確認が可能だ。本Tech TIPSでは、このnetshコマンドの基本的な使い方とIPv4アドレスなどの具体的な設定方法、注意点を説明する。
netshコマンドは、ネットワーク全般の制御用のコマンドである。そのため、多くのサブコマンドが用意されている。TCP/IP関連のパラメータは、「interface」コンテキストの中にある、「ipv4」「ipv6」サブコンテキストで設定する。
この例では対話的にnetshコマンドを利用している。その一方で、「netsh interface ipv4 ?」のように、netshコマンドにコンテキストやパラメータを付けて、コマンドプロンプト上から直接実行することも可能だ。この方法は、コマンドをバッチファイル化しておいて、簡単に実行させたい場合に便利である。
またnetshのサブコマンドでは省略形が使える。例えば「interface」は「int」、「address」は「addr」、「config」は「conf」、「ipv4」は「ip」といった具合だ。以下では入力が簡単な省略形でコマンドラインを紹介する。
現在のネットワークインタフェースの状態を確認するには「netsh int ip show 〜」コマンドが利用できる。IPv4アドレスを確認するには、以下のようにshow confサブコマンドを実行するとよいだろう。
netsh int ip show conf
上記のshow confサブコマンドの出力で、「インターフェイスの構成」にある「DHCP 有効:」が「はい」になっている場合は、DHCPによるIPv4アドレスの自動割り当てが有効になっている。これを変更して固定IPv4アドレスを割り当てるには、管理者権限で起動したコマンドプロンプトで、以下のコマンドラインを実行する。
netsh int ip set addr "<インタフェース名>" static <IPv4アドレス> <ネットマスク> <ゲートウェイ> <メトリック>
<インタフェース名>は上の例なら「イーサネット」となる。これは「netsh int ip show int」でも確認できる。
<メトリック>とは、インタフェースの優先度を表す数値で、同じネットワークに属するインタフェースが複数ある場合、数値の小さい方が優先される。<メトリック>を省略すると、インタフェースのタイプ(速度)に応じて適宜割り当てられる。
set addrサブコマンドでIPv4アドレスを静的に設定した場合、DNSサーバも自動的に静的設定に切り替わり、結果として未設定の状態に変わってしまうことがある。そのため、必ずDNSサーバも静的かつ明示的に設定する必要がある。その方法はすぐ後で説明する。
IPv4アドレスをDHCP割り当てに戻すには次のようにする。
netsh int ip set addr "<インタフェース名>" dhcp
以上の操作でIPv4アドレスは変更されたものの、DNSサーバについては未設定になってしまうので、改めて設定し直す(これも管理者権限でコマンドプロンプトを起動する必要があるので要注意)。
冗長性を確保するため、一般的にDNSサーバは複数台用意されていることが多い。このような場合、最初の1台は「netsh int ip set dns 〜」コマンドで割り当て、追加の分は「netsh int ip add dns 〜」コマンドで割り当てる。
netsh int ip set dns "<インタフェース名>" static <プライマリDNSサーバのIPv4アドレス> primary
netsh int ip add dns "<インタフェース名>" <セカンダリDNSサーバのIPv4アドレス>
上記の例で1台目(プライマリ。「172.16.1.11」の方)のコマンドラインを実行すると、その時点で2台目の設定は自動的にクリアされ、未設定の状態になる。そのため、2台目(セカンダリ)のDNSサーバの設定が既に済んでいる場合でも、1台目の設定をしたら、必ず2台目のコマンドラインも実行して設定し直す必要がある。
dnsサブコマンドで指定したIPv4アドレスにDNSサーバが存在しない場合、netshコマンドは「構成されたDNSサーバが正しくないか、存在しません。」というメッセージを返す(ただし、設定自体は正しく実行される)。このメッセージ表示を止めたいなら、上記のコマンドラインの最後に半角スペースと「validate=no」というオプションを加えるとよい。
DNSサーバの指定をDHCP割り当てに戻すには次のようにする。
netsh int ip set dns "<インタフェース名>" dhcp
上記のdnsサブコマンドの正式名称は「dnsservers」である。ヘルプなどを参照する際には「dnsservers」で探すこと。
企業内システムなどでWINSサーバ(Windowsネットワーク固有のコンピュータ名とIPv4アドレスを管理するサーバ)が運用されているなら、以下のようにnetshコマンドでWINSサーバの固定IPアドレスをWindowsクライアントPCに割り当てられる。
netsh int ip set wins "<インタフェース名>" static <プライマリWINSサーバのIPv4アドレス>
netsh int ip add wins "<インタフェース名>" <セカンダリWINSサーバのIPv4アドレス>
WINSサーバの指定をDHCP割り当てに戻すには次のようにする。
netsh int ip set wins "<インタフェース名>" dhcp
上記のwinsサブコマンドの正式名称は「winsservers」である。ヘルプなどを参照する際には「winsservers」で探すこと。
ここまでの解説は全てIPv4アドレスが対象である。
IPv6アドレスを設定するにはipv6サブコンテキスト、すなわち「netsh int ipv6 〜」というコマンドラインを別途実行する必要があるので注意してほしい。なお、これはゲートウェイやDNSサーバについても当てはまる(IPv6については「Windows管理者のためのIPv6入門」参照のこと)。
IPアドレスをスクリプトなどで自動設定したい場合、netshコマンド+バッチファイルより、以下のようなPowerShellコマンドレットを活用してスクリプトを組んだ方が簡単かもしれない。言語としてエラー処理や例外処理などが整っているからだ。
■更新履歴
【2023/01/18】Windows 11などの最新OSに対応しました。
【2019/12/18】Windows 10などに対応しました。
【2010/02/05】初版公開。
Copyright© Digital Advantage Corp. All Rights Reserved.