I was thinking of this solution. Sending a packet from a chosen port(for example, 1027) to port 20 of the server address. The NAT firewall will then allow incoming access from port 20 to 1027. Then, the computer will send a PORT command to the server to inform that the client data port is 1027. The data transfer will then start.
Eu não acho que você possa dizer a ftp.exe
para usar uma porta de sua escolha. Ele envia o PORT
com uma porta de sua escolha. Você (o aplicativo) não envia você mesmo.
There is an option on the FileZilla Server "Ignore unroutable IPs on PORT command" Should I enable it? Will it solve the problem?
Ajudaria, pois o problema é que o cliente não sabe seu endereço IP externo (o que significa que ele envia um IP incorreto no comando PORT
). O que é realmente o caso ( 10.10.1.239
é o endereço IP local que o servidor não pode acessar), então você precisa ativar a opção. Mas você afirma que o problema é o firewall também. Então, embora a opção ajude, ela não resolve todos os problemas que você tem.
Obviamente, a solução mais fácil seria reconfigurar seu firewall para permitir o modo Ativo. Isso significa abrir as portas de entrada no intervalo de conexão de dados.
Veja o meu artigo Configuração de rede para o modo ativo .
Você pode restringir as regras apenas para o endereço IP do servidor. Você pode até restringi-los até a porta remota 20 somente.
A única outra ideia que tenho é desenvolver um cliente ftp.exe
falso que usa o modo Passivo. Não será tão difícil se você usar alguma biblioteca de cliente FTP e restringir a funcionalidade do cliente apenas àquele que o aplicativo realmente usa.