検証
|
|
|
インターネットとの接続部分にNATルータが存在すると、どうしてVoIPクライアントが接続困難になるのかを考えるため、NATの仕組みについてみてみよう。ただし話を簡単にするため、ここではUDPパケットについてのみ解説しておく。
UDPとは?
|
UDPは、TCP/IPにおける基幹プロトコルの1つであり、データグラム型の通信を行うために利用される。データグラム型の通信とは、TCPのような事前のセッション確立なしに、データを送信するためのプロトコルである。UDPでは「信頼性はない」ながらも、軽量で高速なプロトコルを目指して設計されている。実際には、下位のIPプロトコルの機能をほぼそのまま利用するためのプロトコルである。
UDPパケットの構造 |
UDPパケットには送信元とあて先のIPアドレス、ポート番号の情報が含まれている。送信されたパケットは、あて先IPアドレスに基づいてルーティングされ、相手ノードまで届いた後は、あて先ポート番号に基づいて、そのポートをリッスンしているアプリケーショにまで届けられる。なお実際には、IPアドレス情報はIPパケットに含まれており、その上位プロトコルであるUDPにはポート番号しか含まれていないが、ここでは分かりやすく配置し直している。 |
UDPによる双方向通信とファイアウォール
UDPを使った通信には、片方向通信と双方向通信の2種類がある。データを送信するだけで、それに対する応答を必要としない用途では(例えばエラーやイベントなどの通知やマルチキャスト送信など)、データを一方的に送信するだけで構わない。
だが一般的なアプリケーションでは、UDPパケットを送信すると、それに対する応答パケットを受信するようになっている。この場合、送信パケットと受信パケットでは、あて先ポートと送信ポート番号(およびあて先と送信元のIPアドレス)が入れ替わった状態で戻ってくるのが一般的である。
UDPの送受信 |
UDPで送信したパケットに対する応答は、一般的には、ポート番号を入れ替えた形で戻ってくる。例えばノードBBBBのポート2345番にUDPパケットを送信すると、返信パケットの送信元ポート番号は2345番になる。 |
ファイアウォールやNATルータでUDPパケットを通過させる場合は、送信したUDPパケットの情報(送信元や送信先のIPアドレスとポート番号の対)を覚えておき、それに対する応答パケットだけを通すように、フィルタを一時的にオープンする。こうしないと、まったく無関係なUDPパケットを通過させてしまい、システムが外部から攻撃される危険性がある。
NATルータでUDPパケットを通過させる
NATルータは、アドレス変換(NAT:Network Address Translation)機能を持たせたルータであり、一般的にはプライベートIPアドレスを使って構築されたネットワークをインターネットに接続する際に利用する。ローカルのコンピュータから送信されたパケットをNATルータでグローバルIPアドレスを持つパケットに変換し、インターネット上のコンピュータへと送信する。インターネットではプライベートIPアドレスは利用できないからだ。
このNATルータとUDPパケットを組み合わせた場合の通信は、次のようになる。
NATルータを使ったUDP通信 | |||||||||||||||
インターネットではローカルIPアドレスを使うことはできないため、そのようなIPアドレスを持つパケットを送信する場合は、グローバルIPアドレスに書き換えてから送信しなければならない。一般的には、内部ネットワーク上のIPアドレスは、すべてルータに与えられたグローバルIPアドレス(図中のCCCC)に変換してから送信する。また、送信したUDPへの返信に備えて、どのIPアドレス(およびポート番号)を何に変換したかをNATテーブルに記録しておく。そして返信パケットを受け取った場合、NATテーブルに一致するエントリがあれば、元のIPアドレスとポート番号に戻して、内部ネットワーク上のノードへ届ける。 | |||||||||||||||
|
この図のNATルータでは、内部ネットワークからインターネットへ送信するときに、UDPパケット中の送信元のIPアドレス部分を書き換えている(AAAA→CCCC)。これにより、ノードBBBBに送信されるUDPパケットには、グローバルIPアドレスしか含まれず、インターネット上で正しくルーティングすることができる。
逆にインターネットから戻ってくるUDPパケットについては、NATテーブルのエントリに存在していることを確認後、あて先のIPアドレスを内部ネットワーク上のプライベートIPアドレスに書き換えて(CCCC→AAAA)、元のノードAAAAへ転送している。
■NATタイプとポート番号変換
以上がNATの簡単な動作原理であるが、ここでは、ポート番号についてはそのまま通過するものとしていた(図中の1234や2345のこと)。だが、NATのアルゴリズムによっては、NATルータの通過時に(送信元の)ポート番号の変換まで行うものがある。一般的には、送信元のポート番号はあて先ポート番号ほどには重要ではないからだ。また、複数のノードからの通信を同じあて先(IPアドレス:ポート番号)に送信する場合、通信元を区別するためには、異なる送信元ポート番号を使わなければならない。
このようなタイプのNATルータを使っていると、あて先に届いたときのUDPパケットの状態が意図したものとは異なるため、2つのノード間でのUDP通信を行うことはできない。Skypeではこの場合、UDPではなく、スーパー・ノードを経由したTCP通信を利用する。
INDEX | ||
[検証]ネットワーク管理者のためのSkype入門 | ||
第2回 Skypeの通信メカニズム | ||
1.Skypeの通信開始処理 | ||
2.Skypeの高い接続性の秘密 | ||
コラム: NATルータとUDP | ||
「検証」 |
- 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をインストールしてみる
|
|