2014年6月28日土曜日

IPv4のIPアドレスの優先順位を、IPv6よりも高く変更する方法

IPアドレスというと、192.168.1.1みたいな32bit方式のIPv4がおなじみですが、ご存知の通りアドレスの数が枯渇しているので、(Windowsで言えば)7の世代からは、128bitのIPv6も併用されていますね。

しかし、実は、併用ではあるのですが、IPv4よりもIPv6を処理する優先順位の方が高いようになっているんですね。

たとえば、
PING LOCALHOST
ってすると、ループバックアドレスはIPv4の「127.0.0.1」ではなくて、IPv6で返されるのが分かります。

たとえば、仕事なんかで、過去のアプリケーションを最新のシステム上で実行しなければならない・・・というような時、そのアプリケーションの設計が、「取得されるIPアドレスは絶対にIPv4である」という前提でガチガチに固められていたりすると、結構きつい。

しかし、じゃあって言って、安易に(もはや標準になっている)IPv6を無効にしてしまうのも、何が起きるか分からずに怖い。

そこで対策としてIPv4の優先順位を、IPv6よりも先に変更して対策しよう、というのが今回の記事の主旨であります。


■優先順位の確認
優先順位の確認は、以下のコマンドで確認出来ます。
NETSH INTERFACE IPV6 SHOW PREFIXPOLICIES
↓結果
優先順位   ラベル  プレフィックス
----------  -----  -------------------------------
        50      0  ::1/128
        40      1  ::/0
        30      2  2002::/16
        20      3  ::/96
        10      4  ::ffff:0:0/96
         5      5  2001::/32

この「優先順位」10、「ラベル」4の、「プレフィックス」::ffff:0:0/96というがIPv4を示しているんですね。

これを最優先位置の優先順位50,ラベル0に移動させるようにすればOKというわけです。


■優先順位の変更コマンド
優先順位の変更には、かなり長いコマンドが必要なので、バッチファイルを作りました。

一回作っておけば、あとはONEDRIVEからでも実行出来るので便利かなぁと。

コマンドは以下の通りで、「IPV4.BAT」(何でも良い)という名前にでもすればOKです(もちろん、コマンドを一つ一つ入力してもOKです)。

NETSH INTERFACE IPV6 SET PREFIXPOLICY ::ffff:0:0/96 50 0
NETSH INTERFACE IPV6 SET PREFIXPOLICY ::1/128       40 1
NETSH INTERFACE IPV6 SET PREFIXPOLICY ::/0          30 2
NETSH INTERFACE IPV6 SET PREFIXPOLICY 2002::/16     20 3
NETSH INTERFACE IPV6 SET PREFIXPOLICY ::/96         10 4
NETSH INTERFACE IPV6 SET PREFIXPOLICY 2001::/32      5 5
NETSH INTERFACE IPV6 SHOW PREFIXPOLICIES
PAUSE IPv4の優先順位をIPv6よりも先になるよう変更しました。



■コマンドの実行
作ったバッチファイルはどこに(ONEDRIVEにでも)保存してOKなのですが、念のため、実行する時は「管理者として実行する」ってしないといけません。

すると、C:\Windows\System32で実行される形になりますね。


コマンド実行後に、再び
PING LOCALHOST
ってすると、今度はループバックアドレスがIPv4で返されるようになりました。

IPv4の優先順位を上げる事で何か弊害があるかも知れない・・・という心配はありますが、IPv6を無効にしているわけではないし、いざとなれば、また優先順位を変えてあげれば良いだけ(だと思う)ので、このまま行ってみようかなと思います。
この設定を、8インチのWindows8.1タブレット「東芝dynabook tab VT484」でもやってみました。


IPv4を優先に変更したら、妙にネットの閲覧がサクサクし始めて、CPUのクロックでも上がったような感覚になっているんですが・・・気のせいではないと思う。