У меня есть сервер под управлением 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-адрес.