FTP-сервер за NAT
Jan. 10th, 2017 11:36 amДавеча разглядывал конфигурационный файл в vsftpd на работе и обратил внимание на строки:
pasv_min_port=49152
pasv_max_port=65534
Выяснилось интересное. Как оказалось, диапазон забит очень неслучайно. Связано с тем, что исключительно майкрософтовские клиенты используют только эти порты для пассивного соединения и никакие другие. Это зашито прямо в спецификациях. Данные значения найдены где-то на технете в процессе поступающих жалоб от виндовых пользователей, сообщавших о невозможности использовать наш ftp для загрузки данных.
Что характерно, остальные клиенты работают без проблем в любых указанных сервером диапазонах вне зависимости от ОС.
Век живи — век учись.
Кстати вопрос к знатному собаководу по микротикам тов.
klink0v. Почему может требоваться опция passv_address=белый_ip в конфиге в vsftpd за натом, хотя трансляция адресов должна быть уже в цепочке dstnat? Без этого ftp работать отказывается. В выходные весь мозг чуть не сломал, пока не осенило.
UPD:
В комментах разгадка.
pasv_min_port=49152
pasv_max_port=65534
Выяснилось интересное. Как оказалось, диапазон забит очень неслучайно. Связано с тем, что исключительно майкрософтовские клиенты используют только эти порты для пассивного соединения и никакие другие. Это зашито прямо в спецификациях. Данные значения найдены где-то на технете в процессе поступающих жалоб от виндовых пользователей, сообщавших о невозможности использовать наш ftp для загрузки данных.
Что характерно, остальные клиенты работают без проблем в любых указанных сервером диапазонах вне зависимости от ОС.
Век живи — век учись.
Кстати вопрос к знатному собаководу по микротикам тов.
UPD:
В комментах разгадка.
no subject
Date: 2017-01-10 09:34 am (UTC)А по поводу диапазона - мать его за ногу, так вот почему фар работает, а виндоговно отказывается! Мля...
no subject
Date: 2017-01-10 11:34 am (UTC)no subject
Date: 2017-01-10 03:46 pm (UTC)no subject
Date: 2017-01-10 08:36 pm (UTC)При использовании пассивного режима клиент командой PASV просит сервер выбрать порт по своему усмотрению, открыть его и пассивно ждать второго соединения от клиента для передачи данных (файла или листинга каталога), а в ответ на эту команду сервер сообщает клиенту выбранный порт.
Сервер, конечно, выбирает порт из фиксированного диапазона, но фраза "клиенты используют только эти порты" не имеет смысла, потому что клиент при пассивном режиме не выбирает порт, а использует тот, что выбрал сервер и клиенту глубоко фиолетово, какой именно динамический порт сервер выбрал.
no subject
Date: 2017-01-10 08:40 pm (UTC)Остальным же клиентам пофиг, они работают именно так, как ты описал.
no subject
Date: 2017-01-10 08:43 pm (UTC)no subject
Date: 2017-01-10 08:51 pm (UTC)Коллега два дня бился тогда над этой проблемой. Я попробую завтра у него ссылку спросить.
no subject
Date: 2017-01-10 08:58 pm (UTC)Одна из проблем с виндовыми FTP-клиентами в том, что они по дефолту в зависимости от версии могут использовать наоборот *активный* режим, который плохо совместим с NAT на стороне клиента и/или брандмауэром там же. Точнее, совместим лишь при определенных условиях/настройках на стороне клиента, которые нынешне пользователи настраивать не умеют.
А "FAR работает" как раз потому, что использует пассивный режим вместо активного.
no subject
Date: 2017-01-30 01:40 am (UTC)например https://stackoverflow.com/questions/18643542/how-to-use-passive-ftp-mode-in-windows-command-prompt
no subject
Date: 2017-01-30 05:45 am (UTC)no subject
Date: 2017-01-10 08:41 pm (UTC)Если же NAT достаточно умён, чтобы править адрес внутри payload, то passv_address в конфигурации ftp-сервера менять не надо.
no subject
Date: 2017-01-10 08:51 pm (UTC)no subject
Date: 2017-01-10 09:15 pm (UTC)* винда является FTP-сервером, а не клиентом и тогда да, клиенты в пассивном режиме будут идти к винде на динамические порты такого вида, но это не тот случай, который рассматривается в посте;
* винда является FTP-клиентом и клиент использует активный режим вместо пассивного и сам выбирает порт для передачи данных, но тогда упомянутый в посте серверный конфиг не имеет никакого значения и никак не влияет на успех/неуспех коннекта;
* винда является FTP-клиентом и клиент использует пассивный режим и исходящие коннекты клиента фильтруются брандмауэром с жесткой политикой, разрешающей исходящие коннекты не на произвольные порты, а только на избранные, прописанные в этой политике и в ней разрешены коннекты, в частности, на диапазон 49152 и выше, а на другие ограничены. И вот в этом случае - да, указанный в посте конфиг решает проблему, но суть проблемы тут вовсе не в NAT, а в брандмауэре и если клиенты на реальных адресах и NAT нет, но есть такой пакетный фильтр - проблема будет та же самая и решается так же (как указано в посте). Но почему-то в посте ни слова про пакетный фильтр нет, а это самое главное. Но в этом случае проблема будет у любых FTP-клиентов за таким брандмауэром, хоть MS-овских, хоть нет.
no subject
Date: 2017-01-11 05:39 am (UTC)no subject
Date: 2017-01-11 01:30 pm (UTC)no subject
Date: 2017-01-12 05:50 am (UTC)no subject
Date: 2017-01-12 05:54 am (UTC)no subject
Date: 2017-04-02 09:25 pm (UTC)Для FTP на IIS.
И вполне есть крутилка в реестре/веб.конфиг для подкручивания диапазона.
no subject
Date: 2017-04-02 09:48 pm (UTC)no subject
Date: 2017-04-03 12:02 am (UTC)Не говоря уж о стандартном поведении "разрешить все исходящие" для domain/private сетей.
Ну а касаемо Port range - ссылка на Технет может быть, я даже догадываюсь какая, но она не нужна.
Указанный port range относится к dynamic, описанных в RFC:
o the Dynamic Ports, also known as the Private or Ephemeral Ports,
from 49152-65535 (never assigned)
Так что только следование стандартам может быть, а не "опять MS что-то там"