アリスです。
前回Windows10でFTPサーバを立てる方法を書きました。
しかし、他のWindows PCから、コマンドプロンプト経由でWindowsPCからFTPサーバにログイン後、例えばdirやcd等のコマンドを打つと「150 Opening ASCII mode data connecton.」で止まります。
ブラウザ経由であればアクセス可能
コマンドプロンプト経由のアクセスで失敗するだけで、ブラウザ経由なら問題なくアクセスできます。
ブラウザのURLに「ftp://IPアドレス」と入れてアクセスしてみてください。
IPアドレスの調べ方ですが、FTPサーバのPCでコマンドプロンプトを開き「ipconfig」と打てばわかります。(※FTPサーバにアクセスしたいので、FTPサーバのIPが必要)
「150 Opening ASCII…」で通信が止まる場合の解決方法
理由は後で説明するとして、とりあえず解決方法を書きます。
1.FTPサーバにアクセスしたいクライアントPCで、コントロールパネルを開きWindowsファイアーウォールの設定を開きます。
2.画面左メニューから詳細設定を開きます。
3.画面左メニューで「受信の規則」を選択した状態で、画面右メニューから「新しい規則」をクリックします。
4.プログラムを選択して次へボタンをクリックします。
5.このプログラムのパスを選択して、参照ボタンをクリックすると「C:\Windows\System32」のフォルダが開かれます。
フォルダ内にある「ftp.exe」を選択します。選択できたら、次へボタンをクリックします。
6.「接続を許可する」を選択し、次へボタンをクリックします。
7.ドメイン、プライベート、パブリックにチェックが入っていることを確認して、次へボタンをクリックします。
8.任意の名前を付けます。FTP Clientでいいでしょう。
コマンドプロンプトを再起動して、再度FTPサーバにログインすれば、コマンドが使えるようになります。
FTP通信が止まった理由
FTPサーバにログインできたにも関わらず、その後コマンドを打つと通信が止まる理由は、コマンドプロンプトでのFTP通信がアクティブモードで行われるからです。
FTP通信にはアクティブモードとパッシブモードがあります。
アクティブモードではデータ転送用の線をFTPサーバからクライアントPCに投げますが、このときにクライアントPC側のファイアーウォールで通信が阻止されてしまうのです。
阻止されないように、クライアントPCのファイアーウォールの受信規則を追加し、FTPの通信を解除してあげたわけです。
ちなみに、ブラウザ経由でのFTPアクセスはパッシブモードで行われているから問題なくアクセスできました。
パッシブモードとは、データ転送用の線をクライアントPCからFTPサーバに投げる方法です。
ファイアーウォールは外からのアクセスは防いでくれますが、中からのアクセスは基本的に素通りさせます。
パッシブモードでは、クライアントPCの中から、FTPサーバにデータ線を投げるので、大丈夫であったのです。