与 Fritzbox NAS 的 FTPS 连接失败 - 由于 EPSV/PAS 端口更改?

与 Fritzbox NAS 的 FTPS 连接失败 - 由于 EPSV/PAS 端口更改?

我正在使用连接了 USB HDD 的 FRITZ!Box 3490 作为 NAS 服务器。我已为 FTP 通信配置了特定端口 (32753)。为了确保静态服务器名称 (u**********u.myfritz.net),我激活并配置了 myFritz。

当我通过 WinSCP 从我的(非本地连接的)笔记本电脑访问 NAS 时,可以正常访问 NAS。

但是,当我尝试通过我的网络空间的远程服务器访问 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 电视和 fritzbox 3490 上安装了 x-plore。并且我使用 fritzbox smb ftp 的 USB 上的硬盘在我的电视上观看电影。

突然不知何故,x-plore 和 ftp 连接超时。知道为什么会这样吗?我没有更改设置中的任何内容...

答案2

我有一台 FRITZ!Box 7520,并且也运行着一个 FTP 服务器。我不仅从本地 LAN 访问它,还从外部访问它。我在 Android 上使用 Total Commander + FTP 插件。我也在使用 myFritz。

FTP 有 3 种类型:

  1. 未加密的 FTP(使用多个端口)
  2. FTPS(安全 FTP,使用多个端口)
  3. SFTP(通过 SSH 的 FTP,使用单个端口)

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 之间的传出端口。这些端口被称为动态端口、私有端口或临时端口,您可以继续阅读维基百科。但我不知道只阻止这些端口而允许所有其他端口是否有意义。

下面的截图显示了 FRITZ!Box FTP 设置。似乎无法更改被动模式端口。只能更改主端口。

要解决您的问题,您可以:

  • 切换到另一个主机
  • 使用代理(curl 支持代理)
  • 使用 Raspberry Pi 运行 FTP 服务器
  • 使用主动模式

在此处输入图片描述

相关内容