Haproxy

通過 HAProxy 的 FTP

  • April 1, 2020

我有一台機器,它是主機,並且安裝了 HAProxy 並且可以正常工作。然後我有一個 Guest KVM 虛擬機在主機內部執行,帶有一個 IP 192.168.122.152。我用 VSFTPD 在 Guest 機器上安裝了一個 FTP 伺服器。

從主機,如果我嘗試命令$ ftp -p 192.168.122.152,完美執行,我可以連接到訪客 FTP。我需要注意的是,這個 FTP 被配置為被動的,但是被動和主動連接都在主機上工作。

/etc/vsftpd.conf這是Guest中部分內容的摘錄:

# 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 配置中的某些內容一定是錯誤的,因為它是唯一失敗的地方。順便說一句,我嘗試在這個部落格中調整我的配置。

謝謝。

我找到了解決方案。看來我必須使用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

引用自:https://serverfault.com/questions/441721