Проблемы загрузки файлов по FTP

archive view archive save

ftp-folder-logo_230x230, jpg Загрузка файлов по FTP, частые проблемы и их решение. Port mismatch. Command has been tained by router or firewall. Команда PORT повреждена маршрутизатором или брандмауэром.

Активный и пассивный режимы передачи

ФТП-соединение работает в два потока - поток управления и поток данных.

Поток управления проходит через стандартный 21-й порт сервера, остаётся открытым в течении всей сессии и используется для управления сессией соответственно, обмена между сервером и клиентом паролями и командами.

Поток данных может быть открыт в одном из двух режимов:
активный режим - поток открывается сервером из порта 20 к порту компьютера клиента;
пассивный режим - поток открывается клиентом из любого порта к порту сервера.

В настройках некоторых ФТП-клиентов, например FileZilla, есть возможность устанавливать фиксированный диапазон портов локального компьютера клиента к которым будет подключатся ФТП-сервер для создания потока данных в активном режиме (Редактирование -> Настройки -> Соединение -> FTP -> Активный режим -> Ограничение локальных портов).

ФТП-клиент за двумя роутерами

Основные проблемы с загрузкой файлов по ФТП обычно связаны с использованием активного режима и когда ФТП-клиент при этом не имея "белого ИП-адреса" находится за двойным NAT-ом, т.е. за двумя роутерами (маршрутизаторами).

double nat, jpg

За двумя роутерами (маршрутизаторами) FileZilla может не работать в активном режиме. Проверить работоспоосбность активного режима можно запустив "Редактирование -> Мастер настройки сети", вероятно результатом будет "Ответ: 502 Port mismatch".

Соединяюсь с probe.filezilla-project.org
Соединение установлено, ожидание приглашения.
Ответ: 220 FZ router and firewall tester ready
USER FileZilla
Ответ: 331 Give any password.
PASS 3.39.0
Ответ: 230 logged on.
Проверка корректного внешнего IP
Получение внешнего IP-адреса с http://ip.filezilla-project.org/ip.php
Проверка корректного внешнего IP
IP xxx.xxx.xxx.xxx bii-bgd-ia-bhc
Ответ: 200 OK
PREP 6351
Ответ: 200 Using port 6351, data token 1133474158
PORT xxx,xxx,xxx,xxx,24,207
Ответ: 502 Port mismatch. Received arguments contained port 1690. Command has been tained by router or firewall.
Команда PORT повреждена маршрутизатором или брандмауэром.
Соединение закрыто

Выходов из ситуации несколько:

  1. В настройках FTP-клиента назначить активному режиму фиксированный диапазон портов и их "проброс" на обеих роутерах (если к ним есть доступ);
  2. Переключение маршрутизатора в режим моста (Bridge Mode, в некоторых роутерах aka Access point);
  3. Назначение хоста в качестве DMZ;
  4. Переключение FTP-клиента в пассивный режим.

Загрузка больших файлов зависает на 100%

В некоторых случаях может показаться, что загрузка большого файла зависает на 100%, после обрывается и начинается заново.

Обычно проблема связана с потерей или модификацией пакетов роутером (его брандмауэром).

  • Larges uploads stuck at 100% - FileZilla Forums
    https://forum.filezilla-project.org/viewtopic.php?t=34311

Однако это не последняя из причин сбоя и повторной до бесконечности загрузки больших файлов даже в пассивном режиме. Ещё одной из причин может быть использование сервером временных файлов, как например в случае с "MEGAcmd".

  • Upload big files like 5 GB or higher stuck at 100%
    https://github.com/meganz/MEGAcmd/issues/405

Так например, когда на локальный ФТП-сервер MEGAcmd идёт загрузка файла, то фактически mega-cmd-server в это время не перекачивает файл в сеть, а складывает все данные в локальный временный файл. После этого, когда все данные переданы в локальный временный файл, ФТП-клиент (скажем FileZilla) подразумевает 100%-ю загрузку файла и ожидает от сервера соответствующее подтверждение в течении установленного в настройках (Редактирование -> Настройки -> Соединение) таймаута (Время ожидания: Если во время операции данные не будут переданы дольше этого времени, то соединение будет закрыто и FileZilla попытается подключится заново.).

В примере по ссылке вышые закачка файла в ФТП-сервер MEGAcmd (т.е. в локальный временный файл) размером 5 GB заняла каких-то +- 5 мин, а физическая перекачка же его в сеть на сервера MEGA по данным "логов" в режиме отладки заняла около 25 мин. Поэтому при работе с серверами использующими временные файлы "Время ожидания" (ака таймаут) должно быть зачительно высоким, скажем 3600/7200 сек или выше.

P.S. Возникли другие проблемы с ФТП? Пишите о них в комментариях.


Об авторе
АдМинь БагоИскатель
АдМинь БагоИскатель ярый борец за безглючную работу любых механизмов и организмов во всей вселенной и потому пребывает в вечном поиске всяческих багов, а тот кто ищет как известно всегда находит. Когда что-то или кого-то вылечить не в состоянии, то со словами "Я в аду, а вы все черти" уходит в запой выйдя из которого снова берётся лечить неизлечимое.
Ещё статьи автора
Комментарии в блоге
Новое на форуме