通过 HAProxy 进行 FTP

通过 HAProxy 进行 FTP

我有一台机器,它是主机,其中安装了 HAProxy 并且正在运行。然后我在主机内运行一个具有 IP 的 Guest KVM 虚拟机192.168.122.152。我在 Guest 机器上使用 VSFTPD 安装了一个 FTP 服务器。

从主机上,如果我尝试命令$ ftp -p 192.168.122.152,它会完美运行,我可以连接到客户 FTP。我需要注意的是,此 FTP 配置为被动,但从主机上来说,被动和主动连接都可以工作。

/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

现在是时候让它从外部访问了,因此我进行/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>,但不会要求输入登录名和密码。

HAProxy 配置肯定有问题,因为这是它唯一失败的地方。顺便说一句,我尝试调整我的配置以这个博客里的

谢谢。

答案1

我找到了解决方案。看来我必须使用pasv_address带有系统 IP 的指令。我将再次发布我用来使其工作的设置。

假设我们的公网 IP 是,这里我们在 Guest 中217.130.100.62有一段 的摘录:/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

这里,/etc/haproxy/haproxy.cfg主机中的一个简化的指令:

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

答案2

haproxy 配置中的简化指令将导致所有端口(21、10000-10250)始终重定向到端口 21。这将导致以下错误:

“425 无法打开数据连接进行传输……”

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

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

相关内容