Windows OSでは、デフォルトゲートウェイの指定は1つだけが有効である。複数のネットワークインターフェースを持つシステムでは、二つ目のデフォルトゲートウェイ指定は冗長対策として利用される。もし2つのルートを使い分けたければ、ルーティング指定を明示的に行う必要がある。
対象OS:Windows XP/Windows Vista/Windows 7/Windows 8/Windows 8.1/Windows Server 2003/Windows Server 2008/Windows Server 2008 R2/Windows Server 2012/Windows Server 2012 R2
Windowsシステムに装着したネットワークインターフェースに対してTCP/IPの設定を行う場合、IPアドレスやサブネットマスクなどの他に、「デフォルト ゲートウェイ」情報も設定する必要がある。デフォルトゲートウェイとは、ネットワークパケットのデフォルトの宛先として指定するルーター(のIPアドレス)のことだ。スタンドアロンのLAN環境でない限り、必ず指定する必要があるだろう。
TCP/IPでは、「IPアドレス」(と「サブネットマスク」情報)に基づいてIPパケットの送信先を決定している。もしパケットの送信先がLAN上のホストならば、IPパケットは直接その宛先へと送信される。
しかしネットワークアドレスが異なる場合は(この画面例で言えば10.20.0.0〜10.20.255.255以外への送信)、デフォルトゲートウェイとなっているルーターへパケットを送信するだけで送信操作は完了となる。その後はルーターが実際の宛先のホストまでパケットを届けることになる(同一ネットワークであるかどうかはネットワークアドレス部が同じかどうかで判断する。ネットワークアドレスについては「基礎から学ぶWindowsネットワーク―1.IPアドレスとは」などを参照)。TCP/IPネットワークでは、このようにしてIPパケットをルーター間で順次転送することにより、1つの巨大なネットワークを構築している。
さて、それではシステムにネットワークインターフェースカードが2つ以上装着されているとどうなるのだろうか?
ネットワークの環境によっては、2つ以上のネットワークへ同時に接続しなければならないことがある。例えば社内用のネットワークシステムとインターネットへのアクセス用のネットワークがセキュリティやネットワーク管理の都合などで分かれている場合や、複数の拠点へのVPN回線などを構築している場合は、管理などの目的でそれらのネットワークへ同時に接続したい場合もあるだろう。
このような場合は、1台のマシンに複数のネットワークインターフェースカードを装着して、複数のネットワークへ同時に接続することになる。
システムに二つ目のネットワークインターフェースを装着すると、それに対してもTCP/IPの設定を行う必要がある。IPアドレスやサブネットマスクなどの値は当然設定しなければならないが(DHCPでもよいが)、「デフォルトゲートウェイ」の値はどうするべきだろうか?
WindowsのTCP/IP設定では、このように各ネットワークインターフェースごとにデフォルトゲートウェイの設定項目があるので、ついそこにも値を設定してしまいがちだ。だが結論からいうと、これは正しくない設定方法である。なぜなら、
デフォルトゲートウェイは、「デフォルト時のパケットの宛先(となるルーター)」を決めるものであり、それはただ1つしかあってはいけないもの
だからである。だから2つの「デフォルト」が存在することはあり得ないはずである。
このことは、デフォルトゲートウェイがどのように使われているかが分かれば理解できるだろう。
以下は、ネットワークインターフェースを1つしか持たないWindows 8.1 PCのルーティングテーブルの例である(「netstat -r」か「route print」コマンドで表示できる)。ルーティングテーブルは、IPパケットの送信先を決めるために使われる内部的な管理テーブルである。システム内部にあるTCP/IPのプロトコルスタックは、このテーブルを参照してIPパケットの送信先を決めている。
C:\>route print -4 …IPv4のルーティングテーブルだけ表示させてみる
=====================================================
インターフェース一覧
3...00 0c 29 c9 21 43 ..Intel(R) 82574L Gigabit Network Connection …これがネットワークインターフェース
1.......................Software Loopback Interface 1
4...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter
=====================================================
IPv4 ルート テーブル
=====================================================
アクティブ ルート:
ネットワーク宛先 ネットマスク ゲートウェイ インターフェース メトリック
0.0.0.0 0.0.0.0 10.20.1.1 10.20.2.123 10 …デフォルトルート
10.20.0.0 255.255.0.0 リンク上 10.20.2.123 266
10.20.2.123 255.255.255.255 リンク上 10.20.2.123 266
10.20.255.255 255.255.255.255 リンク上 10.20.2.123 266
127.0.0.0 255.0.0.0 リンク上 127.0.0.1 306
127.0.0.1 255.255.255.255 リンク上 127.0.0.1 306
127.255.255.255 255.255.255.255 リンク上 127.0.0.1 306
…(中略)…
=====================================================
固定ルート:
なし
C:\>
一番上にある、「ネットワーク宛先」も「ネットマスク」も共に「0.0.0.0」となっている行を見ていただきたい(Windows OSのバージョンによっては「Network Destination」と「Netmask」というふうに英語の場合がある)。この行の「ゲートウェイ」(もしくは「Gateway」)欄に表示されているのが、TCP/IPのプロパティページで入力した「デフォルト ゲートウェイ」の値である。これは、他のどのネットワークアドレス(2行目以下の各行)にもマッチしないIPパケットは、「10.20.1.1」へ送信する、という意味である。
次に示すのは、2つのネットワークインターフェースが装着されたシステムの例である。インターフェースごとに異なるデフォルトゲートウェイを設定している(各インターフェースのデフォルトゲートウェイ設定は「ipconfig /all」コマンドでも確認できる)。
C:\>route print -4
=====================================================
インターフェース一覧
8...00 0c 29 c9 21 4d ..Intel(R) 82574L Gigabit Network Connection #2
3...00 0c 29 c9 21 43 ..Intel(R) 82574L Gigabit Network Connection
1.......................Software Loopback Interface 1
4...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter
12...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter #2
=====================================================
IPv4 ルート テーブル
=====================================================
アクティブ ルート:
ネットワーク宛先 ネットマスク ゲートウェイ インターフェース メトリック
0.0.0.0 0.0.0.0 10.20.1.1 10.20.2.123 10 …デフォルトルート1
0.0.0.0 0.0.0.0 192.168.0.1 192.168.0.121 10 …デフォルトルート2
10.20.0.0 255.255.0.0 リンク上 10.20.2.123 266
10.20.2.123 255.255.255.255 リンク上 10.20.2.123 266
10.20.255.255 255.255.255.255 リンク上 10.20.2.123 266
127.0.0.0 255.0.0.0 リンク上 127.0.0.1 306
127.0.0.1 255.255.255.255 リンク上 127.0.0.1 306
127.255.255.255 255.255.255.255 リンク上 127.0.0.1 306
192.168.0.0 255.255.255.0 リンク上 192.168.0.121 266
…(中略)…
=====================================================
固定ルート:
なし
C:\>
この例では、「ネットワーク宛先」も「ネットマスク」も共に「0.0.0.0」となっている行が2行あることが分かるだろう(1行目と2行目)。つまり、デフォルトが2通りあるということである。
TCP/IPのルーティングという視点から見ると、いずれも対等なのでTCP/IPのプロトコルスタックではどちらか一方だけを正式なデフォルトゲートウェイとして扱うことになる。ただし、実際にどちらのルート(インターフェース)がデフォルトゲートウェイになるかは分からない。このnetstatコマンドの表示結果では、上と下という上下関係があるので、上の方(あるいは下の方)が優先されるような気がするかもしれない。だが、それはたまたま表示がそうなっているだけで、どちらが選ばれるかは分からない。
実際のWindows OSのTCP/IPプロトコルスタックでは、内部のインターフェースの登録(活性化)の順番などにも依存しているようであり、はっきりとしたことは言えない。ルーティングの仕様では、右端に表示されている「メトリック(Metric)」の値を比較して、値の小さい方が優先されることになっている。だが、ご覧の通り、ここではどちらも同じ「10」なので、どちらが選択されるかは分からないし、どちらが選ばれたとしてもそれは正しい動作といえる。
このようにデフォルトゲートウェイの設定は、UI上では各TCP/IPのインターフェースごとに可能だ。しかし正しい設定方法としては、どれか1つのインターフェースでのみこの値を設定し、その他のインターフェースでは未記入(空白)のままにしておく。そうするとデフォルトルートがただ1つだけに決まり、常に正しく管理者の意図した通りのルーティングが行われるようになる。
WindowsのTCP/IPプロパティ画面では、インターフェースごとにデフォルトゲートウェイを指定できるだけでなく、[詳細設定]ボタンをクリックして、それぞれのインターフェースごとにさらに「複数」のデフォルトゲートウェイを指定することもできる。これは実は「ゲートウェイの冗長化(耐障害性の向上)」のために用意されている機能である。少し分かりづらいが、複数のルートを定義するためではなく、あるデフォルトゲートウェイが利用できない場合に、「代替として」利用するゲートウェイを設定するものである。
Windows OSのTCP/IPでは、常に1つのデフォルトゲートウェイしか利用しない。しかし現実には、次のような理由でそのデフォルトゲートウェイへの送信ができなくなることがある。
そんなときWindowsは、代替として指定されている2番目のゲートウェイを新しいデフォルトゲートウェイにする(2番目がダウンしたら、今度は3番目→4番目→……→最初のゲートウェイ、というふうに循環する)。このような場合に備えて、複数のゲートウェイを指定できるようになっている。
ただしこの自動切り替え機能が働くためにはいくつか条件がある。まず、ゲートウェイの自動切り替え機能はTCP通信でしか行われない。UDPやICMPの通信では、ゲートウェイがダウンしていてもデフォルトゲートウェイの自動切り替えはしないし、自動再送信も行わない(UDPやICMPではもともと通信パケットの到達性は保証されていない)。
また、一度切り替わったデフォルトゲートウェイが自動的に元のデフォルトゲートウェイに戻ることもない(元のインターフェースが回復したからといって、最初のデフォルトゲートウェイに戻ることはない)。元に戻すためにはシステムの再起動が必要である。詳細については以下のサポート技術情報などを参照していただきたい。
以上のような事情があるため、もしデフォルトゲートウェイを2つ(以上)設定するのなら、そのいずれのルートを通っても、目的とする宛先へ到達できるようなルートを設定しなければならない。片方はインターネットへつながっていて、他方はローカルのネットワークへしかつながっていない、というようなネットワークを、2つのデフォルトゲートウェイとして指定してはいけない。
例えばインターネットへのルートをデフォルトゲートウェイとして指定するのなら、いずれのルートを通ってもインターネットへ到達できるような、2つのルーターをデフォルトゲートウェイとして設定する(同じネットワークアドレス上のIPアドレスを利用するなら、両方に同じゲートウェイを設定してもよい)。
インターネットとイントラネットワークに対して別々のネットワークインターフェースを用意して使い分けたい場合は(つまり、両者の間でのルーティングはせず、単に分離した2つのネットワークへ同時接続するという用途では)、どちらか一方のデフォルトゲートウェイだけを設定して、他方は個別のルーティング設定で対応するとよいだろう。
この例では、デフォルトゲートウェイがインターフェース1側(左側のインターフェース)になっているので、インターネットに対するアクセスは何の問題もなく行えるだろう。イントラネット側に対するルーティングは、インターフェース2側(右側のインターフェース)のデフォルトゲートウェイ設定ではなく、ルーティング情報の設定によって行う。つまり、社内側の全ネットワークアドレスの情報(例:10.0.0.0/8、172.16.0.0/12、192.168.0.0/16など)をルーティングテーブルに手動設定するか、RIPなどでルート情報を自動設定する。
ルーティングテーブルに静的ルートを設定するには「route add」コマンドを使って宛先ネットワークごとにゲートウェイ情報を追加する。ただし、単にroute addコマンドで追加したルートは、システムを再起動するとルーティングテーブルからなくなってしまう。常に同じルートを使いたい場合は「-p」オプション(pは「persistent=持続的な」の略)を指定する必要がある(routeコマンドの詳細についてはTIPS「ルーティングテーブルを操作する」を参照)。
手動設定が面倒なら、RIPのような動的なルーティング情報を受け取るサービスを利用すればよい。Windows OSでは「RIPリスナー」機能をインストールするとRIP情報を受信して自動的にルーティングを行える。RIPについては以下のTIPSも参照していただきたい(Windows VistaやWindows Server 2008以降のOSでは、「Windowsの機能の有効化」で追加する)。
ルーティングテーブルを設定する場合は、送信したIPパケットが正しく戻ってくることができるように、(経路途中のルーターにおいて)逆方向のルーティング情報も設定しておく必要がある。具体的な注意点などについては以下のTIPSも参照していただきたい。
■更新履歴
【2014/12/04】Windows Vista/7/8/8.1およびWindows Server 2003/2008/2008 R2/2012/2012 R2向けの記述を追記しました。
【2003/08/23】複数のデフォルト・ゲートウェイに関する記述を、より詳細に加筆しました。
【2002/12/14】初版公開(対象はWindows XP/Windows 2000)。
■この記事と関連性の高い別の記事
Copyright© Digital Advantage Corp. All Rights Reserved.