Я пытаюсь настроить мой FTP, работающий на моей локальной машине, которая подключается к моей панели управления (162.0.0.1) со встроенным FTP-клиентом. Мой локальный сервер (192.168.1.30) подключен к панели управления в качестве игрового сервера с публичным IP-адресом (152.5.5.5). Порт 20/21 пересылается на моем маршрутизаторе, но по какой-то причине я не могу заставить этот FTP-сервер работать на моей локальной машине с доступом извне моей локальной сети. Возможно, я неправильно настраиваю конфигурацию FTP, но при работе FTP-сервер может получить доступ локально, но не внешне.

  • 192.168.1.30 - Локальный FTP-сервер с запущенным на нем демоном и игровой сервер за маршрутизатором.
  • 152.5.5.5 - Мой внешний IP
  • 162.0.0.1 - Веб-сервер панели управления с веб-клиентом FTP. Это VPS в Лалаланде.

Конфиг 162.0.0.1 -> 152.5.5.5 -> 192.168.1.30

Панель управления Multicraft предназначена для управления игровыми серверами. У них есть встроенный FTP-клиент, который использует net2ftp в браузере, который в этом случае подключается к FTP-серверу 152.5.5.5/192.168.1.30.

Это все машины linux, а роутер - это ASUS с прошивкой merlin. Порты 21, 20, 5000-6000 перенаправляются на маршрутизатор для FTP.

Вот файл конфигурации, с которым я работаю, находится на компьютере 152.5.5.5/192.168.1.30.

[ftp]
## Wheter or not to enable the integrated FTP server, true/false
## default: true
enabled = true
## IP to listen on for FTP connections, uncomment to use the same as
## for the daemon.
## 0.0.0.0 means listening on all available interfaces (all IPs)
## default: same as the "ip" setting for the daemon, see above
ftpIp = 192.168.1.30
## See the descriptions of "externalIp" and "ip" for the daemon above
## default: same as "externalIp" if "ftpIp" is "0.0.0.0" otherwise "ftpIp"
#ftpExternalIp = 152.5.5.5
## Masquerade IP address to use for passive FTP connections when
## Multicraft is running behind a router.
## default: empty
ftpNatIp = 152.5.5.5
## A port range to use for passive data transfers. If this is not
## specified the FTP server will use random ports.
## Format: 4000-8000
## default: empty
ftpPasvPorts = 5000-6000
## Port to listen on for incoming FTP connections. Change this to
## something else if you are already running an FTP server on this
## system.
## default: 21
ftpPort = 21
## Regular expression matching files that can't be manipulated by
## users in any way. If you want users to be able to upload their own
## plugins instead of using the ones you provide for them you can
## just comment this option out.
## default: empty
forbiddenFiles = 
## Set the level of detail for FTP server log messages in the multicraft.log.
## Errors will always be logged regardless of this setting.
## Available levels:
## full  - Log all messages
## basic - Don't log client/server communication
## none  - No FTP logging
## default: full
ftpLogLevel = full
## If this setting is enabled the FTP server will not be started when the main
## daemon process is started. You can start the FTP server separately by using
## "start_ftp" instead of "start" as the parameter to the daemon command.
## default: false
ftpSeparate = false
## The PID file for the FTP only process. The path is relative to "baseDir"
## default: multicraft_ftp.pid
ftpPidFile = multicraft_ftp.pid
## The log file to use for the FTP only process. This setting has no effect if
## the FTP server is started as part of the main daemon process (i.e. if
## "ftpSeparate" is false.
## default: multicraft.log (same as the daemon)
ftpLogFile = multicraftftp.log
## Throttle the FTP bandwidth (experimental)
## Incoming data throttle (Kb/s)
## default: 0 (unlimited) 
#ftpThrottleIn = 0
## Outgoing data throttle (Kb/s)
## default: 0 (unlimited) 
#ftpThrottleOut = 0

Я попытался установить ftpPasvPorts = 5000-6000, но безуспешно. Также переключение между настройками IP/ExternalIp не дает никаких результатов. В настоящее время я понятия не имею, что я делаю с недостатком идей.

Чтобы добавить к этому, на локальном сервере 152.5.5.5/192.168.1.30 работает демон, который использует FTP-сервер. Конфигурация демона выглядит следующим образом.

## The daemon will listen on the following IP/port.
## 0.0.0.0 to listen on all available interfaces (all IPs). Note that
## you will have to use the "externalIp" setting below if you set this
## to 0.0.0.0 as the control panel needs to know where to connect.
ip = 192.168.1.30 
port = 25465

## If the external address is different from the listen address
## you can set the external address here. This setting will be saved
## to the DB and used by the control panel to connect to the daemon.
## default: same as "ip"
externalIp = 152.5.5.5

Они все в одном конфигурационном файле.

Демон подключается к панели управления на 162.0.0.1, которая затем позволяет управлять игровым сервером вместе с FTP-сервером. Я включил пассивный FTP в панели управления.

Примечание * FTP работает локально. Я могу получить доступ к FTP-серверу 152.5.5.5/192.168.1.30 локально с помощью filezilla, но не извне.

РЕДАКТИРОВАТЬ: Ниже приведен журнал ошибок от ftptest.net

Warning: Plaintext FTP is insecure. You should use explicit FTP over TLS.

Status: Resolving address of 152.5.5.5
Status: Connecting to 152.5.5.5
Warning: The entered address does not resolve to an IPv6 address.
Status: Connected, waiting for welcome message...
Reply: 220 Multicraft 2.1.1 FTP server
Command: CLNT https://ftptest.net on behalf of 152.5.5.5
Reply: 500 Command "CLNT" not understood.
Command: USER cisnet.3
Reply: 331 Username ok, send password.
Command: PASS **********
Reply: 230 Login successful
Command: SYST
Reply: 215 UNIX Type: L8
Command: FEAT
Reply: 211-Features supported:
Reply: EPRT
Reply: EPSV
Reply: MDTM
Reply: MLST type*;perm*;size*;modify*;unique*;unix.mode;unix.uid;unix.gid;
Reply: REST STREAM
Reply: SIZE
Reply: TVFS
Reply: UTF8
Reply: 211 End FEAT.
Command: PWD
Reply: 257 "/" is the current directory.
Status: Current path is /
Command: TYPE I
Reply: 200 Type set to: Binary.
Command: PASV
Reply: 227 Entering passive mode (192,168,1,30,186,215).
Error: Server returned unroutable private IP address in PASV reply

РЕДАКТИРОВАТЬ # 2 Я, наконец, выяснил основную проблему FTP. FTP теперь работает с внешнего адреса 152.5.5.5, который подключается к моей локальной машине 192.168.1.30 путем изменения ftppasv = 152.5.5.5. Однако контрольная панель не хочет подключаться к FTP даже в пассивном режиме ... пытается найти логи контрольной панели, чтобы раскрыть скрытый секрет .... Также был изменен порт FTP с 21 на 513.

1 ответ1

0

Вопрос в настоящее время помечен как sftp, но вообще не упоминает SFTP.

Большинство современных протоколов будут опираться на информацию в заголовке IP. Маршрутизаторы, которые поддерживают такие функции, как "переадресация портов" (для входящего трафика) и "трансляция сетевых адресов" (NAT) (для исходящего трафика), имеют тенденцию просматривать заголовки в IP-пакетах и вносить соответствующие изменения.

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

Маршрутизаторы посередине могут изменять заголовки IP, переводя адреса между общедоступными IP-адресами и частными IP-адресами, и номера портов TCP могут изменяться в процессе. Обычно это нормально, если маршрутизаторы могут отслеживать отдельные разговоры и постоянно изменять IP-адреса (и, возможно, номера портов TCP). Однако FTP ожидает, что полезная нагрузка данных также будет соответствовать используемому IP-адресу (-ам) и номерам портов TCP. Маршрутизаторы, как правило, не корректируют раздел полезных данных IP-адреса, и поэтому он ломается.

Правильным решением этой ситуации является отказ от использования FTP, который обычно требует аутентификации и передает детали аутентификации без шифрования, а также передает файлы без шифрования и имеет проблемы с брандмауэрами (что произошло потому, что FTP был разработан в эпоху до появления брандмауэров). были обычными). Вместо этого используйте SFTP, или SCP, или HTTPS, или, может быть, FTPS.

Существует еще один подход, который может решить эту проблему. В отличие от ICQ, у которой была такая же проблема, FTP - старый протокол, который исторически был довольно популярен. Многие маршрутизаторы поддерживают функцию под названием «FTP-прокси». По сути, это приводит к тому, что брандмауэр больше мешает обмену данными по FTP и изменяет полезную нагрузку данных таким образом, чтобы заставить работать соединения FTP.

Итак, это ваши варианты.

Позвольте мне перейти в пассивный режим, так как он был поднят. В некоторых случаях использование пассивного режима может решить некоторые проблемы или недостаточно частично решить проблемы. В других случаях это может не иметь никакого эффекта.

Таким образом, FTP работает (используя "активный режим" FTP), так как FTP-клиент создает TCP-соединение с FTP-сервером (который обычно прослушивает TCP-порт 21). Вы можете войти в систему и просмотреть списки файлов. Затем, когда пользователь запрашивает, чтобы программа передала файл, FTP-сервер сообщит FTP-клиенту, какой TCP-порт должен прослушивать FTP-клиент , и FTP-сервер создаст второе TCP-соединение, которое обычно включает TCP-порт 20.

При использовании "пассивного режима" FTP-клиент создает TCP-соединение с FTP-сервером (который обычно прослушивает TCP-порт 21). Вы можете войти в систему и просмотреть списки файлов. Затем, когда пользователь запрашивает, чтобы программа передала файл, FTP-сервер сообщит FTP-клиенту, какой TCP-порт FTP-сервер будет прослушивать для второго TCP-подключения, а затем FTP-клиент создаст второе TCP-подключение, которое обычно включает TCP-порт 20.

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

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

Таким образом, вы можете попробовать обходной путь использования пассивного режима, но поймите, что такой обходной путь просто не разрешает все сценарии.

Некоторые доступные документы, обсуждающие это: OpenBSD pf: FTP.

Итак, еще раз, чтобы повторить варианты:

  • Можно попробовать пассивный режим. Не исправит все сценарии.
  • Можно включить FTP-прокси. Позволит FTP работать, но не исправит критические недостатки конфиденциальности (отслеживание паролей, отслеживание содержимого данных файлов)
  • Используйте другие протоколы:
    • SFTP (отличный выбор, без недостатков, кроме того, поддерживает ли программное обеспечение этот отличный выбор)
    • HTTPS (часто используется для ручной загрузки файлов из-за широко распространенных в комплекте клиентов, которые его поддерживают)
    • SCP (решает проблемы, но вряд ли получит будущие обновления)
      • Комментарий о будущих обновлениях основан на некоторой документации, которая исторически была доступна по адресу https://www.openssh.com/faq.html#2.10, но, в данный момент я публикую этот ответ, кажется, что URL возвращает 404 и Archive.org имеет технические проблемы. Может быть, вам повезет, если вы посмотрите в другое время
    • или, может быть, FTPS (по существу FTP с некоторой поддержкой, чтобы добавить некоторую безопасность).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .