Eu tenho uma máquina do CentOS 7, rodando dentro de um contêiner Docker.
Estou desenvolvendo um aplicativo que terá que se conectar a um servidor FTP e baixar alguns arquivos - para isso, preciso definir minha conexão FTP para o modo passivo. Infelizmente, esta máquina parece incapaz de usar o FTP Passive Mode. Seja qual for o cliente que eu tente usar, sempre obtenho o mesmo erro:
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
Aqui os registros do servidor 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)."
Usando as mesmas credenciais, hostname (10.105.125.200 é um endereço dentro da minha rede local) e porta (21), não tenho problemas em usar o modo passivo de outras máquinas que também são executadas no Docker. Por exemplo, em uma máquina Debian, este problema não ocorre.
Eu tentei a seguinte correção: link mas desde que a máquina funciona no Docker, ele não tem todas as possibilidades de uma máquina crua (pelo menos, não fora da caixa) - > Por exemplo, não consigo executar o iptables.
Eu também encontrei sugestões de que talvez o firewall do CentOS esteja bloqueando alguma coisa - mas o problema de a máquina estar dentro do Docker também me parou aqui, já que não posso usar programas básicos como systemctl.