質問: 複数のFTPサーバーを運用したい LAN内にfileserverAとfileserverBがあります。 AはNAS(Netgear ReadyNAS 104)のFTPサーバー機能、BはWindowsServer2003にFileZillaサーバーをインストールしています。 現在Bを運用中で、ddoで取得したドメインhoge.ddo.jp:21をBに割り当てています。 AのNASにftp.hoge.ddo.jpを割り当てたく、ルーター(RV-230NE)のポートフォワードで21以外を指定して運用することを思いついたのですが、 Q1.通常21にして運用するFTPを他の番号で指定して想定される不具合・不都合 Q2.別の方法(予算はかけられません) が知りたいです。 よろしくお願いします。
回答: > AのNASにftp.hoge.ddo.jpを割り当てたく、ルーター(RV-230NE)のポートフォワードで21以外を指定して運用することを思いついたのですが、 > > という事は、A は NAT するルータの背後にある、ということですよね。 NAT の背後に FTP サーバがある場合、FTP クライアント側が NAT されない場合を除いて、実際のファイル転送は出来ません。これは、21 番ポートを別のポート、とは無関係で、NAT ルータの 21 番ポートを、A の 21 番ポートに割り当ててもダメです。 理由を書くと長くなるのですが、ちょっと解説すると、まず、FTP のデータ転送用の TCP コネクションは、この 21 番ポートのコネクションとは別のコネクションを必要とします。 この転送用コネクションは、FTP サーバから FTP クライアントへ接続する Active モードと、FTP クライアントから FTP サーバへ接続する Passive モードがあります。 一般に、FTP クライアントが NAT の背後にある場合、FTP サーバから FTP クライアントへの TCP コネクションが成立しないので、Passive モードを使う必要ある、という話があります。 Active モード、Passive モードのいずれの場合でも、転送用コネクションの接続先ポート番号は、その都度変わります。 アクティブFTPとパッシブFTP Active モードであれば、クライアント側がサーバに対して「このアドレスのこのポート番号に接続して下さい」という事を通知します。 Passive モードであれば、サーバ側がクライアントに対して「この転送用コネクションは、このポート番号に接続して下さい」と通知します。 FTP の転送用コネクションのポート番号が 20 だと言われていて、よく誤解されるのですが、この 20 番は宛先ポート番号ではなく、接続元ポート番号なので、宛先ポート番号は都度選択されます。 また、Active モードでクライアントが通知する中に IP アドレスも含まれているので、クライアント側が NAT されていると、たとえ1対1 NAT で全ポートアクセス可能であっても、コネクションが成立しません(クライアントから通知されるアドレスは NAT 前のアドレス)。 といった具合に、FTP は NAT との相性が極めて悪いです。 一番シンプルな解決方法としては、A と B の間で VPN を作ってしまう方法です。 ReadyNAS 上に PPTP サーバを立てる方法はあるようです。 VPN - kominaのメモ帳 RV-230NE で内側にある PPTP サーバに接続できるようにする事例がありました。 ひかり電話のルータのポートを解放する - zundairo これらが出来れば、B から RV-230NE のグローバルアドレス宛に PPTP で接続した後、A のプライベートアドレスに対して FTP が可能になります。 あと、原理的には Passive モードで FTP サーバが通知するポート番号を一つに制限して、そのポート番号を NAT ルータで開ける、という事も可能ですが、ReadyNAS で実現できるかは分かりません。 ルータが賢いルータで、FTP の通信の時だけ特別扱いして辻褄が合うようにしてくれるものもありますが、RV-230NE にそれが出来るかは疑問です。