WSL2 への FTP 接続は localhost じゃダメなのねえ〜[プログラミング]
(2026-09-17 00:09:52) by shinoda


< ページ移動: 1 2 3 >

WSL2 上の AlmaLinux で動かしている FTPサーバ(vsFTPd)にホスト側(親の Windows 側)から接続して put や get をしたいのだがうまくいかなくてハマってしまった。

WSL2 の AlmaLinux で起動している vsFTPd にパッシブモードで接続するんで(アクティブモードではデータ用接続が Windows 側で止められてしまうし、勝手に FW を触る権限もわしら外注作業員には許されてないけんね)、vsFTPd の設定にその旨を追加し put しようとしたんだけどうまくいかない。

<サーバ側の設定> ※関係あるところだけ

pasv_enable=YES
#pasv_address=127.0.0.1
pasv_address=172.28.196.77
pasv_addr_resolve=NO
pasv_min_port=50000
pasv_max_port=50010

<クライアント操作>

C:\work>ncftp -u admin -p adminpassword localhost
NcFTP 3.2.6 (Nov 15, 2016) by Mike Gleason (http://www.NcFTP.com/contact/).
Connecting to 127.0.0.1...
(vsFTPd 3.0.5)
Logging in...
Login successful.
Logged in to localhost.
ncftp /home/admin > cd /var/www/html/temp
Directory successfully changed.
ncftp /var/www/html/temp > lcd /work/test
ncftp /var/www/html/temp > lls data*
data1.dat
ncftp /var/www/html/temp > set passive yes ←明示的にパッシブモードを指定
ncftp /var/www/html/temp > put data1.dat

The remote file "data1.dat" already exists.
        Local:           120 bytes, dated 09/10/26 14:30:04.
        Remote:            0 bytes, dated 09/10/26 23:42:16.

        [O]verwrite?  [R]esume?  [A]ppend to?  [S]kip?  [N]ew Name?
        [O!]verwrite all?  [R!]esume all?  [S!]kip all?  [C]ancel  > O
put data1.dat: server said: Failed to establish connection. ←失敗しちゃう

サーバ側には 0バイトの data1.dat ファイルができている。制御用の接続はちゃんと生きてるんで、空のファイルを作成して、実際にデータ用の接続経由でデータを送ろうとして失敗してるんだなあ・・・

結局原因は、「Windows」と「WSL(仮想的なLinux)」の間での通信で、制御用接続(21番ポート)へのフォワードはうまくいっているが、データ用接続(50000〜50010番ポートのいずれか)へのフォワードがうまくいっていないからであった。

WSL2 が立ち上がっている場合、Windows は「WSL2側で常に接続待ちになっているポートのみ」は「localhost」への接続の場合は WSL2 側にフォワードをしてくれるのだ。

「常に接続待ちになっているポート」というのは、「WSL2 上の OS で動くアプリが起動時に口を開けてまっているポート」のことで、httpd なら 80番と 443番。あるいは 8080番など。FTPd なら、21番ポート(20番はサーバからクライアントへの接続用なので違う)である。
つまり、httpd や FTPd が起動時に開けるポート番号だ。

起動後のデーモンが、例えばパッシブ通信のために一時的に開けたポート番号はフォワードされないのである。

< ページ移動: 1 2 3 >


コメント投稿
次の記事へ >
< 前の記事へ
TOPへ戻る

Powered by
MT4i 3.0.8