11.4. Использование FTP в LVS кластере

FTP (Протокол передачи файлов) является достаточно старым и сложным многопортовым протоколом, реализация которого в кластере вызывает определённые сложности. Чтобы понять их суть, вы должны сначала получить некоторые базовые понятия о работе FTP.

11.4.1. Как работает FTP

Взаимодействие клиента со многими другими серверами происходит так: компьютер клиента устанавливает соединение с определённым портом сервера, а затем сервер отвечает клиенту с этого порта. Когда FTP-клиент подключается к FTP-серверу, он устанавливает соединение с портом управления FTP (21). Затем клиент сообщает FTP серверу тип устанавливаемого соединения: активное или пассивное. Тип соединения, выбранного клиентом, определяет то, как сервер будет отвечать и на каких портах будут выполняться транзакции.

Существуют два типа соединений для передачи данных:

Активные соединения

Если выбрано активное соединение, server устанавливает подключение с порта 20 на порт с большим номером, открытым на клиентской машине. Все данные передаются с сервера через это подключение.

Пассивные соединения

Когда выбрано пассивное соединение, клиент просит FTP сервер указать порт для пассивного соединения, при этом номер порта должен быть больше 10000. Затем сервер связывает этот номер с этим конкретным сеансом и пересылает номер порта клиенту. Клиент открывает новый полученный порт для передачи данных. Каждый запрос данных со стороны клиента приводит к установлению отдельного соединения. Большинство современных FTP-клиентов пытаются устанавливать с FTP-серверами пассивные соединения.

Необходимо учесть два замечания относительно работы этого протокола в кластере:

  1. Тип соединения определяет клиент, а не сервер. Это значит, что эффективная реализация FTP в кластере потребует от вас настройки на LVS маршрутизаторах поддержки и активных, и пассивных подключений.

  2. Во время работы FTP сервера с клиентом может быть открыто большое количество портов, о которых Piranha Configuration Tool и IPVS просто не знают.

11.4.2. Как это влияет на LVS маршрутизацию

IPVS маршрутизация пакетов допускает только избранные входящие и исходящие соединения, проверяя номер порта и метку межсетевого экрана. Если клиент из внешней сети пытается открыть порт, неизвестный для IPVS, соединение обрывается. Также, если реальный сервер устанавливает обратное соединение с Интернет, с портом, о котором не знает IPVS, соединение обрывается. Это означает, что все подключения FTP-клиентов из Интернет должны иметь одну назначенную им метку межсетевого экрана, а все соединения, исходящие от FTP сервера должны корректно пересылаться в Интернет, используя правила сетевых фильтров.

11.4.3. Создание правил сетевого пакетного фильтра

Прежде чем назначать правила iptables для службы FTP, ознакомьтесь с разделом 11.3.1 Назначение меток межсетевого экрана, посвящённым многопортовым службам и способам проверки существующих правил сетевого фильтра.

Ниже приведены правила, назначающие FTP-трафику одну метку межсетевого экрана, 21. Чтобы эти правила работали корректно, вы также должны в подразделе VIRTUAL SERVER программы Piranha Configuration Tool задать для виртуального сервера порта 21 значение 21 в поле Firewall Mark. Подробнее об этом написано в разделе 12.6.1 Подраздел VIRTUAL SERVER.

11.4.3.1. Правила для активных соединений

Правила для активных соединений указывают ядру принимать и перенаправлять соединения, приходящие на внутренний плавающий IP адрес с порта 20 — порта данных FTP.

iptables
/sbin/iptables -t nat -A POSTROUTING -p tcp \
               -s n.n.n.0/24 --sport 20 -j MASQUERADE

В приведённых выше командах iptables, n.n.n следует заменить первыми тремя числами плавающего IP для внутреннего сетевого интерфейса NAT, определённого в разделе GLOBAL SETTINGS программы Piranha Configuration Tool. Эта команда позволяют LVS маршрутизатору принимать подключения, исходящие от реальных серверов, о которых не знает IPVS.

11.4.3.2. Правила для пассивных соединений

Правила для пассивных соединений назначают соответствующую метку межсетевого экрана соединениям, приходящим из Интернет на плавающий IP службы, в широком диапазоне портов - от 10000 до 20000.

ПредупреждениеПредупреждение
 

Если вы ограничиваете диапазон портов для пассивных соединений, вы также должны настроить VSFTP сервер на использование этого диапазона. Сделать это можно, добавив в файл /etc/vsftpd.conf следующие строки:

pasv_min_port=10000
pasv_max_port=20000

Вы можете также управлять адресом, которые сервер показывает клиентам пассивных FTP-соединений. В LVS кластере с маршрутизацией NAT добавьте в файл /etc/vsftpd.conf следующую строку, чтобы заменить IP адрес реального сервера на VIP, который клиент и должен видеть во время соединения. Например:

pasv_address=X.X.X.X

Замените X.X.X.X VIP-адресом кластера LVS.

Как настроить другие FTP-сервера, вы узнаете из их документации.

Диапазон должен быть достаточно велик для большинства ситуаций; однако если потребуется, вы можете расширить его до диапазона всех незащищенных портов, заменив 10000:20000 в приведённых командах на 1024:65535.

iptables
/sbin/iptables -t mangle -A PREROUTING -p tcp \
               -d n.n.n.n/32 \
               --dport 21 -j MARK --set-mark 21
/sbin/iptables -t mangle -A PREROUTING -p tcp \
               -d n.n.n.n/32 \ 
               --dport 10000:20000 -j MARK --set-mark 21

В приведённых выше командах iptables, n.n.n.n следует заменить плавающим IP виртуального FTP-сервера, заданным в подразделе VIRTUAL SERVER программы Piranha Configuration Tool. Эти команды указывают фильтру назначить всем входящим пакетам, адресованным соответствующим портам плавающего IP адреса, метку межсетевого экрана 21, которая распознаётся IPVS и помогает правильно маршрутизировать пакеты.

ПредупреждениеПредупреждение
 

Команды, приведённые выше, вступают в силу сразу, но не будут действовать после перезагрузки системы. Как сохранить настройки сетевого пакетного фильтра после перезагрузки, вы узнаете в разделе 11.5 Сохранение настроек сетевого фильтра

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