[Network] | ||||||||||||
ネットワークのルーティングは双方向で設定する
|
||||||||||||
|
解説 |
IPルーティングとは
複数のTCP/IPネットワークをルータで接続してより大きなネットワークを構築する場合、それぞれのルータにはルーティングを行うための情報、いわゆる「ルーティング情報」を設定する。ルーティング情報には、あるIPアドレス(のグループ)に対して、どこのインターフェイスへ送信すればよいかという情報が記録されている。これらが集まったものがルーティング・テーブルである。
|
ルータはパケット(IPパケット)を受信すると、どのインターフェイスから受け取ったかには関係なく、そのあて先IPアドレスに基づいてパケットを判別し、適切なインターフェイスへパケットを送出する。具体的には、あて先IPアドレスに最もマッチするルートをルーティング・テーブルから探し出し、そのエントリに関連付けられているインターフェイスへパケットを送出する。これをIPフォワード(IP転送)といい、これを繰り返すことにより、最終的な目的のネットワークまでパケットが届けられる。
ルーティング情報は双方向にセットする
ルーティング情報は、各ルータにそれぞれ設定する必要があるが、この情報は、双方向で通信ができるように、それぞれ設定しておかなければならない。片方向のルーティング情報しか設定してないと、IPパケットが戻ってくることができないからだ。上で述べたように、IPフォワードでは、「あて先IPアドレス」情報のみが利用される。そのパケットがどのネットワークやどのインターフェイスから来たのか、どの経路(ルータ)を経由してきたのか、といった情報は利用されないし、そういった情報が自動的にルータに蓄積されることもない。そのため、片方向しかルーティング情報が設定されていないと、パケットを送ることはできても戻ってくることができず、通信不能となる。
以下に例を示す。ここには3つのネットワークA、B、Cがあり、それぞれの間はルータ(R1とR2)で相互に接続されている。ここで、ネットワークA上のコンピュータPC-AからネットワークC上のコンピュータPC-Cにパケットを送信するためには、2つのルータに、「ネットワークCに到達するためのルーティング情報」が設定されていなければならない。
![]() |
片方向のルーティング情報のみが利用できる状態 |
PC-AからPC-Cへは送信できるが、PC-CからPC-Aへ送信するための逆方向のルーティング情報が利用できないため、パケットは届かない。 |
この設定が行われていれば、「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-CからPC-Aへも正しく届くので、通信が可能。 |
これにより、PC-Aから送信されたパケットはPC-Cに届き、さらに逆方向の通信も可能になる。新しいネットワークを導入する場合は、このように途中に介在するすべてのルータに対して、適切なルーティング情報をセットしなければならない。
なお以上では、ルータに対するルーティング情報の設定について述べているが、個別の各コンピュータに対して特殊なルーティング情報を設定する場合でも同様である。例えばPC-Aに対して、ネットワークDに向かう特別なルーティング情報を手動で追加した場合、パケットが逆方向からも戻ってくることができるように、途中にあるルータにルーティング情報を設定する。
pingによる確認
片方向しかルーティングが設定されていないと、例えばpingコマンドでは応答がないというエラーになる。
C:\>ping 10.2.3.4 |
これは、相手のコンピュータが(何らかの理由で)pingに応答しない場合の状態と同じように見える。そのため、相手側のコンピュータの設定が間違っているのではないかと考えてしまうかもしれない。だが実際には、ルーティング設定が間違っていてもこのような状態になるので、トラブルシューティング時には注意したい。相手側にまでパケットが届いているかどうかは、例えば相手側でパケットをキャプチャして解析するか、netstat -sコマンドでICMPv4の統計情報(ICMP Echosの着信数)の変化などを見れば確認することができるだろう。相手側の問題か(ファイアウォールでpingの着信を禁止にしているとか、IPアドレス設定が間違っているなど)、それともルーティングの問題かを区別して、適切に対応していただきたい。
この記事と関連性の高い別の記事
- IPルーティングを有効にする方法(Server OS編)(TIPS)
- Windowsのレジストリを設定してIPルーティングを有効にする(WindowsマシンをIPルーターにする)(TIPS)
- Windowsのtracertでネットワークの経路を調査する(TIPS)
- Windowsのpingの-rオプションでパケットの通過ルートを確認する(TIPS)
- ICMPリダイレクト使用時のファイアウォール設定に注意(TIPS)
このリストは、デジタルアドバンテージが開発した自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。

![]() |
「Windows TIPS」 |
- Azure Web Appsの中を「コンソール」や「シェル」でのぞいてみる (2017/7/27)
AzureのWeb Appsはどのような仕組みで動いているのか、オンプレミスのWindows OSと何が違うのか、などをちょっと探訪してみよう - Azure Storage ExplorerでStorageを手軽に操作する (2017/7/24)
エクスプローラのような感覚でAzure Storageにアクセスできる無償ツール「Azure Storage Explorer」。いざというときに使えるよう、事前にセットアップしておこう - Win 10でキーボード配列が誤認識された場合の対処 (2017/7/21)
キーボード配列が異なる言語に誤認識された場合の対処方法を紹介。英語キーボードが日本語配列として認識された場合などは、正しいキー配列に設定し直そう - Azure Web AppsでWordPressをインストールしてみる (2017/7/20)
これまでのIaaSに続き、Azureの大きな特徴といえるPaaSサービス、Azure App Serviceを試してみた! まずはWordPressをインストールしてみる
![]() |
|
|
|
![]() |