了解并使用我的配置来配置路由器后面的 FTP

了解并使用我的配置来配置路由器后面的 FTP

我正在尝试配置在本地计算机上运行的 FTP,该计算机连接到具有内置 FTP 客户端的控制面板 (162.0.0.1)。我的本地服务器 (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 - 带有基于 Web 的 FTP 客户端的控制面板 Web 服务器。这是 lalaland 中的 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机器,路由器是华硕配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 在本地工作。我可以使用 filezilla 在本地访问 FTP 服务器 152.5.5.5/192.168.1.30,但不能在外部访问。

编辑:以下是来自 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 现在可以通过更改 ftppasv= 152.5.5.5 来从外部 152.5.5.5 地址连接到我的本地 192.168.1.30 机器。但是,控制面板即使在被动模式下也不想连接到 FTP... 尝试找到控制面板日志以揭开隐藏的秘密....FTP 端口也从 21 更改为 513。

答案1

该问题目前标记为 sftp,但根本没有提及 SFTP。

大多数现代协议都依赖于 IP 报头中的信息。支持“端口转发”(用于传入流量)和“网络地址转换”(NAT)(用于传出流量)等功能的路由器往往会查看 IP 数据包中的报头并进行适当的更改。

FTP 是一种相当独特的协议。与 ICQ 聊天一样,它是一种非常古老的协议,在 IP 数据包的数据负载中包含 IP 地址。当防火墙阻止除已知端口以外的传入流量时,这会严重破坏一切。

中间的路由器可以通过在公有 IP 地址和私有 IP 地址之间转换地址来修改 IP 标头,并且 TCP 端口号可能会在此过程中发生变化。只要路由器可以跟踪单个对话并以一致的方式不断更改 IP 地址(以及可能的 TCP 端口号),这通常就没问题。但是,FTP 期望数据有效负载也与使用的 IP 地址和 TCP 端口号相匹配。路由器通常不会调整 IP 地址的数据有效负载部分,因此它会中断。

解决这种情况的正确方法是放弃使用 FTP,因为 FTP 通常需要身份验证,并且在不加密的情况下传输身份验证详细信息,并且在不加密的情况下传输文件,并且存在防火墙问题(这是因为 FTP 是在防火墙普及之前的时代设计的)。相反,使用 SFTP、SCP、HTTPS 或 FTPS。

还有一种方法可以解决这个问题。与有同样问题的 ICQ 不同,FTP 是一种较旧的协议,但历史上非常流行。许多路由器都支持一种称为“FTP 代理”的功能。基本上,这会导致防火墙更多地干扰 FTP 通信,并以一种会导致 FTP 连接正常工作的方式更改数据负载。

所以,这些是你的选择。

既然已经提到了这一点,那么让我进入被动模式。在某些情况下,使用被动模式可能会修复部分问题,或者不足以修复部分问题。在其他情况下,它可能没有效果。

因此,FTP 的工作方式(使用“主动模式”FTP)是 FTP 客户端创建与 FTP 服务器(通常在 TCP 端口 21 上监听)的 TCP 连接。您可能能够登录并查看文件列表。然后,当用户请求软件传输文件时,FTP 服务器将告诉 FTP 客户端哪个 TCP 端口FTP 客户端应该听取,FTP 服务器将创建第二个 TCP 连接,该连接通常涉及 TCP 端口 20。

使用“被动模式”FTP,FTP 客户端会创建与 FTP 服务器(通常在 TCP 端口 21 上监听)的 TCP 连接。您可以登录并查看文件列表。然后,当用户请求软件传输文件时,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,并增加了一些安全性)。

相关内容