我在另一个Debian防火墙后面的Debian服务器上使用vsftpd。 natting是正确的,我可以从外部连接到ftp服务器。 但是,当客户端发出PASV命令时,ftp服务器返回其内部IP(192.168.0.19)。
我没有在conf文件中设置pasv_address指令,以便“地址从传入连接的套接字中获取”(从手册中复制出来)。 在我看来,当外部客户端发出PASV ,应该返回防火墙的外部IP地址,当内部客户端连接时,应该返回内部FTP服务器的IP。
当我将pasv_address指令设置为防火墙的外部IP时,一切都在外部工作,但是在内部中断。 当我将其设置为内部IP地址或注释掉pasv_address ,内部客户端工作,但外部客户端不工作。
任何人有任何见解?
编辑1:这里是服务器端的日志文件:
Thu Sep 7 10:36:15 2017 [pid 9093] FTP command: Client "xxxx", "USER yyy" Thu Sep 7 10:36:15 2017 [pid 9093] [yyy] FTP response: Client "xxxx", "331 Please specify the password." Thu Sep 7 10:36:15 2017 [pid 9093] [yyy] FTP command: Client "xxxx", "PASS <password>" Thu Sep 7 10:36:15 2017 [pid 9092] [yyy] OK LOGIN: Client "xxxx" Thu Sep 7 10:36:15 2017 [pid 9094] [yyy] FTP response: Client "xxxx", "230 Login successful." Thu Sep 7 10:36:15 2017 [pid 9094] [yyy] FTP command: Client "xxxx", "OPTS utf8 on" Thu Sep 7 10:36:15 2017 [pid 9094] [yyy] FTP response: Client "xxxx", "200 Always in UTF8 mode." Thu Sep 7 10:36:15 2017 [pid 9094] [yyy] FTP command: Client "xxxx", "PWD" Thu Sep 7 10:36:15 2017 [pid 9094] [yyy] FTP response: Client "xxxx", "257 "/"" Thu Sep 7 10:36:15 2017 [pid 9094] [yyy] FTP command: Client "xxxx", "CWD /DownloadProduction/" Thu Sep 7 10:36:15 2017 [pid 9094] [yyy] FTP response: Client "xxxx", "250 Directory successfully changed." Thu Sep 7 10:36:15 2017 [pid 9094] [yyy] FTP command: Client "xxxx", "TYPE A" Thu Sep 7 10:36:15 2017 [pid 9094] [yyy] FTP response: Client "xxxx", "200 Switching to ASCII mode." Thu Sep 7 10:36:15 2017 [pid 9094] [yyy] FTP command: Client "xxxx", "PASV" Thu Sep 7 10:36:15 2017 [pid 9094] [yyy] FTP response: Client "xxxx", "227 Entering Passive Mode (192,168,0,19,192,27)."
编辑2:我能够使用ProFTPD得到这个工作。 以下是Serverfault的情况: 防火墙后面的ProFTPd服务器返回WAN和LAN连接的内部IP地址
如果您位于外部防火墙之后,则传入连接实际上来自外部防火墙。 所以服务器的IP地址就是它的内部IP地址。 你所描述的是一个“正确”的行为。 FTP服务器不知道(也不可能)防火墙的外部IP地址。
你可以做的是分配两个IP地址到FTP服务器。 一个用于外部使用,一个用于内部使用。 并configurationFTP服务器返回外部IP地址连接的防火墙外部 IP地址; 和内部IP地址连接的内部 IP地址。
虽然我不确定,但如果vsftpd允许这样的configuration。 ProFTPD的确如此。
FTP通常会引起头疼,因为它不会在已经build立的控制连接上进行数据传输,而是需要打开一个额外的连接来传输数据。 FTP的第一个版本要求服务器打开这个连接到客户端 – 有时候NAT是未知的。 为了使这个工作与NAT,PASV发明了,所以客户可以打开第二个连接。 更好,但是 – 正如你所经历的 – 不是最佳的。
我有三个select:
为了使用vsfptd得到这个工作,我做了一些事情:
这使得现有的服务仅处理外部连接,而新的vsftpd内部服务仅处理内部连接。