Недостаточно информации для полного ответа. Но вы всегда должны помнить, что FTP — это не простой протокол. В простейшем случае, активный FTP работает следующим образом:
- Вы делаете контрольное подключение к порту 21 (FTP-сервер), через который
- Вы аутентифицируете
- Вы сообщаете серверу, где сделать соединение (IP и порт)
- Вы приказываете серверу начать передачу
- сервер делает Другая подключение к IP и порту, который вы ему сказали, и отправляет или получает данные.
Обычно на шаге 3 вы сообщаете серверу свой IP-адрес и порт, который прослушивает ваш FTP-клиент, поэтому выполняется еще одно соединение на шаге 5. в обратном направлении, с сервера к вам.
Что это было бы при наличии брандмауэра между ними? Предположим, вы включили прием пакетов через порт 21 (или любой другой, который вы используете) на сервере. Вы можете установить контрольное соединение. А как насчет обратного подключения к данным, которое устанавливает сервер? Как это включить?
Есть два случая: вы либо статически разрешаете какой-то порт (или диапазон) и настраиваете свой FTP-клиент так, чтобы он всегда использовал этот порт, либо у вас есть очень умный брандмауэр, который активно подслушивает на управляющем соединении извлекает IP-адрес и порт и динамически создает временное правило, разрешающее обратное соединение. Это называется АЛГ что означает Шлюз уровня приложения.
Как брандмауэр узнает, какие соединения нужно прослушивать? Он знает, что FTP работает через TCP/21, поэтому просто ищет любой трафик на этом порту. Что, если вы измените порт управления? Вы, наверное, уже догадались: ALG не сработает.Брандмауэр не добавит дополнительное динамическое правило, поэтому попытка обратного подключения для передачи данных не увенчается успехом.
Есть надежда, что если настроить "ALG" на работу с нестандартным портом, то проблема решится. Тем не менее, это не всегда так. Сначала спроси, который брандмауэр мы говорим? В современном мире широко используются брандмауэры как на обоих концах, так и между ними, а также широко используется NAT (включая CGN, который используется интернет-провайдерами). Любому NAT тоже нужен ALG: ему нужно создать правило динамической трансляции в сторону клиента, который находится за NAT и который инициировал транзакцию. Вы можете добиться успеха только в том случае, если вы смогли настроить каждый ALG на пути так, как вы хотите. Видишь, куда я иду?
Есть два общие решения. Во-первых, просто: полагайтесь на ALG, которые требуют, чтобы вы никогда не меняли порт управления FTP по умолчанию (честно говоря, 20 лет управления серверами, и я до сих пор не понимаю смысла использования портов не по умолчанию. Это создает больше проблем, чем решает) . Во-вторых, тоже просто: используйте пассивный режим FTP.
пассивный FTP работает следующим образом:
- Вы подключаетесь к порту 21 (FTP-сервер), через который
- Вы аутентифицируете
- Вы входите в пассивный режим, и сервер отвечает IP и портом
- Вы приказываете серверу начать передачу
- Ты выполните еще одно подключение к IP-адресу и порту, которые сообщил вам сервер, и получите или отправьте данные.
Обратите внимание, что изменены только шаги 3 и 5. Они избегают обратных соединений.
Это частично решает проблему с нестандартным портом и неконтролируемыми ALG. Это также позволяет использовать шифрование в управляющем соединении (которое по своей сути нарушает работу ALG).