Недавно для корпоративных нужд нам потребовалось поднять FTP-сервер, причем чтобы доступ к нему был как из интернета, так и из локальной сети. Мы воспользовались своими же рекомендациями из статей нашего блога и еще раз протестировали способы настройки MikroTik для этих целей.
Схема нашей сети:
- Роутер MikroTik RB951G-2HnD с внешним статическим IP, скажем, 1.1.1.28 и локальной сеткой за ним.
- Компьютер, на котором подняли FileZilla Server, с локальным адресом 192.168.88.10.
- В настройках FileZilla: управляющий порт FTP-сервера - 21, пассивный режим FTP (мы решили использовать его как более простой в настройке и безопасный) с диапазоном портов для передачи данных - 50000-50050.
Настройка сервера FileZilla Server
На установке программы FileZilla Server подробно останавливаться не будем - в сети довольно много пошаговых инструкций. Установка никаких проблем не вызвала.
1. Заходим в раздел настроек (Setting). В общих настройках (General Settings) нужно прописать основной (управляющий) порт FTP, мы оставили тот, что по умолчанию - 21. Увеличили таймаут соединения до 600 сек, остальные настройки не меняли.
2. На вкладке Passive Mode Settings (настройки пассивного режима FTP-сервера) указали диапазон портов для передачи данных. Он может быть произвольным, с учетом, конечно, тех портов, что вы уже используете в работе. В документации FileZilla Server не рекомендовалось использовать порты ниже 1024.
Остальные настройки оставили по умолчанию.
3. Переходим в меню Users. В разделе общих настроек (General) указали логин и пароль для будущих подключений.
4. В разделе Shared folders указали пути к папкам, которые будут расшариваться на FTP. Проставили галки разрешений для папок и файлов - можно ли удалять, добавлять, читать, изменять и т. д.
Сразу отметим, что разрешения действий с папками и файлами могут оказаться важными. К примеру, нам понадобилось сохранять данные на FTP-сервер из программы колл-трекинга ACR. Однако программа постоянно сбрасывала соединение, как оказалось впоследствии - по причине отсутствия разрешения на создание папки в каталоге сервера.
5. Добавили FileZilla Server в исключения брандмауера на компьютере, на котором он установлен.
6. Антивирус также может блокировать запросы на FTP-сервер, но у нас с этим все было в порядке.
Включили FTP в IP - Service
На роутере MikroTik заходим в IP - Service и включаем FTP.
Вообще, по идее, должно было работать и с отключенным FTP, даже более того - в некоторых случаях, по отзывам, этот параметр препятствует корректной работе сервера за MikroTik. Но у нас не работало, поэтому мы включили.
Настройка проброса портов для FTP сервера
Настройка проброса портов детально описана в этой статье, здесь мы на теоретической части подробно останавливаться не будем.
Напомним, что FTP-сервер для работы требует двух типов портов: управляющего, по которому передаются служебные данные, и отдельного диапазона портов для передачи файлов. Поэтому мы создали два правила NAT:
- для управляющего 21-го порта;
- для диапазона портов 50000-50050.
Мы изначально настроили и включили оба правила, но экспериментальным путем выяснили, что все работает и передается и с одним правилом для 21 порта. По крайней мере, в нашей конфигурации.
1-е правило - для управляющего порта
На первой вкладке General - прописываем признаки пакетов, которые должны обрабатываться правилом проброса порта.
- Chain = dstnat (т. е. для пакетов, направленных во внутреннюю сеть).
- Dst. Address = 1.1.1.28 (адрес назначения, который прописан в пакете, у нас пакеты будут адресованы на внешний адрес роутера, поэтому пишем здесь его).
- Protocol = 6 (tcp).
- Dst. Port = 21.
- In. Interface = ether1.
На вкладке Action - действие, которые выполняется, если пакет им соответствует. В данном случае мы прописываем замену адреса назначения в пакете (dst-nat) и указываем, на какой адрес и порт его заменить - на внутренний адрес компьютера с FTP-сервером (192.168.88.10), порт 21.
2-е правило - проброс диапазона портов для данных
Полностью аналогично прописываем правило переброса портов для диапазона портов данных:
Поднимаем эти правила выше дефолтного правила маскарадинга.
Так как роутер обрабатывает пакеты, обращаясь к правилам по порядку их расположения на вкладке NAT роутера, нам нужно поднять наши правила выше тех, под которые могут попасть наши пакеты, в том числе выше правила маскарадинга, заданного по умолчанию. Просто перетаскиваем их мышью вверх.
Проверили: доступ к FTP серверу работает и с удаленного компьютера, расположенного в сети другого провайдера, и со смартфонов, использующих 3G.
Теперь нам нужно настроить, чтобы к FTP можно было подключиться и из нашей локальной сети, используя те же данные для подключения, то есть, внешний IP-адрес роутера.
Настройка Hairpin NAT MikroTik
По умолчанию зайти из локальной сети по внешнему адресу на роутер нельзя - вот в этой статье подробно объясняется, почему. Поэтому нам нужно настроить отдельные правила NAT, которые бы создавали исключения из общих правил и правильно обрабатывали такие пакеты.
Мы протестировали 3 способа настройки, все они отлично работали в нашей конфигурации.
1-й способ
В общей сложности он содержит 3 правила, работающих в связке.
1.1 - уже созданное нами правило проброса портов, описанное выше. Мы его не изменяем.
1.2. - Правило, которое можно обозначить, как: "Во всех пакетах, у которых адресом источника стоит этот диапазон IP-адресов, а адресом назначения - внешний IP-адрес роутера, поменять адрес назначения на адрес компьютера с FTP-сервером".
- chain = dstnat;
- Src. Address = 192.168.88.0/24 - пул локальных IP-адресов, с которых могут поступать обращения на FTP-сервер;
- Dst. Address = 1.1.1.28;
- Protocol = 6 (tcp);
- Action = dst-nat;
- To Addresses = 192.168.88.10.
1.3. Далее нам нужно позаботиться об ответных пакетах, отправленных FTP-сервером с адреса 192.168.88.10. Ведь он будет адресовать их на то устройство локальной сети, чей адрес был вписан в пакете данных как адрес источника. А так как устройство отправляло пакет на 1.1.1.28, то и ответ оно ждет оттуда, а не с локального 192.168.88.10, соответственно, этот ответный пакет оно отбросит.
Поэтому мы "ловим" этот пакет и обрабатываем следующим правилом: "Для всех пакетов, у которых адресом источника стоит этот локальный диапазон адресов, а адресом назначения - локальный адрес компьютера с сервером, применяем маскарадинг". Маскарадинг - это замена локального IP-адреса устройства, отправившего пакет, на IP-адрес сервера. После применения этого правила в адресе источника в пакете будет вписан 1.1.1.28, а не 192.168.88.10.
2-й способ
Здесь только 2 правила.
2.1 - созданное нами первое правило проброса портов, но немного измененное.
Из правила убираем In. Interface ether1: так как в этом случае пакеты будут "стучаться" не только через внешний интерфейс, но и через внутренние.
Соответственно, нам не понадобится правило 1.2 из 1-го способа, поскольку измененному правилу проброса портов и без него будут соответствовать пакеты и из внешней, и из локальной сети.
Правило проброса диапазона портов мы не меняли, но как мы уже написали выше - у нас доступ к FTP-серверу прекрасно функционировал и тогда, когда мы отключили это правило вообще.
2.2. А вот правило srcnat (1.3 из 1-го способа) нам понадобится, так как по-прежнему нужно заменить адрес источника:
3-й способ
Предложен в комментарии к статье про настройку доступа из локальной сети пользователем Stealth.
Также состоит из двух правил: измененного проброса портов и srcnat.
В первоначальном правиле проброса портов мы не указываем в качестве критерия обработки пакетов адрес назначения, а указываем на вкладке Extra его тип: local - принадлежащий одному из интерфейсов маршрутизатора. То есть под правило проброса портов будут попадать все пакеты, отправленные на адрес любого интерфейса маршрутизатора и на порт 21.
На вкладке Action в поле To Ports можно указать 21 порт. У нас работало и с указанием порта, и без него.
Второе правило - srcnat - точно такое же, как в остальных примерах.
Во всех случаях правила настройки NAT мы также поднимали выше общего правила маскарадинга.
Итоги
Повторим, что мы проверили все эти способы настройки на своей конфигурации и они рабочие. Файлы закачиваются и скачиваются:
- с компьютеров за NAT (из внешней сети),
- с локальных компьютеров внутри сети,
- с мобильных устройств, подключенных к FTP-серверу по Wi-Fi к роутерам в локальной сети,
- с мобильных устройств, подключенных к FTP-серверу по 3G.