防火墙后面的ProFTPd服务器返回WAN和LAN连接的内部IP地址

我在另一个Debian防火墙后面的Debian服务器上使用ProFTPD。 我可以从外面连接到ftp服务器。 但是,无论WAN或LAN连接如何,所选虚拟主机始终为192.168.0.4。 当ftp服务器使用内部IP地址响应WAN连接时,会导致进入PASV模式时出现问题。

我知道WAN连接有一个MasqueradeAddress指令,但我的WAN连接连接到我的内部虚拟主机。

由于FTP服务器上只有一个IP地址,我是否需要使用mod_ifsession模块,如下所述: http : //www.proftpd.org/docs/howto/NAT.html ?

在原来的问题中,我问是否必须使用mod_ifsession模块。 到目前为止,这是我能够实现的唯一方法。 也许这是预期的,但我希望使用一个<VirtualHost>块让它工作。

这是我做的:

 <IfModule mod_ifsession.c> <Class internal> From 192.168.0.0/24 </Class> <IfClass !internal> MasqueradeAddress 1.2.3.4 </IfClass> </IfModule> 

使用它,传入的LAN连接获得内部IP( 192.168.0.4 ),WAN连接获得外部IP( 1.2.3.4 )。 我不知道它是否理想,但它确实有效。

编辑:我也能够得到它使用不同的端口,build议。 您可能希望或不希望在非标准端口上运行ftp,所以也许这种方法不适合您。 如果使用2121将防火墙上的端口21转发到ftp服务器,并在端口2121上监听一个<virtualHost>块,那么就知道这是一个外部连接。 这里是我用于这个块:

 <VirtualHost 192.168.0.4> ServerName "External" Port 2121 MasqueradeAddress 1.2.3.4 </VirtualHost> 

注意:如果这样做,“服务器configuration”(不在<virtualHost><Global>块)指令中的任何内容都不会被应用。 您可能需要重复一些指令或使用<Global>块。