Seu firewall (roteador) tem um auxiliar de rastreamento de conexão para FTP. Quando ele vê uma conexão de controle FTP (que reconhece pela porta de destino TCP == 21), ele observa os comandos. Quando ele vê seu cliente enviando o comando PORT
, ele o reescreve (para o seu endereço IP externo e talvez para uma porta diferente) e mantém o controle da conexão esperada do servidor FTP. Quando essa conexão chega, é permitido passar.
Quando você alterou a porta, nada disso aconteceu, porque 10021 não é reconhecido como uma conexão de controle FTP.
No Linux, pelo menos, esse recurso é o módulo nf_conntrack_ftp
e você pode definir a opção ports
para incluir 10021, se desejado.
PS: Uma coisa semelhante pode ser feita com um firewall na frente do servidor, embora ao contrário: é feito em transferências no modo passivo, em vez de no modo ativo.