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

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


今月のコマンド

netsh (set address)

netsh (set dns)

netsh (ser wins)

netsh (pushd)

netsh (popd)


dumpコマンドで作成されたスクリプト

前回のnetshコマンドの概説に引き続き、これから何回かにわたってnetshサブコマンドの活用法について解説する。netshコマンド自体の使い方 (ダイレクトコマンドモードおよびシェルモード) については改めて説明はしないので、前回の記事を参照していただきたい。

前回は、「dump」コマンドでnetshスクリプトを自動生成し、「exec」コマンドあるいは「-f」オプションで復元する方法を紹介した。

まず、このスクリプトに記述されているnetshサブコマンドについて説明しておこう。


# ----------------------------------

# インターフェイス IP 構成        

# ----------------------------------

pushd interface ip

# "ローカル エリア接続" のインターフェイス IP 構成

set address name="ローカル エリア接続" source=static addr=192.168.1.15 mask=255.255.255.0

set address name="ローカル エリア接続" gateway=192.168.1.1 gwmetric=0

set dns name="ローカル エリア接続" source=static addr=192.168.1.1 register=PRIMARY

set wins name="ローカル エリア接続" source=static addr=none

popd

# インターフェイス IP 構成の最後

前回のdumpコマンドで作成されたスクリプト


先頭が#の行はコメント行なので実行には影響しない。実際にこのスクリプトで使用されているnetshサブコマンドは、pushdset addressset dnsset winspopd5つだ。


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

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

set address/set dns/set wins

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

set addressコマンドでIPアドレスを設定

set addressは、TCP/IPのアドレス関連の設定を行うためのコマンドだ。このコマンドは「interface ip」コンテキスト、および「interface ipv6」コンテキスト (Windows XP SP1以降/Server 2003のみ) で利用できるが、若干コマンドの構文が違っている。

interface ip」コンテキストの場合は、set address コマンドで、IPアドレスをDHCPで設定するか固定アドレスにするか、固定アドレスの場合のアドレス、サブネットマスク、デフォルトゲートウェイ、デフォルトゲートウェイメトリックの設定ができる。これはTCP/IPのプロパティ画面でGUIで設定するものと同じだ。

なお、dumpコマンドで作成されたスクリプトでは、sourceaddrmaskの設定とgatewaygwmetricの設定が別々になっているが、これを「set address name="ローカル エリア接続" source=static addr=192.168.1.15 mask=255.255.255.0 gateway=192.168.1.1 gwmetric=0」のように1行で同時に指定してもよい。ただ、すでにsource=dhcpになっている場合に、これを変更せずにデフォルトゲートウェイだけを変更する場合は、このスクリプトの例のように、source=を記述せずに、gateway=以下だけを指定する必要がある。source=staticの場合は、デフォルトゲートウェイだけの変更の場合も1行ですべてを指定できる (画面1参照)。ちょっと変な仕様だ。


画面1● source=dhcpを変更せずにデフォルトゲートウェイだけを変更する場合は、source=を記述せずにgateway=以下だけを指定する


interface ipv6」コンテキストの場合は、GUI画面での設定ができないので、set addressコマンドを使う必要がある。ただし、基本的にIPv6の設定は自動的に行われるので、ユーザーが設定する必要はない (それがIPv6のメリットの1つだ)。手動で設定を行う必要があるのは、ルーターがルーター通知を送信するように構成されていないネットワークの場合だ。set addressコマンドを使うと、IPv6アドレス、ユニキャストアドレスかエニーキャストアドレスか、アドレスが有効な生存期間、アドレスが優先する生存期間、変更を再起動後も有効にするかどうかを設定できる。


set dnsコマンドでDNSサーバーを設定

set dnsコマンドは「interface ip」コンテキストでだけ実行できる、このコマンドでも、TCP/IPのプロパティにおいてGUIで設定できるものと同様のことができる。つまり、DNSサーバーのアドレスをDHCPサーバーから取得するか固定アドレスで指定するか、この接続のアドレスをDNSに登録するかしないか、この接続のDNSサフィックスをDNSに登録するかどうかを指定できる。ただし、set dnsコマンドでは「代替DNSサーバー」の指定やDNSサフィックスの追加などは設定できない。

なお、source=staticを指定して、addr=noneを指定すると、エラーにはならず強制的にsource=dhcpに設定される。これもおかしな仕様だ (画面2)


画面2● source=staticaddr=noneを指定してもエラーにならず、source=dhcpに変更される


set winsコマンドでWINSサーバーを設定

set winsコマンドも「interface ip」コンテキストでだけ実行できる、このコマンドでは、WINSサーバーのアドレスをDHCPサーバーから取得するか固定アドレスで指定するかを設定できる。このコマンドの場合、TCP/IPのプロパティにおいてGUIで設定できる「LMHOSTSの参照」や「NetBIOS設定」ができない。

また、set dnsコマンドと同様に、このコマンドでも、source=staticを指定して、addr=noneを指定すると、エラーにはならず強制的にsource=dhcpに設定される (画面3)


画面3● source=staticaddr=noneを指定してもエラーにならず、source=dhcpに変更される


このようにset addressset dnsset winsコマンドは、ほとんどTCP/IPのプロパティ画面においてGUIで設定する内容と同じものだが、多数のクライアントPCを設定するような場合は、スクリプトが使えることもあって、netshコマンドで設定するほうが圧倒的に簡単になる。

ただ、ここで注意していただきたいことは、これらのコマンドはWindows 2000の場合、「Remote Registry Service」が開始されていないとエラーになる。通常はRemote Registry Serviceが自動で開始されているので問題はないが、セキュリティを高めるためにサービスを停止していると問題が起こる。これはたぶんバグだと思うが、Windows XP/Server 2003ではこの問題は修正されている。

なお、これらのコマンドの構文は、ヘルプで表示されるものが実際と少し違っているので注意していただきたい。筆者が検証した正しい構文は後述のリファレンスを参照されたい。


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

コンテキストの移動に便利なnetshサブコマンド

pushd/popd

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

pushdコマンドでカレントコンテキストを保存し、popdコマンドで復帰

 pushdコマンドとpopdコマンドはUNIX/Linuxを使ったことがある人であれば、ディレクトリの移動のためのコマンドとしてお馴染みだろう。DOSWindows用のツールもある。netshpushd/popdコマンドは、ディレクトリの代わりにコンテキストを移動するために、ディレクトリ移動のpushd/popdコマンドと同様に使用することができる。ただし使い方は、UNIX/Linuxpushd/popdコマンドと少し違うので注意して欲しい。

UNIX/Linuxpushdコマンドでは、パラメータなしの場合、カレントディレクトリを保存すると同時に1つ前のディレクトリに移動するが、netshpushdコマンドでは、カレントコンテキストを保存するだけで移動はしない。なお、ヘルプではpushdのパラメータの説明がないが、実際はパラメータとしてコンテキストを指定できる。パラメータとしてコンテキストを指定した場合は、カレントコンテキストを保存すると同時に指定したコンテキストに移動する。これはUNIX/Linuxpushdコマンドと同様だ。

netshpushdコマンドは、カレントコンテキストをFIFO (先入れ先出し) メモリに順番に保存し、popdコマンドで一番最後に保存したものから順番に復帰する。したがって複数のコンテキストを保存した場合でも、復帰する場合は最近のコンテキストから順番に行われる (画面4)


画面4● pushdで保存したコンテキストは、popdで逆の順番で復帰する


 別にpushd/popdコマンドを使わなくとも、コンテキストを指定すれば移動ができるので、pushd/popdは必ず必要なコマンドというものではないが、覚えておくと操作が楽になる。

なお、Windows 2000の場合は、「pushd xxx」のように、xxxに存在しないコンテキストを指定すると、存在しないxxxコンテキストに移動できてしまう (画面5)。このコンテキストではほとんどのコマンドが使えないが、pushd/popdコマンドは使える。実用にはならないが、遊んでみるのも面白いだろう。ただ、うっかりコンテキストのスペルを間違って存在しないコンテキストに移動してしまい、スペルを間違えたことに気がつかないまま、コマンドが実行できないと慌てることがありうるので注意しよう。Windows XP/Server 2003では存在しないコンテキストには移動ができないように修正されている。


画面5● Windows 2000では、pushdコマンドで存在しないコンテキストにも移動できてしまう



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

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

set address

DHCPから静的モード、または静的モードからDHCPIPアドレスの構成を変更する。または静的IPアドレスを持つインターフェイスにIPアドレスまたはデフォルトゲートウェイを追加する。

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

set address [name=]String [[source=]{dhcp | static [addr=]IPAddress [mask=]IPSubnetMask}]
[[gateway=]{none | IPAddress [gwmetric=]Integer}]

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

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

dhcp : 特定のインターフェイスのIPアドレスの構成元としてDHCPを設定する。

static : IPアドレスの構成元をローカルの静的構成に設定する。

: 次のオプションは、sourceが「static」に設定されている場合に指定する。

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

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

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

none : デフォルトゲートウェイを設定しない。

IPAddress : 設定している静的IPアドレスに対する特定のデフォルトゲートウェイ。

gwmetric : デフォルトゲートウェイのメトリックを指定する。gatewayが「none」に設定されている場合は、このフィールドを設定しない。

実行できるコンテキスト:interface ip

入力例 : set address name=“ローカル エリア接続” source=dhcp

入力例 : set address local static 10.0.0.9 255.0.0.0 10.0.0.1 1

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

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

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

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

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


set dns

DNSサーバーの構成をDHCPまたは静的モードに設定する。

[構文]

set dns [name=]String [source=]{dhcp | static} [[addr=]{IPAddress | none}]
[[register=]{none | primary | both}]

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

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

dhcp : 特定のインターフェースに対するDNSサーバーの構成元としてDHCPを設定する。

static : DNSサーバーの構成元をローカルの静的構成に設定する。

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

IPAddress : DNSサーバーのIPアドレス。 (このオプションは、sourceが「static」に設定されている場合のみ指定できる)

none : DNSサーバーの一覧を消去する。 (sourceを「static」に指定しても、このオプションを指定するとsourceが「dhcp」に設定される)

register : 次のいずれかの値を指定する。(このパラメータはWindows XP/Server 2003でのみ利用できる)

none : この接続のアドレスをDNSに登録しない。

primary : この接続のアドレスをDNSに登録する。

both : この接続のアドレスおよびDNSサフィックスをDNSに登録する。

実行できるコンテキスト:interface ipのみ

入力例 : set dns name=“ローカル エリア接続” source=dhcp

入力例 : set dns “ローカル エリア接続” static 10.0.0.1


set wins

WINSサーバーの構成をDHCPまたは静的モードに設定する。

[構文]

set wins [name=]String [source=]{dhcp | static} [[addr=]{IPAddress | none}]

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

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

dhcp : 特定のインターフェースに対するWINSサーバーの構成元としてDHCPを設定する。

static : WINSサーバーの構成元をローカルの静的構成に設定する。

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

IPAddress : WINSサーバーのIPアドレス。 (このオプションは、sourceが「static」に設定されている場合のみ指定できる)

none : WINSサーバーの一覧を消去する。 (sourceを「static」に指定しても、このオプションを指定するとsourceが「dhcp」に設定される)

実行できるコンテキスト:interface ipのみ

入力例 : set wins name=“ローカル エリア接続” source=dhcp

入力例 : set wins “ローカル エリア接続” static 10.0.0.1


pushd

先入れ先出し (FIFO) スタックに現在のコンテキストを保存し、新しいコンテキストに移動する。

pushdpopdと組み合わせて使用すると、コンテキストの変更、新しいコンテキストでのコマンドの実行、および以前のコンテキストの再開ができるようになる。

構文 : pushd [Context]

Context : 移動先のコンテキストを指定する。

実行できるコンテキスト:すべてのコンテキスト


popd

先入れ先出し (FIFO) スタックからコンテキストを復元する。

popdpushdと組み合わせて使用すると、コンテキストの変更、新しいコンテキストでのコマンドの実行、および以前のコンテキストの再開ができるようになる。

構文 : popd

実行できるコンテキスト:すべてのコンテキスト

入力例

次のコマンドを実行すると、ルートコンテキストがinterface ipコンテキストに変更され、静的IPルートが追加された後、ルートコンテキストに戻る。

           netsh> pushd interface ip

           netsh interface ip> set address local static 10.0.0.9 255.0.0.0 10.0.0.1 1

           netsh interface ip> popd

           netsh>