Назад | Перейти на главную страницу

FTP через HAProxy

У меня есть машина, которая является хостом, на которой установлен и работает 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