この記事は更新から24ヶ月以上経過しているため、最新の情報を別途確認することを推奨いたします。
AzureにVMを建ててFTPサーバーを構成したが、インターネットからFTPサーバーにアクセスができない場合の確認ポイントについて記載します。
次のことを前提とします。
- VMにIISをインストールしFTPサーバーを有効化している
- VMががあるサブネットにはNSGが関連付けられている
- VMの前にはパブリックロードバランサーが配置されている
- FTPサーバーの接続にはポート21番を利用する
ポイントはずばりFTPの通信、パッシブモードです。FTPにはアクティブモードとパッシブモードがあり、通常はパッシブモードで通信を行います(本記事ではこれらの詳細は省略します)。
パッシブモードの動きを記載すると以下の通りです。
1.クライアントからFTPサーバーに対してポート21番でアクセス
2.FTPサーバーからパッシブポートが返されて、クライアントはそのパッシブポートを使ってFTPサーバーと通信する
そのためAzureのVMがこのパッシブポートでの受信を許可しているかどうかを確認していく必要があります。本記事のような構成ではNSGの受信規則と、ロードバランサーの負荷分散規則でパッシブポート宛ての通信が許可されている必要があります。
追記
ロードバランサーを経由している場合、パブリックIPにアクセスした後にプライベートIPアドレスを返す動きになり接続ができないことがあります。
FTP接続用のツールによっては自動的にパブリックIPで再接続を試してくれることもありますが、それが出来ない場合にはFTPサーバー側でFTPサイトの FTPファイアウォールのサポート>ファイアウォールの外部IPアドレス にロードバランサーのパブリックIPを設定する必要があります。
【補足】
FTPのパッシブポートですが既定では1024~65535と非常に広範囲です。NSGであれば範囲指定ができるのですが、ロードバランサーでは範囲指定ができないためパッシブポートすべてを登録することができません。
そこでIISでパッシブポートを指定する方法があります。
IISを起動しWebサーバーの FTP > FTPファイアウォールのサポート を選択し、「データチャネルのポート範囲」にパッシブポートを明示的に記載することで指定ができます。