今時FTPなんて使うのかって話ありますが、まだあるようです。
という訳でこの時の問題がEC2インスタンスというのは直接グローバルIPが割り当てられている訳ではないこと。
FTPの通信をtcpdumpでキャプチャしてみたところ、相手に自分のポートを伝えるPORTコマンドの時にプライベートIPを伝えている。
で、AWS側は勝手にうまくやってくれる…訳ではなく、そのまま通信が途切れてしまう。
標準のFTPコマンドではこれに対応できないようなのでlftpというクライアントを入れる。
単純にyumでインストールできる。
その後、lftpで接続
# hoge.example.jpに接続 lftp hoge.example.jp # userコマンドでユーザー指定 user hoge # passwordを聞かれるので入力
この後にFTPの通信の設定をする。
# パッシブモードをoff (アクティブモードに) set ftp:passive-mode off # ここで外に出て行くときのグローバルIPを指定 set ftp:port-ipv4 xxx.xxx.xxx.xxx
この後は普通に操作が可能なはず。