ネットワークコマンドで管理が変わる!

第7回 netshでTCP/IP設定を管理しよう (その2)


今月のコマンド

netsh (add address/add dns/add wins)

netsh (delete address/delete dns/delete wins)


---------------------------------------------------------------------------

TCP/IP設定を追加するnetshサブコマンド

add address/add dns/add wins

---------------------------------------------------------------------------

add addressコマンドでIPアドレス、デフォルトゲートウェイを追加

前回に引き続きTCP/IP関連のnetshコマンドを解説する。前回はset addressset dnsset winsの各コマンドを説明したが、よく似たコマンドとしてadd addressadd dnsadd winsというコマンドがある。

違いはsetコマンドの場合、既存の設定が上書きされて変更されるのに対し、addコマンドでは既存の設定を残したまま、新たにアドレスを追加する点だ。この辺は実際の画面を見てもらうとわかりやすい (画面1)

add addressコマンドはinterface ipコンテキストとinterface ipv6コンテキスト (Windows XP SP1以降/Server 2003のみ) で使用できるが、コマンドの構文は違っている。interface ipコンテキストの場合は、set addressコマンドと似ているが、source=の指定ができない (source=staticが前提だから)interface ipv6コンテキストの場合は、まったくset addressコマンドと同じ構文だ。したがってinterface ipv6コンテキストの場合の説明は、前回のset addressコマンドの解説を参照していただきたい。以下ではinterface ipコンテキストの場合を説明する。

これらの設定はいずれもTCP/IPのプロパティ画面で設定できるものだが、多数のマシンの設定行う場合はコマンドの方が簡単にできる。ただし、Windows XP/Server 2003TCP/IPのプロパティでは「代替の構成」で、基本的にDHCPを設定しておき、DHCPサーバーが利用不可能の時に、指定した固定アドレスを利用する機能があるが、このadd addressコマンドで同様の設定はできない。


画面1● set addressコマンドとadd addressコマンドの違い


add addressコマンドのヘルプには、「DHCP がインターフェイスで有効な場合は無効になります。」という記述がある。この記述からは「DHCPが有効になっている状態でadd addressコマンドを実行してもadd addressコマンドが無視される」というように読める。しかし、実際にDHCPが有効な状態でadd addressコマンドを実行してみると、結果は、DHCPが解除されて、add addressコマンドで指定したアドレスによる固定アドレスに変更される (画面2)。これはset addressコマンドと同様な動作だ。つまり、ヘルプの説明は「DHCP がインターフェイスで有効な場合にadd addressコマンドを実行するとDHCPが無効になります。」という意味であることがわかる。非常に誤解しやすい説明だ。


画面2● add addressコマンドでDHCPが解除される


 add addressコマンドを使うと1つのインターフェースに複数のIPアドレスを付与することができるが、最大でいくつのIPアドレスを付与できるかは情報がない。筆者が試してみたところ、30IPアドレスを付与しても大丈夫だった (画面3)。これ以上は試していないが、もっと行けそうなので、結局のところ最大数はわからない。複数のIPアドレスが必要になるのは、ルーティングやロードバランシングが目的だろうから、実際に使われるのは多くても2、3だろう。

 add addressコマンドではデフォルトゲートウェイも複数追加設定できる。これも30まで試してみたが、もっと行けそうだ。ただ複数のデフォルトゲートウェイの設定はトラブルの元なのでお勧めはできない。

なお、複数のIPアドレスが設定されている状態でset addressコマンドを使うと、すべてのIPアドレスが解除されて、set addressで指定したIPアドレスだけが残る。特定のIPアドレスだけを変更はできないので、注意して欲しい。


画面3● add addressコマンドで、1つのインターフェースに30IPアドレスを付与してみた


add dns/add winsコマンドで複数のDNS/WINSサーバーを設定

 add dnsコマンドとadd winsコマンドも、set dnsコマンド、set winsコマンドと使い方は似ているが、add dnsコマンド、add winsコマンドでは、2つ目以降のDNSサーバー、WINSサーバーを追加できる点が異なる。add dnsコマンドはinterface ipおよびinterface ipv6コンテキスト (Windows XP SP1以降/Server 2003のみ) で利用でき (構文は同じ)add winsコマンドはinterface ipコンテキストで利用できる。

 DHCPサーバーからDNSサーバーのアドレスを受け取る設定になっている状態で、add dnsコマンドを実行するとDHCPサーバーからのアドレス取得が解除されて、指定したアドレスが固定アドレスとして設定される。ただしIPアドレスやWINSサーバーの設定には影響しない。これはset dnsコマンドと同様の動作になる (画面4)

同様に、DHCPサーバーからWINSサーバーのアドレスを受け取る設定になっている状態で、add winsコマンドを実行するとDHCPサーバーからのアドレス取得が解除されて、指定したアドレスが固定アドレスとして設定される。ただしIPアドレスやDNSサーバーの設定には影響しない。これもset winsコマンドと同様の動作になる。


画面4● DHCPサーバーからDNSサーバーのアドレスを所得する設定になっている状態でadd dnsコマンドを実行するとDHCPからの取得が解除される


DNSサーバー、WINSサーバーを最大いくつ設定できるかは、30まで可能であることを確認したがそれ以上は未確認だ (画面5)。これも通常はせいぜい2,3個設定すればよい。


画面5● add winsコマンドで、1つのインターフェースに30WINSサーバーを設定してみた


 add dnsadd winsコマンドでは追加するサーバーの優先度をindex=パラメータで指定できる。index=パラメータを指定しない場合は、既存のサーバーの最後に追加される。ただ、このコマンドでは、すでに設定されているサーバーの優先度を変更することはできないので、変更するためには、いったん削除して、再度追加しなければならない。

なお、Windows XP SPなしおよびSP1では、add dnsコマンドで2つ目以降のDNSサーバーを指定しても結果にまったく反映されなかったり、dumpコマンドで複数のDNSサーバーがregister=PRIMARYとして表示されるといった不具合がある (画面6) が、SP2で修正されているので、できればSP2以降を適用して欲しい。


画面6● 複数のDNSサーバーを設定すると全部がregister=PRIMARYになってしまった


 複数のDNSサーバー、WINSサーバーが設定されている状態でset dnsまたはset winsコマンドを使うと、すべてのDNSサーバーまたはWINSサーバーの設定が解除され、set dnsまたはset winsコマンドで指定したサーバーだけが残る。特定のサーバーだけを変更することはできないので注意していただきたい。


---------------------------------------------------------------------------

TCP/IP設定を削除するnetshサブコマンド

delete address/delete dns/delete wins

---------------------------------------------------------------------------

delete addressコマンドでIPアドレスを削除

 delete addressコマンドを使うと、インターフェースの特定のIPアドレスおよびデフォルトゲートウェイのIPアドレスを削除することができる。delete addressコマンドはinterface ipコンテキストおよびinterface ipv6コンテキスト (Windows XP SP1以降/Server 2003のみ) で利用できる。使い方は比較的簡単なので、リファレンスを参照していただきたい。注意点は次のとおりだ。

DHCPの場合と固定IPアドレスが1つだけの場合はIPアドレスを削除できない。ただし、デフォルトゲートウェイは最後の1つまで削除することができる。その場合は

delete address “ローカル エリア接続” [gateway=]192.168.10.1

のように指定するか、

delete address “ローカル エリア接続” [gateway=]all

と指定する。


delete dns/delete winsコマンドでDNS/WINSサーバーを削除

 delete dnsコマンドおよびdelete winsコマンドはDNSサーバー、WINSサーバーを削除する。これも使い方は簡単なのでリファレンスを参照していただきたい。delete dnsコマンドはinterface ipおよびinterface ipv6コンテキスト (Windows XP SP1以降/Server 2003のみ) で利用でき (構文は同じ)delete winsコマンドはinterface ipコンテキストで利用できる。注意点は次のとおり。

addr=allを指定すると、すべてのDNS/WINSサーバーが一挙に削除される。

インターフェースのIPアドレスをDHCPで取得する設定になっているときに、最後のDNS/WINSサーバーを削除すると、DNS/WINSサーバーのアドレスもDHCPから取得するように変更される (画面7)


画面7● インターフェースのIPアドレスをDHCPから取得する設定の時に、最後のDNS/WINSサーバーを削除するとDHCPからのアドレス取得に変更される



今月のコマンドレファレンス

Netshサブコマンドリファレンス

add address

[構文1] interface ipコンテキストの場合

add address [name=]String [[addr=]IPAddress [mask=]IPSubnetMask] [[gateway=]IPAddress [gwmetric=]Integer]

指定されたインターフェースにIPアドレスとデフォルトゲートウェアを追加する。DHCPが有効な状態で実行すると制的IPアドレスに変更される。

name : インターフェイス名を指定する。

addr : 追加するIPアドレスを指定する。

mask : 指定されたIPアドレスのサブネットマスクを指定する。

gateway : デフォルトゲートウェイを指定する。

gwmetric : デフォルトゲートウェイのメトリックを指定する。

[実行できるコンテキスト]

interface ip

入力例 : add address "ローカル エリア接続" 10.0.0.2  255.0.0.0

入力例 : add address "ローカル エリア接続" gateway=10.0.0.3 gwmetric=2

[構文2] interface ipv6コンテキストの場合 (Windows XP SP1以降/Server 2003)

add address [interface=]String [address=]IPv6Address [[type=]{unicast | anycast}] [[validlifetime=]{Integer | infinite}] [[preferredlifetime=]
{Integer | infinite}] [[store=]{active | persistent}]

指定されたインターフェースにIPv6アドレスを追加する。時間値は日、時間、分、および秒で指定できる ( : 1d2h3m4s)

interface : インターフェース名またはインデックスを指定する。

address : 追加するIPv6アドレスを指定する。

type : 次の値のいずれかを指定する。

unicast : ユニキャストアドレスを追加する (デフォルト)

anycast : エニーキャストアドレスを追加する。

validlifetime : アドレスが有効な生存期間を指定する。デフォルトはinfinite (無限大)。このパラメータはWindows XP SP2、およびWindows Server 2003 SP1以降でのみ利用できる。

preferredlifetime : アドレスが優先する生存期間を指定する。デフォルトはinfinite (無限大)。このパラメータはWindows XP SP2、およびWindows Server 2003 SP1以降でのみ利用できる。

store : 次の値のいずれかを指定する。このパラメータはWindows XP SP2、およびWindows Server 2003 SP1以降でのみ利用できる。

active: 変更は次の起動時まで有効。

persistent : 変更は固定される (デフォルト)

[実行できるコンテキスト]

interface ipv6

入力例 : add address "プライベート" fe80::2


add dns

[構文]

add dns [name=]String [addr=]IPAddress [[index=]Integer]

DNSサーバーを静的に構成された一覧に追加する。

name : インターフェイス名を指定する。

addr : 追加するDNSサーバーのIPアドレスを指定する。

index : 指定されたDNSサーバーのインデックス (優先順位) を指定する。インデックスを指定しない場合は一覧の最後に追加される。

[実行できるコンテキスト]

interface ip, interface ipv6

入力例 (IPv4) : add dns "ローカル エリア接続" 10.0.0.1

入力例 (IPv4) : add dns "ローカル エリア接続" 10.0.0.3 index=2

入力例 (IPv6) : add dns "ローカル エリア接続" fec0:0:0:ffff::1

入力例 (IPv6) : add dns "ローカル エリア接続" fec0:0:0:ffff::2 index=2


add wins

[構文]

add wins [name=]String [addr=]IPAddress [[index=]Integer]

WINSサーバーを静的に構成された一覧に追加する。

name : インターフェイス名を指定する。

addr : 追加するWINSサーバーのIPアドレスを指定する。

index : 指定されたWINSサーバーのインデックス (優先順位) を指定する。インデックスを指定しない場合は一覧の最後に追加される。

[実行できるコンテキスト]

interface ip

入力例 : add wins "ローカル エリア接続" 10.0.0.1

入力例 : add wins "ローカル エリア接続" 10.0.0.3 index=2


delete address

[構文1] interface ipコンテキストの場合

delete address [name=]String [[addr=]IPAddress] [[gateway=]{IPAddress | all}]

複数の静的IPアドレスまたは複数のデフォルトゲートウェイを持つインターフェースから指定したIPアドレスまたは1つまたはすべてのデフォルトゲートウェイを削除する。ただし静的IPアドレスは最低1つ存在しなければならない。

name : インターフェイス名を指定する。

addr : 指定されたインターフェースから削除するIPアドレスを指定する。

gateway : 次のいずれかの値を指定する。

IPAddress : 削除するデフォルトゲートウェイのIPアドレスを指定する。

all : すべてのデフォルトゲートウェイを削除する。

[実行できるコンテキスト]

interface ip

入力例 : delete address "ローカル エリア接続" addr=10.0.0.1 gateway=all

[構文2] interface ipv6コンテキストの場合 (Windows XP SP1以降/Server 2003)

delete address [interface=]String [address=]IPv6Address [[store=]{active | persistent}]

複数の静的IPv6アドレスを持つインターフェースから指定したIPv6アドレスを削除する。

interface : インターフェイス名を指定する。

address : 指定されたインターフェースから削除するIPv6アドレスを指定する。

store : 次の値のいずれかを指定する。このパラメータはWindows XP SP2、およびWindows Server 2003 SP1以降でのみ利用できる。

active : 削除は次の起動時まで有効。

persistent : 削除は固定される (デフォルト)

[実行できるコンテキスト]

interface ipv6

入力例 : delete address "プライベート" fe80::2


delete dns

[構文]

delete dns [name=]String [[addr=]{IPAddress | all}]

静的に構成されたDNSサーバーを1つまたはすべて削除する。

name : インターフェイス名を指定する。

addr : 次のいずれかの値を指定する。

IPAddress : 削除するDNSサーバーのIPアドレスを指定する。

all : すべてのDNSサーバーを削除する。

[実行できるコンテキスト]

interface ip, interface ipv6

入力例 (IPv4)  : delete dns "ローカル エリア接続" 10.0.0.1

入力例 (IPv6)  : delete dns "ローカル エリア接続" fec0:0:0:ffff::1

入力例 : delete dns "ローカル エリア接続" all


delete wins

[構文]

delete wins [name=]String [[addr=]{IPAddress | ALL}]

静的に構成されたWINSサーバーを1つまたはすべて削除する。

name : インターフェイス名を指定する。

addr : 次のいずれかの値を指定する。

IPAddress : 削除するWINSサーバーのIPアドレスを指定する。

all : すべてのWINSサーバーを削除する。

[実行できるコンテキスト]

interface ip

入力例 : delete wins "ローカル エリア接続" 10.0.0.1

入力例 : delete wins "ローカル エリア接続" all