WSL 上の ALmaLinux で vsftpd を起動し、SELinux や Firewall によるアクセス制限がないことを確認しホストPC(WSL を実行している Windows 本体)から FTP 接続してみたのだがうまくいかない。
まず、接続先の IP を ipconfig で確認。
C:\Users\朕>ipconfigWindows IP 構成<略>イーサネット アダプター vEthernet (WSL (Hyper-V firewall)):接続固有の DNS サフィックス . . . . .:リンクローカル IPv6 アドレス. . . . .: fe80::96fb:c228:9f11:d148%44IPv4 アドレス . . . . . . . . . . . .: 172.28.192.1サブネット マスク . . . . . . . . . .: 255.255.240.0デフォルト ゲートウェイ . . . . . . .:
よし、172.28.192.1 だな・・・と思って、そこにアクセス。
C:\Users\朕>ftpftp> open 172.28.192.1> ftp: connect :接続が拒否されました
ありゃ?接続拒否されてんじゃん。
WSL 内部からは FTP サーバへアクセス可能。
[root@PC ~]# ftp localhostConnected to localhost (127.0.0.1).220 (vsFTPd 3.0.5)Name (localhost:root): admin331 Please specify the password.Password:adminpassword<実際は表示されない>230 Login successful.Remote system type is UNIX.Using binary mode to transfer files.ftp> quit
なので、vsftpd は正しく動いている。
で、Gemini に聞いてみると、「IP アドレスが違うんじゃね?」ってことだったので調べてみる。
[root@PC ~]# ip a<略>2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UPgroup default qlen 1000link/ether 00:15:5d:45:c0:d2 brd ff:ff:ff:ff:ff:ffinet 172.28.196.77/20 brd 172.28.207.255 scope global eth0valid_lft forever preferred_lft foreverinet6 fe80::215:5dff:fe45:c0d2/64 scope link proto kernel_llvalid_lft forever preferred_lft forever
あり?IP って 172.28.196.77 なの?ホストPCの ipconfig で調べた 172.28.192.1 だと思ってた。これは WSL2 と Windows の環境をつなぐ仮想ネットワークの GW なのね。
というわけで
C:\Users\朕>ftp 172.28.196.77172.28.196.77 に接続しました。220 (vsFTPd 3.0.5)200 Always in UTF8 mode.ユーザー (172.28.196.77:(none)): admin331 Please specify the password.パスワード:adminpassword<実際は表示されない>230 Login successful.
おお、ログインできた。WSL2 が起動している状態だと、localhost も自動的に WSL 上の 127.0.0.1 に向けてくれるそうだ。なので、
C:\Users\朕>ftp localhostPC に接続しました。 ←表示はホストPCに接続したと出る220 (vsFTPd 3.0.5) ←実際は WSL にフォワードされている<略>
というわけで接続できる・・・が、Windows から接続する場合、他にもいろいろ問題が。
実は、WSL を起動する度に WSL 側の IP アドレスは変更される。今回は 172.28.196.77 が割り当てられたが、WSL を一旦シャットダウンしてしまうと(Windows 再起動とかで)違う IP アドレスが割り振られてしまう(172.28.207.110 とかかもしれない)。
そのため、バッチファイルなどにこの IP アドレスを固定値で書いていると、次に実行したときにはうまく FTP ができないという状況になる。安全なのは、127.0.0.1 や localhost を接続先にしておくことだね。
で、最凶の問題が、Windows についてくる FTP クライアントは「PASVモードの機能がない」糞ソフトなので、接続まではできるけど、GET も PUT もできましぇん(笑)

コメントする