Pure-FTPd отправляет правильный ответ pasv, но получен неправильный IP

441
lracicot

Я начал свой FTP-сервер с pure-ftpd -l puredb:/etc/pure-ftpd/pureftpd.pdb -E -j -R -P 67.68.xxx.xx -s -A -j -Z -H -4 -E -R -G -X -x -d -d -U 113:000 -p 30000:30009 -c 50 -C 5

В моем файле журнала Pure-FTPd у меня есть:

[DEBUG] Command [pasv] [] 227 Entering Passive Mode (67,68,xxx,xx,117,54)

Hovever, мой FTP-клиент получает это:

---> PASV 227 Entering Passive Mode (192,168,2,23,231,6) ftp: connect: No route to host

Почему это происходит и как я могу получить правильный IP-адрес? Спасибо.

1
То есть ваш FTP-сервер не находится в вашей локальной сети? Какое устройство на 192.168.2.23? Daniel B 6 лет назад 0
Это публичный FTP-сервер, который я тестирую удаленно. 192.168.2.23 не существует. На самом деле, FTP-сервер не имеет интерфейса в 192.168 lracicot 6 лет назад 0
Попробуйте зашифровать FTP-соединение. Это, вероятно, какой-то помощник FTP NAT, работающий под амок. Daniel B 6 лет назад 3
Шифрование соединения сработало. Спасибо! lracicot 6 лет назад 0
@DanielB вы можете добавить свое решение в качестве ответа, чтобы я мог принять его. lracicot 6 лет назад 0

1 ответ на вопрос

2
Spiff

Поскольку FTP отправляет IP-адреса и порты внутри таких сообщений (а не только в заголовках пакетов), он не является протоколом, дружественным к NAT.

Из-за этого шлюзы NAT часто имеют специальный код для обработки FTP. Этот код известен как FTP «шлюз прикладного уровня», или ALG. FTP ALG ищут сообщения, такие как команда PASV, и перезаписывают IP-адрес для представления общедоступного IP-адреса шлюза NAT, чтобы обеспечить работу связи.

Если ваш FTP-клиент находится за шлюзом NAT, а ваш FTP-сервер - нет, то использование пассивного режима - это способ обойти плохой NAT-шлюз, у которого нет FTP ALG.

Если ваш FTP-клиент НЕ находится за NAT-шлюзом, а ваш FTP-сервер ЕСТЬ, то вы можете без проблем использовать обычный активный FTP, но в этом случае пассивный режим фактически прервется, если шлюз NAT перед FTP-сервером не имеет хороший FTP ALG. Многие шлюзы NAT имеют наполовину сломанные FTP ALG, которые активируют работу FTP только для FTP-клиентов за NAT, но не обрабатывают случай «FTP- сервер за NAT». Очевидно, многие поставщики шлюзов NAT не думают и не заботятся о случае «сервер за NAT».

Если и ваш FTP-клиент, и ваш FTP-сервер находятся за отдельными шлюзами NAT, которые не имеют FTP ALG, активный FTP будет заблокирован NAT клиента, а пассивный FTP будет заблокирован NAT сервера, поэтому вы просто не сможете в этом случае вообще используйте обычный FTP, и вам нужно будет установить какой-то туннель или другой обходной путь. Переключение на зашифрованный FTP будет работать, потому что зашифрованные протоколы FTP были разработаны после того, как шлюзы NAT были распространены, и авторы знали, что шлюз NAT не сможет видеть или связываться с внутренностями протокола, поэтому они должны были спроектировать его для работы во всех различных сценариях NAT.

«Поскольку FTP отправляет IP-адреса и порты внутри таких сообщений (а не только в заголовках пакетов), это не NAT-дружественный протокол». Проблема на самом деле в динамических соединениях для передачи данных. Необходимость отправки адресов и портов является лишь результатом этого. Daniel B 6 лет назад 0
Спасибо @Spiff за подробное объяснение. И мой клиент, и мой сервер находились за отдельным NAT, поэтому я зашифровал соединение, и оно работает. lracicot 6 лет назад 0