У меня есть машина, которая является хостом, на которой установлен и работает HAProxy. Затем у меня есть гостевая виртуальная машина KVM, работающая внутри хоста с IP-адресом. 192.168.122.152
. Я установил FTP-сервер на гостевом компьютере с VSFTPD.
От Хоста, если я попробую команду $ 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 должно быть не так, потому что это единственная точка, где он не работает. Кстати, я пытался адаптировать свою конфигурацию под этот в этом блоге.
Спасибо.
Я нашел решение. Кажется, мне пришлось использовать директиву pasv_address
с IP системы. Я снова опубликую настройки, которые использовал, чтобы он работал.
Предположим, что наш общедоступный IP-адрес 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
Упрощенная директива в вашей конфигурации haproxy приведет к тому, что все порты (21, 10000-10250) всегда будут перенаправлены на порт 21. Это приведет к следующей ошибке:
"425 Can't open data connection for transfer of..."
Чтобы исправить это, если вы не определите порт, порт, на который был получен запрос, будет перенаправлен на серверную часть.
listen ftp-host01
bind *:21
bind *:10000-10099
mode tcp
server ftp-host01 192.168.1.1 check