У меня есть машина CentOS 7, работающая внутри контейнера Docker.
Я занимаюсь разработкой приложения, которое должно будет подключаться к FTP-серверу и загружать некоторые файлы - для этого мне нужно перевести FTP-соединение в пассивный режим. К сожалению, эта машина вообще не может использовать пассивный режим FTP. Какой бы клиент я не использовал, я всегда получаю одну и ту же ошибку:
ftp> open ftp
Connected to ftp (172.18.0.8).
220 (vsFTPd 3.0.3)
Name (ftp:root): admin
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (10,105,125,200,185,104).
ftp: connect: No route to host
Вот логи с FTP-сервера:
Tue Jun 19 12:36:32 2018 [pid 20820] CONNECT: Client "172.18.0.7"
Tue Jun 19 12:36:32 2018 [pid 20820] FTP response: Client "172.18.0.7", "220 (vsFTPd 3.0.3)"
Tue Jun 19 12:36:34 2018 [pid 20820] FTP command: Client "172.18.0.7", "USER admin"
Tue Jun 19 12:36:34 2018 [pid 20820] [admin] FTP response: Client "172.18.0.7", "331 Please specify the password."
Tue Jun 19 12:36:38 2018 [pid 20820] [admin] FTP command: Client "172.18.0.7", "PASS <password>"
Tue Jun 19 12:36:38 2018 [pid 20819] [admin] OK LOGIN: Client "172.18.0.7"
Tue Jun 19 12:36:38 2018 [pid 20821] [admin] FTP response: Client "172.18.0.7", "230 Login successful."
Tue Jun 19 12:36:38 2018 [pid 20821] [admin] FTP command: Client "172.18.0.7", "SYST"
Tue Jun 19 12:36:38 2018 [pid 20821] [admin] FTP response: Client "172.18.0.7", "215 UNIX Type: L8"
Tue Jun 19 12:36:43 2018 [pid 20821] [admin] FTP command: Client "172.18.0.7", "PASV"
Tue Jun 19 12:36:43 2018 [pid 20821] [admin] FTP response: Client "172.18.0.7", "227 Entering Passive Mode (10,105,125,200,185,104)."
Используя те же учетные данные, имя хоста (10.105.125.200 - это адрес внутри моей локальной сети) и порт (21), у меня нет проблем с использованием пассивного режима с других машин, которые также работают в Docker. Например, на компьютере Debian эта проблема не возникает.
Я пробовал следующее исправление: https://linuxconfig.org/rhel7-ftp-server-error-ftp-connect-no-route-to-host-solution, но поскольку машина работает на Docker, она не имеет полные возможности сырой машины (по крайней мере, не из коробки)-> Например, я не могу запустить iptables.
Я также нашел предположения, что, возможно, брандмауэр CentOS что-то блокирует - но проблема с машиной, находящейся внутри Docker, также остановила меня, поскольку я не могу использовать базовые программы, такие как systemctl.