我有一台 ZTE mf283+ 路由器和另一台 tp-link archer c7 路由器,我将其用作接入点。Tp-link 的 IP 地址是 192.168.0.23,我已在其上设置了 ftp 服务器。我尝试了端口转发,以便可以从外部访问 ftp 服务器:
但是当我尝试从外部访问它时,如下所示:ftp://37.xxx.xxx.xxx:21它说“无法访问此站点 37.xxx.xxx.xxx 拒绝连接。是我操作错误还是我的 ISP 出了问题?
答案1
感谢您阅读 Attie 指出的文章。听起来你可能只需要多一点解释。我发现OpenBSD 的防火墙指南,关于“FTP 问题”的部分无法提供足够的信息。不过,我将尝试在此总结一下这个问题。
当软件使用 Internet 协议(IPv4 或 IPv6)进行通信时,“IP 协议”(我将其用作通用术语,同样适用于 IPv6 和 IPv4)包含目标 IP 地址。当您使用某些协议(如 TCP(FTP 所用)、UDP(DNS 所用)、SCTP 时,您还会有一个“端口号”,这也是我们使用术语“端口转发”的部分原因。(某些协议不使用“端口号”。例如,ICMP 使用 IP,并且具有“消息类型”,但没有“端口号”。)
大多数软件会向本地计算机的 TCP/IP 网络组件提供 IP 地址信息,而只向远程计算机提供“有效负载”(即远程计算机需要接收的任何其他信息)。例如,使用 HTTP,您的 Web 浏览器会告诉您的本地 TCP/IP 网络堆栈打开与 IP 地址的连接,然后您的 Web 浏览器会告诉远程系统它想要接收什么文件。您的 Web 浏览器不会公布您的 IP 地址。该细节由 TCP/IP 网络组件处理。
FTP 与大多数软件不同。
FTP 实际上在其有效负载中包含了 IP 地址。因此,除了将 IP 地址作为标准 IP 数据包的一部分提供之外,FTP 对话的一部分还提到了要使用哪个 IP 地址。标准“端口转发”只是修改了 IP 地址的标准位置,并没有修改 FTP 对话。
FTP 是一种非常古老的协议,是在大学和大公司将网络作为研究项目时编写的。当时,防火墙之类的互联网防御措施还不存在,也不需要。因此,FTP 带来的问题不是作者水平低下的问题。问题只是 FTP 是为不同类型的网络设计的。
这个问题可以用三种不同的方法来解决:
- 您可以尝试使用“被动”FTP。这可以与防火墙后面的 FTP 服务器配合使用(但负担转移了:FTP 客户端不需要位于防火墙后面……因此这种情况通常也不太适用)。如果可以修复此问题(这需要 FTP 客户端软件支持此功能),这可能是最快的修复方法(更改 FTP 客户端软件中的设置),但根据所使用的 FTP 客户端软件,修复过程可能简单也可能困难。
- 许多路由器都支持名为“ftp 代理”的选项,该选项将修改 FTP 对话,从而有效地为您解决此问题。查找并启用此类选项(如果存在)
- 使用不存在相同问题的其他协议
FTP 有点独特。当今大多数流行的协议都没有同样的问题,也不会有,因为防火墙现在确实存在,所以人们意识到了这个问题。(如果有人编写了一种新协议,而该人不知道这个问题,那么他们可能会在该协议变得非常流行之前就意识到这个问题。)然而,FTP 曾经是最好的解决方案,人们不愿意使用其他解决方案。其中一个关键原因可能是很多人都有 FTP 软件,包括支持 FTP 的流行网络浏览器。
如今,有比 FTP 更好的解决方案。使用“SSH 文件传输协议”(称为“SFTP”的协议之一)或 SCP 或 HTTPS。这些协议都不需要特殊代理在防火墙上运行。对于需要轻松供多个客户使用的解决方案,HTTPS 可以解决问题。(甚至可能还有其他选择,例如 FTPS,但我建议使用我刚才提到的先前协议。)
因此,建议使用最后一个要点,但如果您觉得由于某种原因无法做到这一点,您可以尝试第一个或第二个要点(每个要点都可能是更快但较差的解决方案,可以解决您正在处理的问题)。