AWS EC2のインスタンスからアクティブモードしか受け付けていないFTPサーバーと通信する。

今時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

この後は普通に操作が可能なはず。