设置
- 路由器 A 连接到 192.168.178.x 子网上的互联网。
- 路由器 B 通过 192.168.2.x 子网上的 WAN 端口连接到路由器 A。
- IIS FTP 服务器在连接到路由器 B 的 PC 上运行。Windows 防火墙中允许 FTP 服务器。
- 在路由器 B 上端口转发 TCP 端口 21 和 22 以指向具有 FTP 服务器的 PC。
- 由于距离近、无线范围限制等原因,一系列 IP 摄像机连接到路由器 A 和 B。这些 IP 摄像机可以将 mp4/jpg 文件放到 FTP 服务器。
问题
从路由器 A 子网上的摄像头通过 FTP 传输到路由器 B 上的服务器时,防火墙似乎存在问题。我测试了路由器 B 上的所有摄像头,它们工作正常;它们能够按预期传输 FTP 文件。当我将摄像头移到路由器 A 的网络并将 FTP IP 地址指向路由器 B 时,似乎只有命令端口可以工作,例如,摄像头能够在服务器上创建文件夹和更改目录,但似乎无法使用数据端口(应该是端口 22?)来实际放置内容。
测试
我已经在路由器 A 的网络上测试了一台 Windows PC - 该 PC 可以通过定位路由器 B 的 IP 地址连接到 FTP 服务器;它获取并放置内容,列出目录内容,即它似乎功能齐全。在运行 FTP 服务器本身的 PC 上,如果我使用 127.0.0.1 或路由器 B 分配的 PC 的 IP 地址,我可以获取并放置内容、列出目录等。如果我尝试使用 192.168.178.y 地址(y 是路由器 A 网络上路由器 B 的地址),当我尝试列出目录时,会话就会挂起:
ftp> dir
501 Server cannot accept argument.
150 Opening ASCII mode data connection.
注意:从路由器 B 的网络可以访问地址 192.168.178.y。我可以 ping 它。Windows 客户端会话可以连接(它会打印服务器的自定义欢迎消息)。
为了在 FTP 服务器本身上测试被动模式,我不得不在 Windows 上使用 Bash。在这种情况下,结果几乎相同。除了挂起,我只是收到一个错误:
ftp> dir
227 Entering Passive Mode (192,168,2,167,17,4).
150 Opening ASCII mode data connection.
425 Cannot open data connection.
但是,我进行的另一项测试是使用 ICS/Internet 连接共享将一台真正的 Linux PC 连接到装有 FTP 服务器的 PC。这意味着 Linux PC 位于另一个子网 (192.168.147.x)。测试结果与我上面提到的相同,只是当我切换到被动模式(并切换到二进制模式)时,一切都按预期运行,即我可以获取、放置、列出目录等!
问题是这些 IP 摄像机很可能运行某个版本的 Linux(可能是 μClinux),并且没有选项强制它们使用被动模式。因此,如果我能弄清楚我需要在防火墙中配置/更改什么,那么我认为 FTP 将开始从路由器 A 的子网工作。