異種なるFTPのサーバ公開方法

FTPとは

今さら言わなくてわかるだろうが、FTPとはFile Transfer Protocolの略でファイル転送に使用するTCP/IPのアプリケーション層に属するプロトコルである。主要プロトコルの一つだろう。

異種?なるFTPについて

HTTPやSMTPなど、殆どのプロトコルは1つのコネクションで通信が完了する。だが、FTPは2つのコネクションを使用している。1つは、制御コネクション、もう1つはデータコネクションだぁ。
通常のプロトコル
通常のプロトコルは1つのコネクションで完結
FTPプロトコル
FTPは制御コネクションとデータコネクションの2つを使用する

2つのコネクションについて

  • 制御コネクション

    制御コネクションとは主に認証や各種コマンド実行を行う

  • データコネクション

    転送するデータを扱う。PORT/ActiveモードとPASSIVEモードの2種類がある

簡単に言ってしまえば、制御コネクションでputやgetなどのコマンドを制御して、実際のデータその物はデータコネクションに流れるといった感じになる。

データコネクション

PORTとPASSIVEの2つがあるが、単純にどちらから通信を開始するかがポイントになる。

  • PORT/Activeモード

    2種類の呼び名があるが、通常PORTモードと呼ぶんじゃないかな。。FTPのデフォルトの転送モードになっている。サーバから通信を開始する。デフォルトだとサーバの20番ポートからクライアントの任意のポートにアクセスがくる
    PORTモード

  • Passiveモード

    クライアントから通信を開始する。サーバが指定した任意のポートへクライアントから通信がくる
    Passiveモード

NAT環境での問題

クライアントもサーバもグローバルで接続されていれば、なんら問題ないのだが、どちらかがNAT環境にあると問題がでるのだ。FTPではデータコネクションを始める時に、このIPとポートで接続してくれと言うわけだが、NAT環境だとプライベートIPを相手に教えてしまうのだ。

  • PORTモードの場合

    NAT環境での問題(PORT)

  • Passiveモードの場合

    NAT環境での問題(Passive)

最近のルータは優秀だ

しかし、最近のルータは優秀でFTPの通信があるとIPを書き換えてくれるのだ。すばらしい

  • PORTモードの場合

    優秀なルータ(PORT)

  • Passiveモードの場合

    優秀なルータ(Passive)

こんな感じで得にFTPサーバは意識しなくてもルータが変換してくれる為、そのままFTPサーバを作ればOKですね。

FTPに対応していないルータだったらどうすんだよ

たぶん、あまり無いと思うがこういった場合には、FTPサーバで対応が可能だ。特定のサーバデーモンなら可能である。Proftpdだと、Passiveモードの際に、クライアントに教えるアドレスを指定できる。固定グローバルならそのままIPを書けばOKだが、動的IPの場合ならドメインの指定が可能なのでドメインを書けばOKになる。スタンドアローンで起動すると起動時にIPを取得し、そのまま保持する為、inetかxinet形式にすればコネクションがある度にドメインを解決してくれる。Proftpdの設定はproftpでファイル転送のページを見てくれ。それと、ルータのフィルタやNATの設定も忘れないでねー。

第2の解決策としては、PPPoEをルータではなくサーバで実行する。つまり、サーバにグローバルIPを持たせればいいのだ。しかし、FTPの為にグローバルを持たすってのは正直、お勧めできないな。

結局、PORTとPassiveどっちがいいんだよ

ルータが対応してなければ、Passiveにするしかないのだが、ルータが対応していてればPORT,Passiveモードのどちらがいいのか悩むかもしれないだろう。IPマスカレードしている環境からのクライアントが一般的であり、FTPに対応していないルータもあるかもしれない。それを考えるとPassiveモードでもアクセスは最低限可能にしてあげた方がいいだろう。


debian Valid HTML 4.01 Strict [VALID RSS!]