Не удается подключиться по FTPS к Fritzbox NAS из-за смены порта EPSV / PAS?

Не удается подключиться по FTPS к Fritzbox NAS из-за смены порта EPSV / PAS?

Я использую свой FRITZ!Box 3490 с подключенным USB HDD в качестве сервера NAS. Я настроил определенный порт (32753) для FTP-связи. Чтобы обеспечить статическое имя сервера (u**********u.myfritz.net), я активировал и настроил myFritz.

Доступ к NAS работает нормально, когда я подключаюсь к нему с моего (не локально подключенного) ноутбука через WinSCP.

Но когда я пытаюсь получить доступ к NAS через удаленный сервер моего веб-пространства, соединение обрывается после команды EPSV или PAS.

Вот терминал:

$ curl -v --ftp-pasv --ssl -k -u speedITBackup 'ftp://u**********u.myfritz.net:32753/Backup/Superfein/'
Enter host password for user 'speedITBackup':
*   Trying 92.218.125.113...
* TCP_NODELAY set
* Connected to u**********u.myfritz.net (92.218.125.113) port 32753 (#0)
< 220 FRITZ!Box3490 FTP server ready.
> AUTH SSL
< 501 Use AUTH TLS for secure control connection.
> AUTH TLS
< 234 Authentication method accepted
* successfully set certificate verify locations:
*   CAfile: /etc/pki/tls/certs/ca-bundle.crt
  CApath: none
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, [no content] (0):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, [no content] (0):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, [no content] (0):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, [no content] (0):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, [no content] (0):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* Server certificate:
*  subject: CN=u************u.myfritz.net
*  start date: Dec  9 12:27:41 2022 GMT
*  expire date: Jan 15 12:27:41 2038 GMT
*  issuer: CN=u**********u.myfritz.net
*  SSL certificate verify result: self signed certificate (18), continuing anyway.
* TLSv1.3 (OUT), TLS app data, [no content] (0):
> USER speedITBackup
* TLSv1.3 (IN), TLS handshake, [no content] (0):
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* TLSv1.3 (IN), TLS handshake, [no content] (0):
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* TLSv1.3 (IN), TLS app data, [no content] (0):
< 331 Password required for speedITBackup.
* TLSv1.3 (OUT), TLS app data, [no content] (0):
> PASS **************
* TLSv1.3 (IN), TLS app data, [no content] (0):
< 230 User speedITBackup logged in.
* TLSv1.3 (OUT), TLS app data, [no content] (0):
> PBSZ 0
* TLSv1.3 (IN), TLS app data, [no content] (0):
< 200 ok
* TLSv1.3 (OUT), TLS app data, [no content] (0):
> PROT P
* TLSv1.3 (IN), TLS app data, [no content] (0):
< 200 Data channel will be secured
* TLSv1.3 (OUT), TLS app data, [no content] (0):
> PWD
* TLSv1.3 (IN), TLS app data, [no content] (0):
< 257 "/" is current directory.
* Entry path is '/'
* TLSv1.3 (OUT), TLS app data, [no content] (0):
> CWD Backup
* ftp_perform ends with SECONDARY: 0
* TLSv1.3 (IN), TLS app data, [no content] (0):
< 250 CWD command successful.
* TLSv1.3 (OUT), TLS app data, [no content] (0):
> CWD Superfein
* TLSv1.3 (IN), TLS app data, [no content] (0):
< 250 CWD command successful.
* TLSv1.3 (OUT), TLS app data, [no content] (0):
> EPSV
* Connect data stream passively
* TLSv1.3 (IN), TLS app data, [no content] (0):
< 229 Entering Extended Passive Mode (|||60770|)
*   Trying 92.218.125.113...
* TCP_NODELAY set
* Connecting to 92.218.125.113 (92.218.125.113) port 60770
* connect to 92.218.125.113 port 32753 failed: Connection refused
* Failed to connect to u***********u.myfritz.net port 32753: Connection refused
* Failed EPSV attempt. Disabling EPSV
* TLSv1.3 (OUT), TLS app data, [no content] (0):
> PASV
* TLSv1.3 (IN), TLS app data, [no content] (0):
< 227 Entering Passive Mode (92,218,125,113,230,160)
* Skip 92.218.125.113 for data connection, re-use u************u.myfritz.net instead
*   Trying 92.218.125.113...
* TCP_NODELAY set
*** Connecting to 92.218.125.113 (92.218.125.113) port 59040**
* connect to 92.218.125.113 port 32753 failed: Connection refused
* Failed to connect to u**************u.myfritz.net port 32753: Connection refused
* Closing connection 0
* TLSv1.3 (OUT), TLS alert, [no content] (0):
* TLSv1.3 (OUT), TLS alert, close notify (256):
curl: (7) Failed to connect to upfamnsqwzodew4u.myfritz.net Port 32753: Connection refused

Я не совсем понимаю, что здесь происходит: при использовании команд EPSV и PAS FRITZ!Box, похоже, отправляет новый порт (60770 / 59040), но затем подключается к старому?

Проблема на стороне сервера или клиента?

Есть ли способ заставить это общение работать? Может быть, через настройки моего FRITZ!Box?

С помощью cygwin я попытался добраться до своего fritzbox и вот результат:

$ curl -vvv --ftp-pasv --ssl -k -u speedITBackup 'ftp://u********u.myfritz.net:32753/Backup/Superfein/'
Enter host password for user 'speedITBackup':
*   Trying 92.218.125.113:32753...
* connect to 92.218.125.113 port 32753 failed: Timed out
* Failed to connect to u*************u.myfritz.net port 32753 after 21110 ms: Timed out
* Closing connection 0
curl: (28) Failed to connect to u************u.myfritz.net port 32753 after 21110 ms: Timed out

решение1

У меня на моем Android TV и fritzbox 3490 установлен X-Plore. И я использовал жесткий диск на USB-накопителе fritzbox smb ftp, чтобы смотреть фильмы на моем телевизоре.

Вдруг из ниоткуда у меня таймаут от x-plore до ftp-соединения. Есть идеи, почему это происходит? Я ничего не менял в настройках...

решение2

У меня есть FRITZ!Box 7520 и запущенный FTP-сервер. Я подключаюсь к нему из локальной сети, но также и извне. Я использую Total Commander + FTP-плагин на Android. Я также использую myFritz.

Существует 3 типа FTP:

  1. незашифрованный FTP (использует несколько портов)
  2. FTPS (защищенный FTP, использует несколько портов)
  3. SFTP (FTP через SSH, использует один порт)

FRITZ!Box поддерживает только 1 и 2. Это печально, поскольку SFTP требует только один порт, поэтому это самый простой вариант, когда дело касается брандмауэров.

Ваша команда curl использует FTPS. Она может подключиться, но когда она пытается вывести список файлов, она терпит неудачу, потому что не может войти в пассивный режим.

Эта строка журнала вызывает подозрения:

*** Connecting to 92.218.125.113 (92.218.125.113) port 59040**
* connect to 92.218.125.113 port 32753 failed: Connection refused

Он пытается подключиться к порту 59040, а затем сообщает, что не удалось подключиться к порту 32753. Мне кажется, что это ошибка в curl.

Пожалуйста, запустите:

curl --version

У меня 7.74.0. Все, что близко к этой версии, приемлемо. Если повезет, то нужно будет только обновить curl.

Вы также можете попробовать следующее:

  • Используйте ту же команду curl в вашей локальной сети и посмотрите, сработает ли она. Вы можете использовать cygwin, например, чтобы запустить ее на Windows.
  • Если получится, попробуйте снаружи.
  • Используйте wget вместо curl

Редактировать: Вы сказали в комментариях, что ваш хостер блокирует исходящие порты между 49152 и 65534. Эти порты называются динамическими, частными или эфемерными, как вы можете прочитать далее.Википедия. Но я не знаю, имеет ли смысл блокировать только эти порты, разрешив все остальные.

На снимке экрана ниже показаны настройки FTP FRITZ!Box. Похоже, что изменить порты пассивного режима невозможно. Можно изменить только основной порт.

Чтобы решить вашу проблему, вы можете:

  • перейти на другого хостера
  • использовать прокси (curl поддерживает прокси)
  • использовать Raspberry Pi с запущенным FTP-сервером
  • использовать активный режим

введите описание изображения здесь

Связанный контент