ネットワークのルーティングは双方向で設定する:Tech TIPS
ルーターはIPパケットのあて先IPアドレスのみを見てルーティング処理を行っている。ルーターに片方向のルーティング情報しか設定されていないと、パケットは相手には届く一方で、戻ってくることができない。ルーティング情報をセットする場合は、片方向だけでなく、逆方向からも到達できるように、経路途中のルーターに設定しておく必要がある。
対象:Windows 2000/Windows XP、Windows Server 2003
IPルーティングとは?
複数のTCP/IPネットワークをルーターで接続してより大きなネットワークを構築する場合、それぞれのルーターにはルーティングを行うための情報、いわゆる「ルーティング情報」を設定する。
ルーティング情報には、あるIPアドレス(のグループ)に対して、どこのインタフェースへ送信すればよいかという情報が記録されている。これらが集まったものがルーティングテーブルである。
ルーターはパケット(IPパケット)を受信すると、どのインタフェースから受け取ったかには関係なく、そのあて先IPアドレスに基づいてパケットを判別し、適切なインタフェースへパケットを送出する。
具体的には、あて先IPアドレスに最もマッチするルートをルーティングテーブルから探し出し、そのエントリに関連付けられているインタフェースへパケットを送出する。これをIPフォワード(IP転送)といい、これを繰り返すことにより、最終的な目的のネットワークまでパケットが届けられる。詳細は連載「基礎から学ぶWindowsネットワーク」の「第9回 IPルーティング」を参照していただきたい。
ルーティング情報は双方向にセットする
ルーティング情報は、各ルーターにそれぞれ設定する必要がある。この情報は、双方向で通信ができるように、それぞれ設定しておかなければならない。片方向のルーティング情報しか設定してないと、IPパケットが戻ってくることができないからだ。
前述のように、IPフォワードでは、「あて先IPアドレス」情報のみが利用される。そのパケットがどのネットワークやどのインタフェースから来たのか、どの経路(ルーター)を経由してきたのか、といった情報は利用されないし、そういった情報が自動的にルーターに蓄積されることもない。そのため、片方向しかルーティング情報が設定されていないと、パケットを送ることはできても戻ってくることができず、通信不能となる。
以下に例を示す。ここには「ネットワークA」「ネットワークB」「ネットワークC」という3つのネットワークがあり、それぞれの間はルーター(R1とR2)で相互に接続されている。ここで、ネットワークA上のコンピュータ「PC-A」からネットワークC上のコンピュータ「PC-C」にパケットを送信するためには、2つのルーターに、「ネットワークCに到達するためのルーティング情報」が設定されていなければならない。
この設定が行われていれば、「PC-AからPC-Cにパケットを送信」することが可能になる。しかし、これだけでは、逆に「PC-CからPC-Aにパケットを送信(返信)」することはできない。逆方向のルーティング情報が定義されていないからだ。
PC-Cからルーター「R2」にパケットを送っても、R2はPC-Aの所在するネットワーク(ネットワークA)へのルーティング情報を持っていないので、送信することができず、エラーとなる(実際には、R2はパケットを単に破棄して、必要ならばPC-Cにエラー情報のICMPメッセージを返すなどの動作をする)。
なお、ここでは「パケットを返信」としたが、実際には、送信も返信も違いはない。ルーターから見れば単なる同じIPパケットであり、あて先が異なるだけでしかないからだ。パケットの内容が要求か返信かといった違いは、上位層(TCPやUDP層)が決めることであり、IP層のレベルで見れば違いはない。
TCPでは双方向通信ができることが必須であるし、UDPを使ったアプリケーションでもUDPパケットが往復することは一般的である。まれに、送信するだけで受信することがないというアプリケーションもある(エラーやログ情報などを一方的に通知するだけ、あるいはマルチキャストで送信するだけのアプリケーションなど)。とはいえ一般的には、パケットの送信と受信がともにできなければ、正しく通信できない。
以上の状態を回避し、正しくパケットがルーティングできるようにするには、次のように、逆方向のルーティング情報もそれぞれのルーターに設定する。
これにより、PC-Aから送信されたパケットはPC-Cに届き、さらに逆方向の通信も可能になる。新しいネットワークを導入する場合は、このように途中に介在するすべてのルーターに対して、適切なルーティング情報をセットしなければならない。
なお以上では、ルーターに対するルーティング情報の設定について述べているが、個別の各コンピュータに対して特殊なルーティング情報を設定する場合でも同様である。例えばPC-Aに対して、「ネットワークD」に向かう特別なルーティング情報を手動で追加した場合、パケットが逆方向からも戻ってくることができるように、途中にあるルーターにルーティング情報を設定する。
pingによる確認
片方向しかルーティングが設定されていないと、例えばpingコマンドでは応答がないというエラーになる(pingコマンドについては、Tech TIPS「『ping』コマンドでネットワークトラブルの原因を調査する」参照)。
C:\>ping 10.2.3.4
Pinging 10.2.3.4 with 32 bytes of data:
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Ping statistics for 10.2.3.4:
Packets: Sent = 4, Received = 0, Lost = 4 (100% loss),
これは、相手のコンピュータが(何らかの理由で)pingに応答しない場合の状態と同じように見える。そのため、相手側のコンピュータの設定が間違っているのではないかと考えてしまうかもしれない。しかし実際には、ルーティング設定が間違っていてもこのような状態になるので、トラブルシューティング時には注意したい。
相手側にまでパケットが届いているかどうかは、例えば相手側でパケットをキャプチャして解析するか、「netstat -s」コマンドでICMPv4の統計情報(ICMP Echosの着信数)の変化などを見れば確認できるだろう(netstatコマンドについては、Tech TIPS「TCP/IP通信の状態を調べる『netstat』コマンドを使いこなす」参照)。
相手側の問題か(ファイアウォールでpingの着信を禁止にしている、あるいはIPアドレス設定が間違っているなど)、それともルーティングの問題かを区別して、適切に対応していただきたい。
■この記事と関連性の高い別の記事
- pingでネットワーク・トラブルの原因を調査する(TIPS)
- ルーティングテーブルを操作する(TIPS)
- デフォルトゲートウェイは1つのみ有効(TIPS)
- IPルーティングを有効にする方法(レジストリ設定編)(TIPS)
- IPルーティングを有効にする方法(Server OS編)(TIPS)
- Windowsのレジストリを設定してIPルーティングを有効にする(WindowsマシンをIPルーターにする)(TIPS)
- Windowsのtracertでネットワークの経路を調査する(TIPS)
- Windowsのpingの-rオプションでパケットの通過ルートを確認する(TIPS)
- ICMPリダイレクト使用時のファイアウォール設定に注意(TIPS)
Copyright© Digital Advantage Corp. All Rights Reserved.