Доступ к локальному ftp через WAN?


  • Коллеги, здравствуйте!
    Никак не могу решить следующую проблему с FTP.
    Имеем PFSense 2.4.4-p3 c 1 LAN и 3 WAN интерфейсами. В локальной сети поднят Filezilla Server со следующими настройками.
    alt text

    На PFSense настроено 2 правила Port Forwarding на WAN3 для 21 и 20001-20999 портов. Из интернета клиенты давно и успешно подключаются по адресу ftp.domainname.ru.

    В конце декабря у нас появилась программа, в которой обмен данными реализован только по протоколу ftp. Т.е. доступ нужен именно к тем же папкам, к которым подключаются клиенты извне. Единственные настройки ftp в программе - возможность задать имя или ip-адрес хоста для подключения ftp, имя пользователя и пароль. Активный или пассивный режим выбрать нельзя, иначе бы я просто указал IP-адрес локальной сети, поставил активный режим и вопрос был закрыт. Дописать программу разработчик тоже не может, к сожалению.
    Пробовал Split DNS, но тут появляется проблема с подключением у внешних клиентов.

    Можно ли как-то настроить доступ к FTP-серверу из локальной сети через внешний ip-адрес адаптера WAN3?

    P.S. Т.к. программа должна была заработать именно здесь и сейчас поднял второй FTP-сервер именно для локальной сети. Для этого пришлось продублировать всех пользователей и «расшарить» папки на первом сервере.
    Был бы очень благодарен за помощь.


  • @igor-filth said in Доступ к локальному ftp через WAN?:

    Можно ли как-то настроить доступ к FTP-серверу из локальной сети через внешний ip-адрес адаптера WAN3?

    Попробуйте в
    System-Advanced-Firewall & NAT
    включить
    NAT Reflection mode for port forwards.
    Будет работать по умолчанию для всех Port Forward.

    Индивидуально NAT reflection можно включить в конкретном правиле Port Forward.


  • @pigbrother
    Пробовал включать в правилах форвардинга. Не помогло.

    Если быть точнее, то если ставить Pure NAT, то вообще не соединяется.
    Если ставить NAT + Proxy, то соединение происходит, но получить список каталогов программа не может, а на FTP сервере отображается что соединение идёт с локального IP-адреса PFSense. В общем та же ситуация, как и если на FTP-клиенте указать локальный IP адрес FTP-сервера - требуется активный режим((


  • @igor-filth
    Мил человек, у вас и фтп и программа в ЛОКАЛЬНОЙ сети.
    Какой НАТ? Какой сплит днс? Вы чего?
    Укажите в программе ЛОКАЛЬНЫЙ ip-адрес вашего фтп.
    Чего вы в дом через окно-то ходите?


  • @werter
    Я про это писал в первом сообщении.

    Разумеется, с этого и начали, извращенцев у нас в отделе нет.

    Вот только для доступа к ftp-серверу в локальной сети нужно подключиться с клиента в активном режиме. А программа этого не умеет и уметь не будет.

    А с пассивным режимом, в котором работает программа, всё несколько сложнее. Если указать в настройках FTP-сервера Use The following IP локальный ip адрес сервера, и затем подключаться на этот локальный адрес из программы в локалке, то всё работает. Только при этом клиенты из интернета не могут подключиться))
    Поэтому и пришлось временно (надеюсь, временно) 2 FTP-сервера поднять - на одном в поле Use the following Ip забит локальный ip на другом внешний.


  • А при настройках как на скриншоте в заглавном посте при подключении из локальной сети к локальному ip ftp-сервера получаем ошибку "425 Can't open data connection for transfer of "/""


  • @igor-filth Привет. Тоже столкнулся. У нас в сети два сервера ftp - один на proftpd, другой на vsftp. Как ты и писал косяк начинается при использовании активных/пассивных режимов работы ftp сервера. В документации PF написано (лень искать ссылку, просто опишу) что он корректно не обслуживает перенаправление для протокола ftp т.к. протокол этот слишком старый и идёт вразрез с современными понятиями, чтобы это не значило. Ещё там приводится пример настройки для возможного обхода этой фигни и даже есть плагин специальный чтобы включить ftp-proxy. Но! Я всё это перепробовал и ничего мне не помогло, так что можно сразу пропустить.

    Если в настройках сервера ftp (как ты и пишешь) указать под каким внешним адресом IP он работает, то из-вне клиенты будут обслуживаться, а из локалки нет. И да, можно что хочешь делать, но ни по IP ни по названию хоста из локалки не заведётся пока не выключишь опцию с внешним IP в настройках сервера. Но что интересно у vsftp как-то работает. И теперь у нас proftp только из-вне, а vsftp нормально как было. Короче тут целый букет факторов - какой сервер, какой клиент, договорятся... не договорятся... у одних в пассивном работает... у других только в активном... у третьих и выбора нету, только какой-то один зашит. Поэтому приходится сервер конфигурировать с потдержкой всех режимов и нельзя его перевести в один какой-то. Беда. На прошлом роутере работало нормально. Я в последнее время часто начал прошлый роутер вспоминать, когда в PF что-то глючит.

    Что можно придумать?

    • Можно настроить рядом два сервера ftp, которые обслуживают одни и те-же паппи. Один сервер настроить на внешний мир, другой для локалки.
    • Можно расшарить в локалку и потключаться к папкам как к сетевым ресурсам.
    • Можно поискать другой сервер ftp (например vsftp), который будет адекватно работать.

  • @luha said in Доступ к локальному ftp через WAN?:

    В документации PF написано (лень искать ссылку, просто опишу) что он корректно не обслуживает перенаправление для протокола ftp

    Вряд ли, но вдруг поможет установка пакета FTP_Client_Proxy


  • @pigbrother Писал выше - не помогает.

    В настройках сервера надо указать его ВНЕШНИЙ адрес IP, чтобы он ПРАВИЛЬНО мог работать с клиентом и тот мог подключиться. Вот этот ВНЕШНИЙ адрес В НАСТРОЙКАХ сервера и МЕШАЕТ при подключении из ЛОКАЛКИ. Клиента посывает НА ВНЕШНИЙ адрес IP, который из локалки НЕ ДОСТУПЕН.

    При чём тут пакет прокси и как это должно было помочь?!


  • @luha said in Доступ к локальному ftp через WAN?:

    @pigbrother Писал выше - не помогает.

    В настройках сервера надо указать его ВНЕШНИЙ адрес IP, чтобы он ПРАВИЛЬНО мог работать с клиентом и тот мог подключиться. Вот этот ВНЕШНИЙ адрес В НАСТРОЙКАХ сервера и МЕШАЕТ при подключении из ЛОКАЛКИ. Клиента посывает НА ВНЕШНИЙ адрес IP, который из локалки НЕ ДОСТУПЕН.

    При чём тут пакет прокси и как это должно было помочь?!

    Да, проморгал.

    @luha said in Доступ к локальному ftp через WAN?:

    Клиента посывает НА ВНЕШНИЙ адрес IP, который из локалки НЕ ДОСТУПЕН.

    Для доступа из LAN к внешнему IP помог бы NAT Reflection, но как вы писали выше, с вашим FTP это не работает.


  • @Igor-Filth

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

    Активный и пассивный - режимы работы СЕРВЕРА, не клиента.

    А если на Default оставить или Retrive выбрать?

    Там еще и пункт Don't use external .. есть для запрета подключения по внешнему ип локальным клиентам. Если не откл., то по внешнему ип локальные клиентв не подключаться (ну и костыль) Его пробовали откл для варианта вашей петли?


  • @werter Я за топикстартера не возьмусь говорить, но поскольку тоже имею похожую ситуацию то отписываюсь.

    Бывает что сервисы завязаны только на ftp и его используют клиенты в большом количестве. У нас туда загружаются фотографии. И проблема лежит в разнообразии клиентов. Надо всем им обеспечить доступ. У части работает и пассивный режим и активный нормально, у другой части или одно или другое. А ещё высылают с разных устройств - могут из дому с компьютера, а могут прято с фотоаппарата. И ничего с этим нельзя поделать. Поэтому приходится сервер FTP настраивать на все режимы. А в связке с PF оказывается что не все режимы работают правильно и не на любом сервере FTP. И вроде сам PF тут не виноват.


  • @luha said in Доступ к локальному ftp через WAN?:

    , у другой части или одно или другое.

    В фаере винды фтп клиент разрешен? Проверьте этот момент на всех проблемных машинах. И во всяких касперских и т.д. на рабочих местах.

    Далее. Если подключение идет ИЗВНЕ - проверить, открыты ли порты 20-21 и диапазон пассивных вовне.

    Ни разу, сколько не настраивал не было проблем с СЕРВЕРОМ. Были проблемы в кривых руках на местах. Повторюсь, НИ РАЗУ. А настроил я их мнооого.

    Зы. Если у вас есть проблемные клиенты - давайте доступ. Вместе проверим.

    Зы2.

    а могут прято с фотоаппарата

    ПО на нем обновите. И не очень верится, что ПРОСТОЙ пользователь сможет настроить фтп-клиент НА ФОТОАППАРАТЕ. Сказки это.
    Больше верится в то, что описал выше.


  • @Igor-Filth

    Попробуйте NAT Reflection mode for port forwards = NAT + proxy, снять галку Don't use external .. на зилле и перезагрузить пф и зилле.

    Далее на ЛАН пф создать правило, где в src - локальный IP зиллы, а в GW - GW WAN3.
    Поставить это правило ВЫШЕ всех.

    После - Diagnostics -> States -> Reset States.
    Немного подождать и обратиться фтп-клиентом к адресу WAN3 для проверки
    К ip адресу - не имени.


  • @werter )))

    Сервер это линукс машина в шкафу. Она в работе уже много лет.

    Клиенты это фотографы по всему миру, которые работают в разных полевых условиях, начиная от встречи глав государств и заканчивая удобрением грядок в нагорье Испании. Они берут зеркалку NIKON, у неё есть втроенная функция описать IPTC и выслать на FTP.

    В какой винде мне надо что проверить, какие порты, какой антивирус и как поступить с клиентами? И почему годами работало нормально, а поставили PF и перестало?


  • @luha said in Доступ к локальному ftp через WAN?:

    Сервер это линукс машина в шкафу. Она в работе уже много лет.

    ПО на нем обновляли? apt update\yum update давно делали ?

    Давайте доступ - разберемся вместе. Самому интересно. В сказки давно не верю, извините.

    ЗЫ. Passive mode на Никонах - https://www.youtube.com/watch?t=238. Другой вопрос, что порты для пассива могут быть закрыты в том месте, где клиент подключается. Но это проблема не фтп-сервера и не пф.


  • @werter Да всё у нас с сервером FTP нормально. Там свежее актуальное ПО. Рядом стоит другой сервер, тоже свежее ПО, но вместо proftpd там используется другой пакет - vsftpd (кстати его упоминают в доках PF). И на нём работает как в локалке, так и снаружи. А у proftpd или надо отключить пассивный режим или не будет работать в локалке.
    Из конфига proftpd:
    "If your host was NATted, this option is useful in order to allow passive tranfers to work. You have to use your public address and opening the passive ports used on your firewall as well."

    MasqueradeAddress 000.000.000.000 (тут внешний ip сервера, я спрятал ноликами)

    Я с сервером сам могу разобраться, но спасибо большое за предложение.

    Вот. Всётаки пришлось поискать ссылку, ато вижу начинается недопонимание в наших рядах:
    https://docs.netgate.com/pfsense/en/latest/recipes/ftp-without-proxy.html


  • @luha
    https://www.dpreview.com/forums/post/63624307

    The issue is definately a question of active vs. Passive FTP.

    Passive FTP works by: Client calls server on port 21. Here they negotiate a dataport the Client should use to contact the server on to transmit data. If you are accessing Internet via a NAT (You do - almost nothing is Public when it comes to clients), the firewall/NAT device needs to allow that port outbound as well - ussually that’s not a big problem - which is why passive FTP mostly works.

    Active FTP works by: The same process, but the negotiation ends up with a port that the CLIENT needs to open so the server can access the client.. If you are behind a firewall/NAT device, that device needs to “inspect” the FTP session to see which port the server/client agrees upon and open that port up (Otherwise inbound ports are never open). It also needs to do a more advanced NAT as it needs to replace something within the packet for the session to work (apart from sender IP). This is a HORRIBLE HORRIBLE solution, and basically never works on Carriergrade NAT solutions that many ISP use, and is starting to be blocked by default on most homegrade firewalls as well because it’s a massive security hole.


  • @werter Да. У никонов странно реализовано. Причём бывает что в одной сети только активный фурычит, а в другой только пассивный. Когда появляется новый фотограф то я первое время с ним устаю учить как эти настройки менять.


  • @luha
    И написал ,что на пф надо открывать TCP\21 + перечень портов для пассива ТАКОЙ ЖЕ как на фтп-сервере. Всё. Больше ничего не надо делать со стороны сервера и пф.


  • @werter Всё открыто как надо. Я этой фигнёй несколько дней занимался, всё надеялся поправить как-то. Пойми - оно работает. Но только снаружи.


  • @luha
    Вкл. дампинг трафика и смотри. Клиент же через ви-фи к фтп подключается? На ви-фи он не в ГОСТЕВОЙ сети?


  • @werter Любая сеть, которая не "снаружи" провоцирует глюки при соединении с FTP. Клиент подключается нормально к серверу, нормально логинится, но дальше не получает ответ и сессия как-бы зависает. В терминале ничего не происходит.


  • @luha В логах фтп-сервера что при этом? Не может быть , чтобы там ничего не было.


  • @werter На вот, полюбуйся что творится.

    Статус: Определение IP-адреса для ftp.bobik.com
    Статус: Соединяюсь с 192.168.1.18:21...
    Статус: Соединение установлено, ожидание приглашения...
    Статус: Небезопасный сервер, не поддерживает FTP через TLS.
    Статус: Авторизовались
    Статус: Получение списка каталогов...
    Команда: PWD
    Ответ: 257 "/" is the current directory
    Команда: TYPE I
    Ответ: 200 Type set to I
    Команда: PASV
    Ответ: 227 Entering Passive Mode (XXX,XX,XX,XX,XXX,XX). - тут я подправил адрес
    Команда: MLSD
    Ошибка: Соединение прервано после 20 секунд неактивности
    Ошибка: Не удалось получить список каталогов
    Статус: Отключен от сервера
    Статус: Определение IP-адреса для ftp.bobik.com
    Статус: Соединяюсь с 192.168.1.18:21...
    Статус: Соединение установлено, ожидание приглашения...
    Статус: Небезопасный сервер, не поддерживает FTP через TLS.
    Статус: Авторизовались
    Статус: Получение списка каталогов...

    ... и так бесконечно.


  • @werter А вот я соединяюсь с vsftpsd сервером

    Статус: Определение IP-адреса для ftp.tuzik.com
    Статус: Соединяюсь с 192.168.1.23:21...
    Статус: Соединение установлено, ожидание приглашения...
    Статус: Небезопасный сервер, не поддерживает FTP через TLS.
    Статус: Сервер не поддерживает символы не ASCII.
    Статус: Авторизовались
    Статус: Получение списка каталогов...
    Статус: Список каталогов "/" извлечен

    ))


  • @luha
    На втром листинге нет пассив моде.

    Покажите iptables -L -v -n на проблемном сервере.


  • @werter Браво! Я же говорю - два сервера. На одном работает на другом нет.

    Оба настроены с пассивным режимом. Вот настройки со второго сервера:

    by luha

    ** Use the hostname in the PASV response (DNS must be setup and match!)
    pasv_addr_resolve=YES
    ** Enable Passive Mode
    pasv_enable=YES
    ** Set the passive port range (1000 ports)
    pasv_min_port=20000
    pasv_max_port=20999


  • @luha
    Есть предположение что при переходе в пассивный режим, ваш FTP-сервер переключается на порт который заблокирован фаерволом.

    Я могу посоветовать временно отключить фаервол для проверки

    Проверь этот момент.


  • @luha
    https://docs.netgate.com/pfsense/en/latest/recipes/ftp-without-proxy.html

    # Do not allow the client to use PORT
    **port_enable=NO**
    # Use the hostname in the PASV response (DNS must be setup and match!)
    pasv_addr_resolve=YES
    # Enable Passive Mode
    pasv_enable=YES
    # Set the passive port range (1000 ports)
    pasv_min_port=20000
    pasv_max_port=20999
    

  • @werter Я думаю что клиент в случае с proftpd получает жёстко установленный адрес IP и в локальной сети это создаёт проблемы. У vsftpd не надо жёстко указывать IP, он его сам вычисляет, видимо сам находит нужный в зависимости какой адрес видит клиент.

    @werter Я с этих доков и брал эти настройки. ))
    Ссылку на доки выше кинул.


  • @luha

    ** Use the hostname in the PASV response (DNS must be setup and match!)
    pasv_addr_resolve=YES

    Получается, что клиент получает ВНЕШНЕЕ имя фтп-сервера и пытается работать с ним. Поставь там NO, рестартани службу фтп и проверь. Должно сработать внутри сети.

    Или настраивай split dns для разрешения имени фтп-сервера в ЛОКАЛЬНЫЙ ip.


  • @werter Да. Всё именно так. Клиент получает внешний адрес и пытается работать с ним. Если выключить то будет работать и снаружи и изнутри. Но только для тех клиентов у кого активный режим действует. Остальные идут лесом плакать.

    Ладно. Я пойду работать. У меня проблем нету, мы с этого FTP считываем по локалке папки по SMB.


  • @luha said in Доступ к локальному ftp через WAN?:

    Да. Всё именно так. Клиент получает внешний адрес и пытается работать с ним. Если выключить то будет работать и снаружи и изнутри. Но только для тех клиентов у кого активный режим действует. Остальные идут лесом плакать.

    Что и требовалось доказать.

    Настраивай сплит днс и спи спокойно. И снаружи и ВНУТРИ все будет работать в пассивном режиме.


  • @werter У нас свой DNS, всё настроено, имена правильно разрешаются, дело совсем не в этом. Не работает по причине которую ты сам выше озвучил. Пассивный режим мешает тем что там IP внешний в настройках.


  • @luha

    Имя РАЗРЕШАЕТСЯ в IP. Если внутри имя будет разрешаться в ЛОКАЛЬНЫЙ ip для ЛОКАЛЬНЫХ клиентов и во ВНЕШНИЙ ip для ВНЕШНИХ клиентов, то все будет ок.


  • @werter Внутри имя разрешается внутренним сервером DNS во внутренний IP. Снаружи имя разрешается внешними публичными серверами DNS во внешний IP. Если бы были проблемы с разрешением имени то не нашло бы сервера, не залогинилось бы и т.д.. А он логинит и потом сливается! Короче proftpd лучше не использовать с PF - вот такой можно делать вывод. Юзайте vsftpd


  • Спасибо за проявленное внимание к проблеме.
    Именно в моём случае проблема доступа в локальной сети по локальному IP сервера в пассивном режиме кроется в нерабочей галочке "Don't use external IP for local connection".

    Почему же она "не работает"?
    Потому что на этой фирме ещё задолго до моего трудоустройства адресация локальной сети была в диапазоне, отличающимся от стандарта RFC1918 (передаю привет всем причастным к этому товарищам).
    Из-за того, что согласно международным стандартам адресации, IP, c которого пытается зайти программа-клиент в локальной сети, не является частным сервер Filezilla считает, что подключение в пассивном режиме идёт откуда-то извне и не соединяет.

    Так что осуществлю давно задуманное мной желание сделать локальную сеть в правильном диапазоне. Осталось лишь договориться с руководством когда можно сделать простой в работе фирмы, т.к. у нас круглосуточный режим работы предприятия.
    Перевод на нормальную адресацию хотел сделать уже года 2, но вроде всё это время проблем не было. Поэтому идти договариваться с руководством насчёт приостановки деятельности предприятия на несколько часов желания не было. А теперь есть повод.

    P.S. Хотя сегодня ночью мне удалось сделать так, чтобы работало напрямую по локальной сети. На основном ftp-сервере filezilla и на клиентской машине с программой задал дополнительные ip из стандартизированного диапазона частных сетей. И подключение с доп. адреса клиентской программы на доп. адрес FZ осуществляется без проблем. Но это чёртов костыль, поэтому перестройке адресации в LAN быть!


  • @igor-filth said in Доступ к локальному ftp через WAN?:

    Потому что на этой фирме ещё задолго до моего трудоустройства адресация локальной сети была в диапазоне, отличающимся от стандарта RFC1918 (передаю привет всем причастным к этому товарищам).

    Найти предыдущего. Набить морду. Отобрать трудовую, написать в ней матом отзыв.


  • @luha said in Доступ к локальному ftp через WAN?:

    Внутри имя разрешается внутренним сервером DNS во внутренний IP

    И ip этого ДНС клиент получает подключившись по ви-фи себе в кач-ве ДНС? Или он получает в кач-ве ПЕРВОГО ДНС ip ви-фи роутера? Сдается мне, что последнее.
    Я бы перепроверил )