我正在尝试使用 netsh 命令来帮助设置 FTP“隧道”。
netsh interface portproxy add v4tov4 listenport=21 listenaddress=0.0.0.0 connectport=21 connectaddress=ftpserver
如果我在机器 A 上设置隧道,这似乎很有效。如果我转到机器 B 并通过 ftp 连接到机器 AI,则可以获得 ftpserver 的登录名。但是,当我尝试发出任何命令时,我都会收到类似以下错误
425-无法为 xxxx 建立数据连接,64009 425 连接到网络对象被拒绝
我认为问题是返回的连接卡在机器 A 上,因为它只转发端口 21 而不转发端口 64009。我已将机器 A 设置将端口 64009 转发回机器 B,这确实进一步延后但之后超时;
150 打开 HOST:[FOLDERA] 的数据连接。;* (xxxx, 64009)
我这样做是不是完全错了?或者有人可以提供建议吗?
基本上,我试图从位于不同网络上的机器 B 访问 ftp 服务器,但机器 A 在两个网络上(两个网卡)
我还尝试转发端口 20,就像转发端口 21 一样,因为我相信这是在 FTP 过程中使用的,但这没有帮助
答案1
仅转发端口 21 是不够的。即使在被动模式下,FTP 服务器也会为数据通道提供其他动态端口:
PASV
227 Entering Passive Mode (194,105,148,53,120,164)
最后两个字节(本例中为 120 和 164)代表双字节端口号的高位字节和低位字节(120 * 256 + 164 = 30 884)。这些数字取自 FTP 服务器特定的某个范围。为了让客户端连接到数据通道,您必须转发所有范围的动态 FTP 服务器端口。
不幸的是,netsh
实用程序没有语法来为端口范围添加转发规则,您只能逐个添加端口。
因此您有以下选择:
- 为 FTP 动态端口范围添加转发规则。您可以生成包含所需行数的批处理文件,以便为范围内的每个端口添加规则。
- 使用其他东西来实现此目的。几乎每个硬件路由器都具有这样的功能。
- 使用 Unix/Linux 机器作为路由器并进行设置
iptables
。