抱歉我不断询问建议。
我正在尝试使用 cmd 命令从我的 FileZilla 服务器下载文件ftp
这确实有效,当端口设置为 21 时,我可以访问服务器并下载文件。
但是当我将端口更改为 80 时,就无法再这样做了,它确实建立了连接,但除了发送命令后出现错误 425 之外什么也不做get
。
路由器和 FileZilla 中的端口 80 和 21 均已打开
没有防火墙
答案1
FTP 使用单独的“控制”和“数据”连接。端口 21 仅用于控制 - 每次数据传输(包括目录列表)都是一个新连接新的,临时端口对。这些端口必须在防火墙中打开,并且如果位于 NAT 后面,则必须进行适当的“端口转发”。
大多数家用路由器和防火墙都具有21 号港口特殊处理– 路由器监听用于打开 FTP 数据通道的控制命令(即PORT
/EPRT
和PASV
/EPSV
命令),并且自动地为其中提到的数据传输端口创建临时防火墙规则。
这对于“主动模式”(ftp.exe 的默认模式)尤其重要,因为数据连接是向后的,即从 FTP 服务器到客户端,因此客户端处于 NAT 之下必须为它们制定端口转发规则。
此外,这些命令指示要连接的(客户端或服务器的)IP 地址,因此您的路由器也可能会尝试重写正在运行的命令,以便它们引用您的外部 IP 而不是内部 IP。
然而,当通过其他端口发送相同的命令时,重写不是完成 – 防火墙保持关闭状态,并且未设置任何端口转发规则。(路由器不会仅仅因为 FTP“看起来像 FTP”而识别它;有相当多的协议看起来很像FTP。
如果您的路由器有“ALG”(“应用层网关”)部分或“L7 协议”部分,则可能可以更改哪些端口被视为“FTP 端口”。
对于被动模式,可以在服务器端静态定义端口。通常,如果您在家中设置 FTP 服务器,则应将其配置为使用特定的“被动端口”范围(例如 50000-50999),并且手动在路由器上为整个范围创建端口转发规则。只要客户端使用被动模式,这将使 FTP 服务器在任何控制端口上工作。
然而,主动模式需要在客户类似地,许多 FTP 客户端都允许您选择要用于主动模式的端口;但我不认为 ftp.exe 有这样的选项。
总之,winscp.com
如果你需要 Windows CLI,你可能应该使用不同的 FTP 客户端,例如 WinSCP(我建议使用 lftp,但它似乎缺少 Windows 版本),确保它设置为被动的模式,并配置 FTP 服务器以具有用于被动传输的静态端口范围。
(嗯,一般来说,现在你不应该设置 FTP 服务器;你应该使用 SFTP 或其他东西 - 或者至少设置一个简单的 VPN 来使用 FTP 服务器,不仅是为了安全,也是为了避免整个 PORT/PASV 问题。)
答案2
在某些路由器中,“虚拟服务器”是 转发端口。
在端口转发中,涉及两个端口:
- 您希望在路由器上向公众开放的端口
- 您希望将外部连接转发到的计算机端口,由本地网络中的 IP 指示。
在您的情况下,第一个应该是 80,但内部的应该保持 21。
这可以将其隐藏在外部世界中,但保留其功能。否则,您还需要配置 Filezilla 以使用其他端口。