Na pergunta original, perguntei se precisava usar o módulo mod_ifsession
. Até agora, essa é a única maneira de fazer isso funcionar. Talvez isso seja esperado, mas eu esperava usar um bloco <VirtualHost>
para que funcionasse.
Aqui está o que eu fiz:
<IfModule mod_ifsession.c>
<Class internal>
From 192.168.0.0/24
</Class>
<IfClass !internal>
MasqueradeAddress 1.2.3.4
</IfClass>
</IfModule>
Usando isso, as conexões LAN recebidas recebem o IP interno ( 192.168.0.4
) e as conexões WAN obtêm o IP externo ( 1.2.3.4
). Não sei se é ideal, mas funciona.
Editar: também consegui trabalhar usando uma porta diferente, como sugerido. Você pode ou não querer executar o ftp em uma porta não padrão, então talvez esse método não seja para você. Se você encaminhar a porta 21 no firewall para o servidor ftp usando, por exemplo, 2121 e escutar na porta 2121 em um dos blocos <virtualHost>
, você saberá que é uma conexão externa. Aqui está o bloco que usei para isso:
<VirtualHost 192.168.0.4>
ServerName "External"
Port 2121
MasqueradeAddress 1.2.3.4
</VirtualHost>
Observação: Se você fizer dessa maneira, as diretivas "configuração do servidor" (qualquer coisa que não esteja em <virtualHost>
ou <Global>
block) não serão aplicadas. Você pode ter que repetir algumas diretivas ou usar um bloco <Global>
.