Назад | Перейти на главную страницу

PASV FTP не работает для wget / ftp, но работает для curl / lftp

У меня есть сервер под управлением Centos 7 и vsftpd-3.0.3 (установлен из источника для получения последней версии, хотя все, что я описываю, также применимо к версии vsftpd-3.0.2, которая была установлена ​​ранее).

vsftpd настроен на использование пассивных портов, установленных в диапазоне 10100-10500, брандмауэр разрешает все необходимые порты. Сервер находится за некоторой маршрутизацией / NAT, которую я не контролирую, но, похоже, работает правильно.

Подключение удаленно с машины Fedora 30:

$ curl ftp://ftp.domain.com # работает - отобразить список каталогов

$ wget ftp://ftp.domain.com # сбой

==> PASV ... couldn't connect to 10.xx.xx.xx port 45027: Connection refused

$ lftp ftp.domain.com # работает - вход в систему с анонимным именем и ls возвращает список каталогов

$ ftp ftp.domain.com # fails - войти в систему с анонимным и ls возвращается

ftp> ls
227 Entering Passive Mode (10,xx,xx,xx,176,231).
ftp: connect: Connection refused

Я не понимаю, как это может быть настройка сервера, поскольку curl и lftp работают, но я понятия не имею, почему не работают wget и ftp.

... брандмауэр разрешает все необходимые порты.

Это говорит о том, что сервер и клиент не находятся в одной сети. Я предполагаю, что сервер находится в какой-то внутренней сети, а клиент где-то в Интернете.

227 Вход в пассивный режим (10, xx, xx, xx, 176,231).

Сервер предоставляет частный немаршрутизируемый адрес (например, 10.xx.xx.xx) в качестве цели, к которой должен подключиться клиент. Учитывая вышеупомянутое предположение, что клиент находится где-то еще в Интернете, такое соединение невозможно.

На самом деле это типичная ошибка, когда FTP-сервер находится за каким-то брандмауэром во внутренней сети. Поскольку это очень типично, некоторые клиенты обходят эту проблему, игнорируя IP-адрес, предоставленный сервером, и только берут порт и объединяют его с IP-адресом, который они использовали для управляющего соединения FTP. Другие клиенты не обходятся без этого.

В любом случае - виновата настройка сервера и ее надо исправить. Как это сделать, зависит от конкретного сервера, но для proftp есть MasqueradeAddress настройки и аналогичные настройки для некоторых других FTP-серверов. Смотрите также Сервер ProFTPd за брандмауэром возвращает внутренний IP-адрес.