Parece que você está executando o seu cliente FTP em um host que está conectado a um servidor OpenVPN e seu tráfego é roteado dentro da VPN (portanto, para o mundo externo, seu endereço IP de origem é o da interface externa do seu servidor OpenVPN).
É verdade?
Se não .... por favor, nos dê detalhes.
Se sim, o problema se relaciona exatamente com a "caixa" do OpenVPN que:
-
está NATting corretamente suas conexões IP "padrão" (e, de fato, você é capaz de se conectar com sucesso ao servidor FTP remoto)
-
é NÃO corretamente NATting o protocolo FTP (que, infelizmente, não é muito compatível com NAT e, para ser NATted, requer tratamentos especiais).
Para resolver seu problema, você deve garantir que o módulo do kernel correto esteja carregado na sua caixa NAT (OpenVPN). No meu Ubuntu (e provavelmente também no CentOS 6):
# modprobe nf_conntrack_ftp
Esse módulo observará cuidadosamente todo o tráfego que flui pela conexão de "controle" por FTP (aquele que você pode estabelecer, autenticar e "iniciar" transferências de arquivos) para verificar quais portas cliente seu cliente FTP declarou usar para transferências de arquivos e "controlar" apropriadamente a conexão de controle (para "falsificar" essas portas, impondo as de caixa NAT).
Em outras palavras:
- sem os módulos acima:
- 1) O cliente FTP estabelece uma conexão FTP com o servidor remoto;
- 2) O cliente de FTP deseja iniciar uma transferência de arquivos (um simples "ls"). Como tal ...
- 3) ... Cliente FTP "abre" uma porta TCP para que o servidor FTP se conecte de volta a essa porta para transmitir o conteúdo;
- 4) ... cliente FTP "avisa" servidor FTP qual porta foi aberta, usando a conexão de controle estabelecida no ponto 1)
- 5) infelizmente, sem "tratamento especial", seu servidor FTP remoto, que está lendo / gravando corretamente ao longo da conexão estabelecida no ponto 1), recebe o par IP / PORT especificado na etapa 4) que contém seu "private" Endereço IP.
- 6) para que o servidor FTP veja que a conexão de controle vem de um IP enquanto a conexão de dados está relacionada a um IP diferente. Ele (corretamente) não gosta de tal cenário, pois pode levar a algum cenário de reflexão / DDOS. Como tal, envia a mensagem de erro que você vê.
.
- com o módulo acima carregado
- tudo é como acima, exceto para a etapa 5. Essa etapa se tornou ...
- 5) sua caixa NAT, graças ao módulo conntrack_ftp, abre uma própria porta TCP (na interface externa) e se prepara para receber de volta o tráfego de dados FTP nessas portas. Uma vez recebido, retransmite esse tráfego de volta para o seu cliente de FTP. Além disso, a "conexão de controle" é desconfigurada, portanto, para substituir o par IP / PORT enviado pelo seu cliente com o IP / PORT da caixa NAT.
- ... e, graças a isso, tudo deve funcionar sem problemas :-) (... ou, pelo menos, espero).