ローカルの2台でFTPを使う時のこと。片方からもう片方へFTP接続できない問題があった。
要約
windows defender
のファイアウォールが邪魔をする。
windows defender
が有効になっているPCへのping
が届かないので気づいた。
FTPの利用時はこの機能をオフにしておく必要がある。
普段からオフにしておくのはやめておこう。危険らしいので。 他のアンチウイルスソフトが阻むこともあるかも。 windowsのネットワーク設定をパブリックではなく、プライベートネットワークにしておくだけでは駄目なようだ。
FTPサーバはdockerを使うとどのOSでも(使い勝手は置いておいて)簡単に立てられる。
正直ローカルならFTPを使うより外部のHDDやSSDに一旦移した方が楽。
本記事のこれ以降は状況の説明と少しの実験。
状況
macOSなPC1台と、windows10なPC1台の間の通信。
FTPサーバは、windows10の方。使ったサーバソフトは、FileZilla Server
というもの。filezilla
のFTPクライアントではなく、サーバ版。mac版は存在しない模様。
windows10の方はwindows defender
がアクティブになっている。
macOSの方はfilezilla
をFTPクライアントソフトとして使用。
FTPサーバの設定の仕方についてはここでは割愛。(ユーザを設定したくらいだが)
接続できない・原因発見
mac側からホストIP、ユーザ名、パスワード、ポート番号が一致していることを確認しつつ、接続
をクリックしても、接続できない。タイムアウトする。
サーバ・アカウント情報の一致は何回も確認したので、ここでようやくそもそも通信できてないか気にし始める。
ping
をすると、
$ ping 192.168.0.113
PING 192.168.0.113 (192.168.0.113): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
Request timeout for icmp_seq 2
...
となっていたので、ファイアウォールなどで通信が阻まれていると確信して、windows10側の設定を確認したところ、windows defender
のファイアウォールの設定が原因とわかった。
対処としては、一時的にファイアウォールをオフにするだけでオーケー。windows10側が弾かなくなるので通信可能になる。
クライアントとサーバを入れ替えてもいける
macOS側がサーバになればこの辺の問題はなくなると思った。
適当なFTPサーバをmacOS側で立てて試してみる。
dockerでvsftpサーバを立てる
手頃なサーバソフトがなさそうなので、dockerで立てる。bogem/ftpを使う。中身はvsftpd
。
以下のコマンド1つで立てられるが、注意すべき点が多い。
$ docker run --rm -d -v <SOME_DIR>:/home/vsftpd \
-p 20:20 -p 21:21 -p 47400-47470:47400-47470 \
-e FTP_USER=<USERNAME> \
-e FTP_PASS=<PASSWORD> \
-e PASV_ADDRESS=<docker hostのIPアドレス> \
--name ftp \
bogem/ftp
dockerが使えればどこでも実行できるのでwindows10のwsl2
上でも動かせた。
注意点は、
Docker Desktop
を使っているならフォルダをマウントするために、Docker Desktop
にてResource
-->File Sharing
の設定が必要。マウントするフォルダをこの設定に含める必要がある- 子フォルダでも個別に追加が必要だった
- 正しく設定していないと警告メッセージが出るのでやさしい
- 理由は分からないが、コンテナの起動時に
chown -R ftp:ftp /home/vsftpd
をしている。この後にvsftpd
が起動する- PCやマウントしたフォルダによってはサーバ起動までとても時間がかかる
docker exec ftp ps aux | grep chown
でchown
が終わっているかが確認できる
以上には気をつける。
そもそもなぜchown
する必要があるのかよく分からないな。これをしなければ起動が早いのに。まあいいか。
クライアント側
windows10のFTPクライアントはエクスプローラで十分だ。ネットワークの場所を開く
から、FTPサーバのアドレスを指定すればいい。
macOSのfinderでもできる。ショートカット⌘K
や、サーバへ接続…
をクリックすれば大体同じようにできる。
FTPサーバのアドレス指定は、ftp://192.168.0.111:21
など。
もちろんfilezilla
などでも普通に使えた。というかmacOSのFinderではFTP接続があまり安定してない気がした。なかなか一覧が表示されない。filezilla
ではすぐに表示された。windowsではエクスプローラが十分に使える。
おわり
サーバ・クライアントの入れ替えての実験はすぐに済むと思ったら意外に手間取ってしまった。chown
する意味が大事なんだろう。あまりFTPサーバについては深く考えることはなかったのでいい機会だった。
ファイルの属性がそのまま残るか気になったがアクセス日時は変わってしまうけど作成日時は残ってた。(テキストファイルを上述のdockerコンテナで転送して確認。)
正直面倒なのでポータブルHDD、SSDなどに移してから移しなおせばよかった。。Amazon見てみると最近のは随分と安くなったものだ。HDD2Tで8,000円くらい。前買った時は1Tで8,000~9,000円くらいした気がする。
SSDの方も安いなあ。1Tで11,000円。高速アクセスが必要な時はこっちのがいいだろう。
自然な流れでAmazonアソシエイトを張ってしまったが以上です。