(O+P)ut

OutPut Log by SE in SIer



(O+P)ut

Output Log by SE

FTPで通信エラーが起きるNATユニークな理由

スポンサーリンク

疑問

FTPとNATは相性が悪いと言われるその心は?

回答

NATはメッセージ部分のIPアドレスを変換しないから

以下、補足です。

NATとFTPで通信問題が起きる理由

FTPの特徴として「制御コネクション」と「データコネクション」の二つの接続を用いてデータ転送を行う点があります。

また、FTPには二つの方式があり、アクティブモードとパッシブモードに分かれます。
制御コネクションはどちらもクライアント側から要求しますが、データコネクションをFTPサーバから開始する場合がアクティブモード、データコネクションもクライアントから要求するのがパッシブモードです。

で、アクティブモードにおいて「回答」に記載した問題が起きます。

アクティブモードではサーバはメッセージを見て宛先を決める

制御コネクションを確立する際、クライアント側はサーバ側に対して以下の情報を送付します。

パケット構造 情報
IPヘッダ クライアント側のIPアドレス
FTPメッセージ クライアント側のIPアドレス, ポート番号

ここでクライアント側のIPアドレスはNAT前のプライベートアドレスのため、ネットワーク機器によって送信元IPアドレスと送信元ポートが書き換えられ、通信に成功します。

ところが、データ転送フェーズに入るとFTPサーバーは先ほどのFTPメッセージの中に書いてあったIPアドレス目掛けて通信を行う仕様になっています。ところが、この部分はデータ部分なので一般的にはNAT対象外です。

パケット構造 情報 NATされるか否か
IPヘッダ クライアント側のIPアドレス O
FTPメッセージ クライアント側のIPアドレス X

よってデータ転送に失敗します。

ちなみに最近はクライアント側からサーバ側へデータコネクションが確立する方式が利用されるため、あまり起きませんが、古いサーバ等が理由でアクティブモードでしか対応していないものなどがあれば本事象が発生する場合もあるので、頭の片隅に入れておくことをお勧めします。

以上、ご参考になれば幸いです。


他の記事を読む