У меня возникают проблемы с FTP под WSL2 при попытке передать HTML-файл на FTP-сервер, работающий под IIS 10.
После выпуска PUT
команда, на которой застревает «Ожидание завершения передачи» в течение нескольких минут, а затем выводит «425 Истекло время ожидания канала данных из-за несоответствия требованиям к минимальной пропускной способности».
По какой-то причине этот же скрипт отлично работает под WSL1.
Вот пример FTP-сеанса:
user-name@DESKTOP:~/$ ftp -p
ftp> open
(to) my-ftp-server.com
Connected to my-ftp-server.com.
220 Microsoft FTP Service
Name (my-ftp-server.com:user-name): my-ftp-server.com|remote-ftp-user
331 Password required
Password:
230 User logged in.
Remote system type is Windows_NT.
ftp> dir
227 Entering Passive Mode (10,150,1,82,213,210).
125 Data connection already open; Transfer starting.
226 Transfer complete.
ftp> lcd _site
Local directory now /home/user-name/_site
ftp> put index.html
local: index.html remote: index.html
227 Entering Passive Mode (10,150,1,82,213,212).
125 Data connection already open; Transfer starting.
425 Data channel timed out due to not meeting the minimum bandwidth requirement.
23114 bytes sent in 0.00 secs (145.0212 MB/s)
Также FTP-сервер в IIS блокирует передаваемый файл, и его необходимо убить с помощью диспетчера задач (не может быть остановлено с помощью «Служб»), чтобы сделать еще одну попытку.
Я захватил пакеты, которыми обмениваются WSL и FTP-сервер для WSL1 и WSL2. Последовательность сообщений идентична, что означает, что с FTP-клиентом / сервером все в порядке.
Я подозреваю, что это как-то связано с тем, что FTP-сервер доступен через VPN, а VPN-клиент (FortiClient) работает на хост-машине Windows. Поскольку WSL2 использует собственный виртуальный сетевой адаптер, Windows должна выполнять NAT. По какой-то причине во время выполнения сбрасывается ответное сообщение «Передача завершена», заставляя FTP-клиент ждать до истечения времени ожидания.