Загрузка файлов по FTP, частые проблемы и их решение. Port mismatch. Command has been tained by router or firewall. Команда PORT повреждена маршрутизатором или брандмауэром.
Активный и пассивный режимы передачи
ФТП-соединение работает в два потока - поток управления и поток данных.
Поток управления проходит через стандартный 21-й порт сервера, остаётся открытым в течении всей сессии и используется для управления сессией соответственно, обмена между сервером и клиентом паролями и командами.
Поток данных может быть открыт в одном из двух режимов:
активный режим - поток открывается сервером из порта 20 к порту компьютера клиента;
пассивный режим - поток открывается клиентом из любого порта к порту сервера.
В настройках некоторых ФТП-клиентов, например FileZilla, есть возможность устанавливать фиксированный диапазон портов локального компьютера клиента к которым будет подключатся ФТП-сервер для создания потока данных в активном режиме (Редактирование -> Настройки -> Соединение -> FTP -> Активный режим -> Ограничение локальных портов).
ФТП-клиент за двумя роутерами
Основные проблемы с загрузкой файлов по ФТП обычно связаны с использованием активного режима и когда ФТП-клиент при этом не имея "белого ИП-адреса" находится за двойным NAT-ом, т.е. за двумя роутерами (маршрутизаторами).
За двумя роутерами (маршрутизаторами) 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 повреждена маршрутизатором или брандмауэром.
Соединение закрыто
Выходов из ситуации несколько:
- В настройках FTP-клиента назначить активному режиму фиксированный диапазон портов и их "проброс" на обеих роутерах (если к ним есть доступ);
- Переключение маршрутизатора в режим моста (Bridge Mode, в некоторых роутерах aka Access point);
- Назначение хоста в качестве DMZ;
- Переключение 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. Возникли другие проблемы с ФТП? Пишите о них в комментариях.