疑問
FTPとNATは相性が悪いと言われるその心は?
回答
NATはメッセージ部分のIPアドレスを変換しないから
以下、補足です。
補足
NATとFTPで通信問題が起きる理由の補足を記しておきます。
FTP通信の特徴として「制御コネクション」と「データコネクション」の二つの接続を用いてデータ転送を行う点があります。
また、FTPには二つの方式があり、アクティブモードとパッシブモードに分かれます。
制御コネクションはどちらもクライアント側から要求しますが、データコネクションをFTPサーバから開始する場合がアクティブモード、データコネクションもクライアントから要求するのがパッシブモードです。
そして、アクティブモードにおいて「回答」に記載した問題が起きます。
というのも制御コネクションを確立する際、クライアント側はサーバ側に対して以下の情報を送付します。
パケット構造 | 情報 |
---|---|
IPヘッダ | クライアント側のIPアドレス |
FTPメッセージ | クライアント側のIPアドレス, ポート番号 |
ここでクライアント側のIPアドレスはNAT前のプライベートアドレスのため、ネットワーク機器によって送信元IPアドレスと送信元ポートが書き換えられ、通信に成功します。
ところが、データ転送フェーズに入るとFTPサーバーは先ほどのFTPメッセージの中に書いてあったIPアドレス目掛けて通信を行う仕様になっています。しかしこのIPアドレスが記載されるのがデータ部分なので一般的には通信機器によるNAT対象外のエリア。
パケット構造 | 情報 | NATされるか否か |
---|---|---|
IPヘッダ | クライアント側のIPアドレス | O |
FTPメッセージ | クライアント側のIPアドレス | X |
よってデータ転送に失敗します。
ちなみに最近はクライアント側からサーバ側へデータコネクションが確立する方式が利用されるため同事象はあまり起きませんが、古いサーバ等が理由でアクティブモードでしか対応していない場合には起こりえます。よってFTP伝送を採用している場合、この動きは頭の片隅に入れておくことをお勧めします。
以上です。