LoginSignup
0
2

More than 3 years have passed since last update.

AWS EC2からFTP アクティブモードでファイル転送する

Last updated at Posted at 2020-03-27

問題になる部分

昨今では使われることもなくなってきたと思われるFTPですが、このFTPは環境によって微妙に使いにくいプロトコルであります。
その原因としてはアクティブとパッシブの2つのモードの存在があります
違いは以下のページが分かりやすいです。
https://www.infraexpert.com/study/tcpip20.html

アクティブモードは環境によって使えないケースが多く(特に所謂NAT越えの場合)、AWS EC2インスタンスからインターネット上のFTPサーバーに通信する時もうまくいきません。
パッシブモードで使えればいいのですが、アクティブモードしか受け付けていないサーバーというのもあるので、どんな状態になっているかちょっと調べてみました。

パケットのキャプチャ

EC2インスタンスにログイン
まずは普通にログインします。

その後、FTPの通信を確認する為にtcpdumpを実行

sudo tcpdump -A -p host xxx.xxx.xxx.xxx

オプション -A はAsciiで出力。文字列で読めるところは文字列になります。

-p は自ホストに関連する通信のみ出力。
host でターゲットのIPを指定。
そうするとこんな表示が出てくるところがあります。

PORT 192,168,1,1,228,200

前半4個の数字がIPアドレス、後ろ2つがポート番号。
ポート番号は最初の数字に256をかけて次の数字と足したものになる。
この場合は
228 * 256 + 200 = 58568

今回の問題はIPアドレスの方です。

送信できない原因

EC2インスタンスに割り当てられたプライベートIPを送っているのですが、AWSがこの辺りをよしなに変換してくれるということはなく、相手側は送られたプライベートIPに接続しようとします。

その結果、当然接続できないので通信が正常に行えないという事になるのでした。

PORTコマンドのIPを外に出て行くときのグローバルIPに変更すれば接続できそうですが、よく入っているFTPクライアントでは変更ができません。

他のコマンドで対応してみる

この状態でFTP転送する場合、コマンドレベルであればlftpというコマンドを使うのが便利です。
インストールはyumで可能です。

sudo yum install lftp

使い方はこんな感じ

# まずは接続先を指定
lftp example.jp
# userコマンドでユーザー指定
user hogehoge
# パスワードを聞かれるので入力
Password:
# パッシブモードをオフにする
set ftp:passive-mode off
# 相手に送るグローバルIPを指定
set ftp:port-ipv4 xx.xx.xx.xx

これでアクティブモードで使えました。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2