Страницы

среда, 28 мая 2014 г.

Mikrotik. Собственный FTP-сервис на домашнем компьютере. Проброс порта №21

Возникла задача сделать собственный простейших сервис загрузки/выгрузки файлов на домашний ftp-сервер.

Настройка ftp-сервера в ubuntu, можно посмотреть в заметке:
FTP-сервер Vsftpd на Hp proliant microserver

Для уменьшения проблем, клиент FTP надо настроить в пассивном режиме (PASSIVE MODE), который гарантирует, что все соединения будут открывать со стороны клиента к серверу, что гарантирует корректное прохождение NAT на роутере.

Для такого режима (FTP Passive mode) на роутере надо пробросить один порт. Моя конкретная ситуация осложняется тем, что порт № 21, ответственный за управление FTP, фильтруется на стороне провайдера.

Поэтому, сделаем себе другой порт на роутере (к примеру 12121) и его пробросим на стандартный порт № 21 на домашнем компьютере (192.168.1.11).

На Микротике надо добавить первое правило, в таблицу IP NAT.

Вот выкопировка:

$ /ip firewall nat print
 0   ;;; To FTP server. SERVER PASSIVE MODE
     chain=dstnat action=netmap to-addresses=192.168.1.11 to-ports=21
     protocol=tcp in-interface=wan dst-port=12121


Используется специальное действие, предназначенное для таких целей - netmap.
in-interface=wan - это для интернет- интерфейса трансляция.

Чтобы подключаться из домашней сети (bridge-local) я склонировал правило, указав входной интерфейс bridge-local.

Тоже самое проделал и для беспроводной сети, которая у меня удалена из bridge-local, и создает свой мост wireless. Это позволило избежать проблем при трансляции UDP-multicast.

Всё.

Настройка клиентов на Androide и настольном компьютере, простейшая. Только надо выбрать режим PASSIVE (Пассивный). И этот дурацкий 20 порт не будет участвовать в обмене.


Из Android FTP-клиентов очень понравился Turbo client. Так его и искать в Google Play.

Пока замечу, что c FTPS (SSL) у Turbo client в связки с NAT Mikrotik) пока возникают сложности, с которыми ещё надо разобраться. Ниже пример, решения. Другой FTP клиент, заработал, когда ему настроил второе правило, см. ниже.

Для того, чтобы некоторые клиенты корректно работали с FTPS (SSL), помимо настройки сервера, надо добавить проброс открываемых сервером портов, на домашний компьютер (ftp-сервер).

 4   ;;; To FTP Data
     chain=dstnat action=netmap to-addresses=192.168.1.11 to-ports=12122-12199
     protocol=tcp in-interface=wan dst-port=12122-12199


Эти значения корреспондируют с настройками в vstftpd сервере:

pasv_max_port=12199
pasv_min_port=12122
Т.е. FTP-сервер, при необходимости будет делать соединения в этом диапазоне.

Для моих настроек, для android ftp-клиента Turbo client сработало указание типа подключения FTPES. Именно ES. Для AndFTP - тип подключения FTPS (Explicit SSL).
Как-то так. Есть мелкие баги, которые постепенно выковыриваются.

Как результат, есть защищённый, анонимный доступ к домашнему ftp-серверу из внешней сети.

※※※

Часто возникает проблема подключения к ftp-серверу изнутри домашней сети, по его публичному адресу (или динамическому домену). Эта проблема известна - надо использовать дополнительное правило преобразования ip-адресов [3].
В случае несовпадения портов, надо использовать пример в [4].
Пока не настроил, приходится использовать доступ по внутреннему адресу, а при внешнем доступе - по внешнему.


Для упрощения операций на ftp-сервере, я задал права в /etc/vsftpd.conf:
anon_umask=0000
file_open_mode=0777



※※※

Ресурсы


1. FTP-сервер Vsftpd на Hp proliant microserver. http://gimmor.blogspot.ru/2012/09/ftp-vsftpd-hp-proliant-microserver.html
2. Консольный клиент FTP. http://lftp.yar.ru/
3. http://wiki.mikrotik.com/wiki/Hairpin_NAT
4. http://superuser.com/questions/663820/port-forwarding-from-inner-network-to-inner-network-hairpin-nat

※※※

Комментариев нет: