FTP通过HAProxy

我有一台机器,它是主机,并安装了HAProxy并正在工作。 然后,我有一台IP 192.168.122.152的主机内部运行的客户KVM虚拟机。 我用VSFTPD在Guest机器上安装了一个FTP服务器。

从主机,如果我尝试命令$ ftp -p 192.168.122.152 ,完美的工作,我可以连接到来宾FTP。 我需要说的是,这个FTP被configuration为被动的,但被动和主动连接都在主机上工作。

这是来宾中/etc/vsftpd.conf部分的/etc/vsftpd.conf

 # Passive mode connect_from_port_20=NO tcp_wrappers=YES listen_address=192.168.122.152 pasv_enable=YES pasv_promiscuous=NO port_enable=YES port_promiscuous=NO pasv_max_port=10000 pasv_min_port=10250 

现在是时候让它可以从外部访问,所以我configuration/etc/haproxy/haproxy.cfg像这样:

 listen FTP_Default *:21 server ftp01 192.168.122.152 check port 21 inter 10s rise 1 fall 2 listen FTP_Range *:10000-10250 server ftp01 192.168.122.152 check port 21 inter 10s rise 1 fall 2 

但是,如果我尝试从互联网$ ftp -p $PUBLICIP其他机器连接,它只响应: Connected to <PUBLICIP> ,但它不要求login名和密码。

HAProxyconfiguration中的某些内容必须是错误的,因为它是唯一失败的地方。 顺便说一句,我试图在这个博客中调整我的configuration。

谢谢。

我find了解决办法。 看来我不得不使用指令pasv_address与系统的IP。 我会再次发布我用来使其工作的设置。

假设我们的公共IP是217.130.100.62 ,这里我们在Guest中有一个/etc/vsftpd.conf的提取:

 # Passive mode tcp_wrappers=YES pasv_address=217.130.100.62 pasv_enable=YES pasv_promiscuous=NO port_enable=YES port_promiscuous=NO pasv_min_port=10000 pasv_max_port=10250 

在这里,Host中的/etc/haproxy/haproxy.cfg中有一个简化的指令:

 listen FTP :21,:10000-10250 mode tcp server ftp01 192.168.122.152 check port 21 

haproxyconfiguration文件中的简化指令将导致所有端口(21,10000-10250)总是被redirect到端口21.这会给你以下错误:“425无法打开数据连接传输…”

为了解决这个问题,如果你没有定义一个端口,接收请求的端口将被redirect到后端。

listen ftp-host01 bind *:21 bind *:10000-10099 mode tcp server ftp-host01 192.168.1.1 check