ftpのEPRT/EPSV mode

ubuntucurlftp接続すると、なんか遅いなーと思ってftp serverのlogを調べるとEPSVで接続してきていた。EPSVによる接続失敗の後、PASVで再接続してきているのを発見した。

はて?EPSVとはナンダ??

EPRT/EPSV

EPRT/EPSVは従来のPORT/PASV modeの拡張らしい。

Passive modeの拡張らしいんだけど、途中のNAPT ルータとかが解釈してくれないとかが原因で、clientからはtimeout起こすことがあるらしい。curlもEPSVで失敗した後、PASVで再接続する(再接続するかはcilent依存)。

対策

timeoutして再接続するのは嫌だ、という場合はとりあえず

  1. ftp server側でEPSVを拒否する
  2. ftp client側でEPSVを使わずに接続する

のどちらかをすれば良いらしい。

ex)
<Limit EPSV>
  DenyAll
</Limit>

$ curl --disable-epsv ftp://example.com/