Проблема FTP в контейнерах Docker

Вопрос или проблема

Для начала, я совсем новенький в использовании docker engine. У меня есть небольшой кластер из двух серверов с docker engine.

На node1 у меня: один контейнер с openvpn и контейнер с ftp, настроенный в пассивном режиме.

контейнер ftp:

docker run -d -v /var/lib/docker/volumes/ftpuserdb/_data:/home/vsftpd -p 20:20 -p 21:21 -p 21100-21110:21100-21110 -e FTP_USER=bob -e FTP_PASS=12345 -e PASV_ADDRESS=<PUBLIC IP>  -e PASV_MIN_PORT=21100 -e PASV_MAX_PORT=21110 -e PASV_ADDRESS_ENABLE=YES -e PASV_ENABLE=YES --name ftp-server fauria/vsftpd

На node2 у меня всего лишь контейнер для тестирования подключения ftp (ftpclient).

Я могу подключаться к ftp из (ftpclient), но когда я пытаюсь использовать пассивный режим, я получаю ошибку:

227 Entering Passive Mode (public,ip,from,node1,82,110). (я скрыл ip ^^)

ftp: connect: Connection refused

Когда я проверил брандмауэр: я вижу, что мой порт открыт.

Chain DOCKER (2 references)
target     prot opt source               destination
ACCEPT     udp  --  anywhere             IP          udp dpt:openvpn
ACCEPT     tcp  --  anywhere             IP           tcp dpt:3000
ACCEPT     tcp  --  anywhere             IP           tcp dpt:21110
ACCEPT     tcp  --  anywhere             IP           tcp dpt:21109
ACCEPT     tcp  --  anywhere             IP           tcp dpt:21108
ACCEPT     tcp  --  anywhere             IP           tcp dpt:21107
ACCEPT     tcp  --  anywhere             IP           tcp dpt:21106
ACCEPT     tcp  --  anywhere             IP           tcp dpt:21105
ACCEPT     tcp  --  anywhere             IP           tcp dpt:21104
ACCEPT     tcp  --  anywhere             IP           tcp dpt:21103
ACCEPT     tcp  --  anywhere             IP           tcp dpt:21102
ACCEPT     tcp  --  anywhere             IP           tcp dpt:21101
ACCEPT     tcp  --  anywhere             IP           tcp dpt:21100

Но если я попробую ftp с моего node2 напрямую с хоста, у меня нет проблем. Всё работает.

У кого-нибудь есть идеи? Я пробовал много всего и не могу понять….

С уважением

Согласно Википедии:

В пассивном режиме клиент использует управляющее соединение для отправки сервера команды PASV, после чего получает IP-адрес сервера и номер порта сервера от сервера, который клиент затем использует для открытия соединения данных с произвольного клиентского порта к IP-адресу сервера и номеру порта сервера, полученным от сервера.

Так что по сути клиент может подключиться к любому случайному порту на FTP-сервере.

Некоторые FTP-сервера (proftpd с директивой PassivePorts, например) могут быть настроены так, чтобы ограничивать порты, которые они используют для пассивного режима, некоторым диапазоном, который вы могли бы отобразить на тот же диапазон на хосте.

Ответ или решение

Проблема FTP в контейнерах Docker: Решение

В данной статье мы рассмотрим общую проблему, возникающую при подключении к FTP-серверу в контейнере Docker в режиме пассивной передачи. Ниже приводится подробное решение, основанное на вашем описании проблемы и конфигурации.

Описание проблемы

Вы работаете с двумя серверами Docker, на которых настроены контейнеры: на первом сервере (node1) работает FTP-сервер с поддержкой OpenVPN, а на втором (node2) — клиент для тестирования подключения к FTP. При попытке подключения из контейнера FTP-клиента в пассивном режиме возникает ошибка:

227 Entering Passive Mode (public,ip,from,node1,82,110).
ftp: connect: Connection refused

При этом попытка подключения с самого сервера node2 напрямую не вызывает никаких проблем, что указывает на то, что сам FTP-сервер работает корректно.

Причины проблемы

Причинами данной проблемы могут быть:

  1. Неверная конфигурация PASV_ADDRESS: Вы указали PASV_ADDRESS=<PUBLIC IP>. Убедитесь, что этот IP-адрес действительно соответствует внешнему адресу вашего сервера, к которому пытается подключиться клиент.

  2. Настройки сети контейнеров: Контейнеры Docker по умолчанию могут иметь различные сетевые настройки. Если клиентский контейнер пытается подключиться к серверу, возможно, он не может достучаться до открытых портов из-за их конфигурации.

  3. Проблемы с брандмауэром: Несмотря на наличие открытых портов, проверьте настройки на хостовой машине. Убедитесь, что нет дополнительных правил брандмауэра, которые могут блокировать подключение.

  4. Неправильный диапазон портов: Сервер FTP настроен на использование диапазона портов 21100-21110, и эти порты должны быть правильно проброшены через Docker на хост-машину.

Решение

Чтобы решить вашу проблему, выполните следующие действия:

  1. Проверьте значение PASV_ADDRESS:

    • Убедитесь, что PASV_ADDRESS содержит правильный публичный IP-адрес вашего сервера, с которого будет производиться подключение к FTP.
  2. Проверьте сетевые настройки:

    • Убедитесь, что контейнеры находятся в одной сети или что настройки сети позволяют им взаимодействовать друг с другом.
    • Возможно, вам следует использовать влияние Docker сети, чтобы еще больше упростить взаимосвязь контейнеров. Например, создание сети:
      docker network create ftp-network

      И запуск контейнеров в этой сети:

      docker run --network ftp-network ...
  3. Проверьте брандмауэр:

    • Убедитесь, что все необходимые порты открыты в брандмауэре:
      sudo ufw allow 20/tcp
      sudo ufw allow 21/tcp
      sudo ufw allow 21100:21110/tcp
  4. Проверьте проброс портов Docker:

    • Убедитесь, что вы правильно пробросили порты на хост для диапазона 21100-21110. Вы можете использовать следующие команды для проверки:
      docker ps

      Убедитесь, что контейнер FTP отображает правильные порты.

  5. Логи и отладка:

    • Проверьте логи вашего FTP-контейнера. Это можно сделать с помощью:
      docker logs ftp-server

      Обратите внимание на ошибки, которые могут помочь понять, почему соединение не устанавливается.

После выполнения всех вышеперечисленных действий ваше подключение к FTP-серверу в пассивном режиме должно успешно функционировать. Не забудьте протестировать соединение через FTP-клиент в контейнере node2, чтобы гарантировать, что все настройки были применены правильно.

Если какие-либо из шагов вызывают затруднения или возникают другие проблемы, пожалуйста, предоставьте дополнительные данные для более детального анализа.

Оцените материал
Добавить комментарий

Капча загружается...