安装在 Google Compute Engine 上的 FileZilla Server 无法从外部访问

安装在 Google Compute Engine 上的 FileZilla Server 无法从外部访问

我在 Google Cloud Platform (GCP) 上有一个 Windows Server 2022 数据中心计算引擎(即 Windows VM)。我在其上安装了 FileZilla Server 1.2.0。当我尝试通过互联网从另一台计算机连接到 ftp 服务器时,它会导致超时错误并且无法检索目录列表。我在另一个非 Google Cloud VM 中完成了完全相同的设置,并且在那里运行良好。所以我认为我必须在当前问题中考虑 GCP。我们稍后将 GCP 称为环境“A”,将非 Google 称为“B”。

通过互联网连接到 A 后,ftp 服务器生成以下日志:

2022-07-28T06:24:41.712Z >> [FTP Session 1 ooo.ooo.ooo.ooo] USER testuser
2022-07-28T06:24:41.712Z << [FTP Session 1 ooo.ooo.ooo.ooo] 331 Please, specify the password.
2022-07-28T06:24:41.721Z >> [FTP Session 1 ooo.ooo.ooo.ooo] PASS ****
2022-07-28T06:24:41.806Z << [FTP Session 1 ooo.ooo.ooo.ooo testuser] 230 Login successful.
2022-07-28T06:24:41.816Z >> [FTP Session 1 ooo.ooo.ooo.ooo testuser] SYST
2022-07-28T06:24:41.816Z << [FTP Session 1 ooo.ooo.ooo.ooo testuser] 215 UNIX emulated by FileZilla.
2022-07-28T06:24:41.838Z >> [FTP Session 1 ooo.ooo.ooo.ooo testuser] FEAT
2022-07-28T06:24:41.838Z << [FTP Session 1 ooo.ooo.ooo.ooo testuser] 211-Features:
2022-07-28T06:24:41.838Z << [FTP Session 1 ooo.ooo.ooo.ooo testuser] 211 End
2022-07-28T06:24:41.848Z >> [FTP Session 1 ooo.ooo.ooo.ooo testuser] PWD
2022-07-28T06:24:41.848Z << [FTP Session 1 ooo.ooo.ooo.ooo testuser] 257 "/" is current directory.
2022-07-28T06:24:41.869Z >> [FTP Session 1 ooo.ooo.ooo.ooo testuser] TYPE I
2022-07-28T06:24:41.869Z << [FTP Session 1 ooo.ooo.ooo.ooo testuser] 200 Type set to I
2022-07-28T06:24:41.880Z >> [FTP Session 1 ooo.ooo.ooo.ooo testuser] PASV
2022-07-28T06:24:41.880Z << [FTP Session 1 ooo.ooo.ooo.ooo testuser] 227 Entering Passive Mode (10,140,0,4,233,55)
2022-07-28T06:24:41.900Z >> [FTP Session 1 ooo.ooo.ooo.ooo testuser] MLSD
2022-07-28T06:24:41.900Z << [FTP Session 1 ooo.ooo.ooo.ooo testuser] 150 About to start data transfer.    

其中 ooo.ooo.ooo.ooo 是客户端的公网 IP。此连接最终失败。同时客户端(使用 FileZilla Client)显示的消息为:

Status: Connecting to xxx.xxx.xxx.xxx:21...
Status: Connection established, waiting for welcome message...
Status: Plain FTP is insecure. Please switch to FTP over TLS.
Status: Logged in
Status: Retrieving directory listing...
Status: Server sent passive reply with unroutable address. Using server address instead.
Command: MLSD
Response: 150 About to start data transfer.
Error:  Connection timed out after 20 seconds of inactivity
Error:  Failed to retrieve directory listing
Status: Disconnected from server

其中 xxx.xxx.xxx.xxx 是 ftp 服务器的公网 IP。从日志中我们可以看到我已经成功登录,所以我们可以放心这不是防火墙问题。我在网上搜索了一整天,但还没有找到解决办法。我找到的最接近的方法是这个这是从这次讨论,但这两个都比较旧了,现在有些关键链接已经无法访问了。从他们那里我了解到问题可能出在服务器日志的这一行:

2022-07-28T06:24:41.880Z << [FTP Session 1 ooo.ooo.ooo.ooo testuser] 227 Entering Passive Mode (10,140,0,4,233,55)

它进入了“私有 IP”的被动模式,这就解释了为什么在客户端我们看到

Status: Server sent passive reply with unroutable address. Using server address instead.

由于客户端通过互联网连接,因此 IP 地址 10.140.0.4 无法路由。正如我上面提到的,我有一个环境 B,其中一切正常,并且我观察到服务器端日志显示它进入了被动模式 (###,###,###,###,...,...),其中 # 是服务器 B 的“公共 IP 地址”!所以问题是,我不知道在 A 中我应该做什么来解决这个问题。这是 GCP Compute Engine 还是 FileZilla Server 本身的问题?

你能帮我提供一些治疗方法吗?非常感谢!

答案1

我想自己回答我的问题。希望这对那些路过并停下来思考的人来说是一种负责任的行为,也对那些正在/将要遇到同样问题的人有所帮助。关键是,如果你在以被动模式运行 FileZilla Server 的计算机上同时拥有公共和内部 IP 地址,那么为了让客户端通过互联网访问服务,必须告诉 FileZilla Server 公共 IP 地址。我上面提到我有一个工作环境 B,结果发现它没有安装内部 IP 地址,所以没有混淆。在 B 中体验很轻松,所以我现在想到我必须在 A 中做一些额外的设置。这可以在官方文档。具体如下图所示,在输入处要填写公网地址。 在此处输入图片描述

相关内容