我有一台机器,它是主机,其中安装了 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