トラブルシューティングのためのFTPプロトコル解説

暗号化通信があたりまえの昨今ですが、いまだにFTPが利用される場面が少なくありません。しかしご存じの通りFTPはNAT環境ではトラブルの元となります。

また、FW(ファイアウォール)で遮断されて通信できない、というトラブルもよく発生します。

ジョージ

FTPが出てくると、大抵トラブルが発生します。

そこで、FTP絡みのトラブルシューティングに備えて、インフラエンジニアが知っておくべきFTPプロトコルの動きについてまとめました。

\年収をUPさせたいエンジニア必見/

目次

FTPの2種類の通信「コントロール通信」「データ通信」

FTPには「コントロール通信」と「データ通信」という2種類の通信があります。

コントロール通信

コントロール通信はコマンドの実行要求と応答で利用されます。

FTPログインの様子

FTPクライアントがサーバーへの接続に成功すると、次のような流れでFTPログインがおこなわれます。

FTPログインの様子

FTPクライアントはUSERコマンドでユーザー名を送信し、それを受けてサーバーはパスワードを要求します。FTPクライアントがパスワードを送信し認証に成功するとログイン処理は完了します。

これらはすべてコントロール通信でおこなわれています。

データ通信

データ通信はデータを送受するためのもので「アクティブモード」と「パッシブモード」という2種類の通信モードがあります。

通信モードの違いはコネクションを張る方向の違いです。

アクティブモードとは

アクティブモードはFTPサーバーからFTPクライアントへ向けてデータ通信のための接続を開始します。

アクティブモードでは「データ通信用のIPアドレスとポート番号」をFTPクライアントからサーバーへ通知します。

以下はアクティブモードで mytext.txt というファイルをダウンロードする際のフロー図です。破線がデータ通信をおこなっている箇所です。

アクティブモードで通信している様子

アクティブモードではFTPクライアントはPORTコマンドで接続するべきIPアドレスとポート番号をFTPサーバーへ通知します。

PORT 192,168,0,203,199,239

このコマンドの最初の「192,168,0,203」がIPアドレスとなります。

192,168,0,203 → 192.168.0.203

残りの「199,239」がポート番号です。ポート番号は次のように計算します。

199 x 256 + 239 = 51183

最初の「199」に256を掛けて、残りの「239」を足した結果が「51183」となります。

FTPサーバーはポート20番(FTP-DATA)からFTPクライアントのポート51183番へ向けてTCP接続をおこないデータ転送します。

パッシブモードとは

パッシブモードはFTPクライアントからFTPサーバーへ向けてデータ通信のための接続を開始します。

パッシブモードでは「データ通信用のIPアドレスとポート番号」をFTPサーバーからFTPクライアントへ通知します。

以下はパッシブモードで mytext.txt というファイルをダウンロードする際のフロー図です。破線がデータ通信をおこなっている箇所です。

パッシブモードで通信している様子

最初にFTPクライアントがPASVコマンドでパッシブモードへの移行を要求しています。

FTPサーバーがパッシブモードを受け入れると接続するべきIPアドレスとポート番号をFTPクライアントへ通知します。

227 Entering Passive Mode(192,168,0,101,79,42)

アクティブモードのときと同様に接続するべきポート番号を計算できます。

79 x 256 + 42 = 20266

アクティブモードではFTPクライアントがFTPサーバーのポート20266番へ向けてTCP接続をおこないデータ転送します。

ジョージ

サーバーが自分から接続するなら「アクティブモード」、サーバーが接続を受けるなら「パッシブモード」というように”サーバー目線”で捉えると覚えやすいですね!

FTPでよくあるトラブル

FTPはトラブルが発生することが多いプロトコルです。特に通信経路上でアドレス変換やポート変換をしているとFTPのデータ通信で問題が発生します。

ケース① lsコマンドがタイムアウトする

よく見かけるトラブルのひとつがFTPログインした後に”ls”コマンドを実行するとタイムアウトしてしまうものです。

これはパソコンで発生することが多く、クライアント側が内向けの通信をすべて遮断するようなファイアウォール設定になっている場合に発生します。

原因はアクティブモードでデータ通信をしようとした際にFTPサーバーからFTPクライアントへ接続する通信が遮断されてしまうためです。

このような場合の解決策はふたつあります。

  1. パッシブモードでデータ転送する
  2. クライアント側のFW設定を変えてFTPデータ通信を許可する

また、ネットワーク機器のACLでデータ通信を許可する設定を入れていない場合もデータ通信が失敗します。

アクティブモードとパッシブモードではACL設定がまったく異なるので、FTP通信をおこなう場合は事前にどちらのモードで通信するのか決めておいた方が良いでしょう

事前に「アクティブモード」か「パッシブモード」か、どちらで通信するのか決めておくとトラブルを回避しやすい。

ケース② アドレス・ポート変換でトラブルが起きる(NAT環境)

NAT環境ではPORTコマンドで通知するIPアドレスやポート番号がNAT後のものと異なることがあり、そのような環境ではトラブルが発生します。

ネットワーク機器の中にはNATする際にPORTコマンドで通知するIPアドレスとポート番号を書き換えてくれるものがありますが、そのような機能がない場合はFTPのデータ通信に失敗します。

FTPのデータ通信が失敗する場合は経路上のネットワーク機器のACLやNATの設定を見直していくことになるでしょう。最終的にはパケットキャプチャしてPORTコマンドでのやり取りを調査することになるかも知れません。

FTPの利用が分かっている場合はNATする際に注意する必要があります。

NATとFTPの相性はよくないので、FTPを使う際はNW機器のNATの仕様を事前に調べたり検証しておくとトラブルを回避しやすい。

おしまいに

FTPは前時代的なプロトコルですが、いまだに新規構築でFTPを採用することがあります。

これは顧客の要望もあり仕方がないことなので、インフラエンジニアの方はトラブルシューティングのためにもFTPプロトコルについて最低限の知識を持っていた方が良いかと思います。

できればtcpdumpやWireSharkでFTP通信がどのようにおこなわれているのか実際に目で見ておくとトラブルシューティングの際に役立つこと間違いありません。

👉 関連記事もチェック

\高単価案件を探すならエージェントに無料登録/

レバテックフリーランス
案件数・単価トップクラス
高単価支払早い常駐/リモート
  • 業界最大級の案件からマッチング
  • 高単価案件が豊富(月60〜100万円)
  • 担当の伴走サポートが手厚い
単価目安
月60〜100万
働き方
常駐 / リモート
PE−BANK
老舗×全国対応で安心
地方OK長期案件老舗低マージン(8%)
  • 設立40年以上の運営実績で信頼感
  • 地方含む全国の長期案件に強い
  • 共同受注制度で安定した稼働が可能
単価目安
月50〜120万
働き方
常駐/地方含む
Engineer-Route(エンジニアルート)
高単価特化・即戦力向け
高単価経験者向け支払15日
  • 月70〜100万円台の案件が中心
  • スキルマッチングが精緻でミスマッチ減
  • 支払いサイト短めで資金繰り◎
単価目安
月70〜100万
働き方
常駐中心
Midworks(ミッドワークス)
正社員並みの保障で安心
報酬保障福利厚生透明マージン
  • マージン公開で透明性が高い
  • 待機時の報酬サポートなど保障充実
  • 学習支援(書籍・資格費用補助)
単価目安
月50〜80万
働き方
常駐中心
ポテパンフリーランス
若手・実務浅めでも挑戦可
Web系学習支援リモート増
  • スタートアップ・受託Web案件が中心
  • ポテパン経由の学習〜実務導線
  • キャリア相談の手厚さが好評
単価目安
月30〜60万
働き方
リモート多め
ギークスジョブ(geechs job)
Web/アプリに強い
Web系福利サポート若手人気
  • フロント・モバイル案件が豊富
  • 福利厚生・税務サポートあり
  • 20〜30代のスキル伸長に好相性
単価目安
月40〜80万
働き方
常駐/一部リモート
エンジニアファクトリー
老舗ならではの信頼感
PM/PL大手案件長期安定
  • ベテラン層・リーダー案件が豊富
  • 大手直・一次請け案件あり
  • 定期フォローで長期稼働がしやすい
単価目安
月60〜90万
働き方
常駐
xhours
高単価案件を狙う方向け
高単価大手案件プロフェッショナル向け
  • 業界最大級の案件数
  • 大手直・一次請け案件あり
  • 高単価案件多数
単価目安
月50〜150万
働き方
常駐/リモート

※単価・特徴は一般的な目安です。最新条件は必ず各公式サイトでご確認ください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

氷河期世代ど真ん中。
高卒フリーターからブラック企業を経てITエンジニアに転職。
リーマンショックのときは派遣切りに遭い人生詰みかけるも奇跡的に乗り越え復活!
36歳でフリーランスに転向し、現在は年収1200万円を突破。
自分の経験を活かし年収アップを応援するWEBサイトを運営しています。

コメント

コメントする

目次