NATやIPマスカレードによって,LANとインターネットがつながり,Webアクセスや電子メールの送受信などは何の問題もなく使えるようになる。ところが,インターネットと直接つなぐとキチンと動くのに,アドレス変換が介在するとうまく通信できなくなってしまうアプリケーションもある。このような「アドレス変換問題」は,ブロードバンド・ルーターを使う最大の足かせにもなっている。

 攻略編では,今回の特集記事のメイン・テーマである「アドレス変換問題」がどうして起こるのか,そしてこの問題を解決する方策にはどんなものがあるのかを検証する。

データ部にもアドレス情報が入る

図4 IPマスカレードだけでは解決できない問題がある
IPマスカレードは,IPヘッダーとTCP/UDPヘッダーだけを書き換え,データ部分にアドレス情報があっても変換しない。このため,FTPやIP電話などのアプリケーションが動かないことがある。
 アドレス変換を介すと問題を起こす代表的なアプリケーションとしては,FTPIP電話,音声や動画がやりとりできるチャット・ソフトWindowsウインドウズ Messengerメッセンジャなどである(図4[拡大表示])。

 これらに共通する特徴は,IPアドレスやポート番号などのアドレス情報がIPヘッダーやTCP/UDPヘッダー以外の部分にも書き込まれること。つまり,ヘッダー以外の部分である送受信パケットのデータ部分(「ペイロード」ともいう)にアドレス情報が書かれるのだ。

FTPは途中で止まってしまう

 ここでは,アドレス変換問題の典型例として,FTPを例に原因を確認しておこう。FTPはファイルを転送するアプリケーションで,プログラム・ファイルなどをアップロードしたり,ダウンロードするときに使う。最近では,インターネット接続事業者のWebサーバーを間借りして,そこに自分のWebページを公開する際,ページ・データをアップロードするときなどに利用することが多い。

 LAN側のパソコンAにFTPクライアント・ソフト(図4[拡大表示]参照)がインストールされており,インターネット上のFTPサーバーXへアクセスしたとしよう。

 このとき,まずパソコンAからサーバーに向けてパケットが送られる。そして,制御チャネルというコマンドのやりとりなどに使う通信路が確立される。すると,ユーザー名やパスワードが確認される。ここまでなら,通常のNATやIPマスカレードでも問題は起こらない。

 問題を起こすのは,実際にファイルをアップロード/ダウンロードしたり,ディレクトリ一覧を表示させたりしようとしたときだ。FTPでは実際のファイルをやりとりするために,もう一つ別の通信路(データ・チャネルと呼ぶ)を確保しようとする。

 このデータ・チャネルを新設するとき,制御チャネルを使ってパソコンAからデータ・チャネルに使うIPアドレスやポート番号の情報をFTPサーバーXに通知する。このアドレス情報はIPパケットのヘッダー部分ではなくデータ部分に書かれるが,そこにはパソコンAのプライベートIPアドレスなどが入る。

図5 アドレス変換を介すと動かなくなる典型的なアプリケーションFTP
FTP通信は,送受信パケットのデータ部分にIPアドレスやポート番号が書かれ,インターネット側から通信が始まる。このためIPマスカレードを介すと正しく動作しない。
 ところが,通常のアドレス変換はIPヘッダーやTCP/UDPヘッダーのアドレスを書き換えても,データ部分には手をつけない。このため,FTPサーバーに届くパケットのデータ部分には,インターネットにはあり得ないプライベートIPアドレスが書き込まれたままになり,サーバーはこのあとの処理を続けられなくなる(図5[拡大表示])。

 この結果,FTPのクライアント・ソフトはディレクトリ一覧を表示しようとしたり,実際にファイルをアップロード/ダウンロードしようとすると,エラーを起こすことになる。

 さらにFTPのたちが悪いのは,データ・チャネルの通信をサーバー側から始めることだ。準備編でも確認したように,IPマスカレードが動いているルーターは変換テーブルに記録がないポート番号あてのパケットは捨ててしまう。このため,仮にFTPサーバーからうまくファイルのデータを送ることができても,ルーターの部分で破棄されてしまう。

 これらが,アドレス変換問題を起こす典型的な原因である。

解決策は一つではない

 実はアドレス変換問題の解決策は一つではない。大まかに分けてみると,以下の五つがある。

(1)個別対応——さきほど紹介したFTP通信を動かすようにルーターがアプリケーションごとに対応する方法

(2)UPnP対応——最近のブロードバンド・ルーターが対応し始めた機能で,アプリケーションがアドレス変換を考慮して送受信パケットを作る方法

(3)静的IPマスカレード——LAN上のサーバー・マシンをインターネットに公開する方法

(4)GapNATギャップナット——特定のLAN側パソコンだけを特別扱いして,インターネットに直結したように見せかける方法

(5)NATSナッツ——現在,標準化作業中の仕様で,アドレス変換専用の情報を送受信パケット内に付加する方法

 では,これら5種類の解決策を検証していこう。

アプリごとに個別対応する
データ部分まで書き換えて
FTPなどの特定ソフトを動かす

 まず最初は,冒頭で紹介したFTP通信をうまく動かすための対策を検証しよう。FTP対策は,ほとんどのブロードバンド・ルーターが対応しており,今やできて当たり前なので,アドレス変換問題とは無関係だと考えがちだ。しかし,実際のルーターはFTP通信を特別扱いにして,なんとか動くように工夫している。

送受信データの中まで解析

 この問題の解決策は,FTP通信だけを特別扱いにして,個別対応するのが一般的だ。

 では,冒頭で紹介したネットワーク環境を例にルーターがどのようにしてFTP通信を動くようにしているか見てみよう。パソコンAから届いたパケットのTCPヘッダー中のあて先ポート番号を見て,ルーターはFTP通信かどうかを調べる。そして,FTP通信だとわかったら,パケットのデータ部分も解析する。データ・チャネルを通知するパケットなら,パソコンのプライベートIPアドレスAと待ち受けポート番号200が書かれているはずだ。

図6 アドレス変換を介してもFTP通信が動くようにする方法
FTP通信を特別扱いにして,ルーターがデータ部分も書き換える。
 そこでルーターは,データ部分に書かれているIPアドレスをAから自身のグローバルIPアドレスGに,ポート番号を200から6000に書き換える。さらに,ポート番号6000あてにインターネットから届くパケットは,パソコンAのポート番号200へ転送するようにルーター自身が持っている対応表に登録する(図6[拡大表示])。

 こうすれば,FTPサーバーXはファイルを転送するデータ・チャネルの通信を始めるために,ルーターGあてにパケットを送り,ルーターはそのパケットを受信したら,パソコンAあてにヘッダーの内容を書き換えて,LAN側に転送できる。

暗号化やマイナーなソフトは無理

 FTP以外では,相手にパケットが届くかを調べるために使うpingピングコマンドを動かすためにも,多くのルーターが個別に対応している。

 しかし,個別対応には限界がある。例えばデータ部分が暗号化されるようなケースだ。暗号化されていたのでは,中身をルーターが解析できないから,書き換えようがない。

 また,ルーターはアプリケーションに応じて一つひとつ個別に対応する必要がある。アプリケーションごとにデータ部分のどこにどんなアドレス情報が入るか違うからである。このため,マイナーなアプリケーションは,対応し切れていないが実情である。

 今のところ,大半のルーターが対応していると言えるのは,FTPとpingくらいだろう。