ローカルの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アソシエイトを張ってしまったが以上です。


