我知道已经有很多类似的问题,但我已经阅读了几乎所有我能找到的内容,但仍然无法解决我的具体问题。
问题:我无法将数据传输到外部 FTP 服务器,只能从位于我的 DMZ 内的服务器上运行的 FTP 客户端传输数据。从我的 LAN 内的任何机器都可以从 FTP 客户端传输数据。
我的环境的简要概述:
我有一台 Sonicwall SOHO 路由器/防火墙,配置/连接了以下接口:
- X0:局域网
- X1:WAN(来自 ISP 的单一、静态 IP)
- X2:DMZ(用作 Web 服务器和 FTP 服务器的单个服务器连接到此接口)
我对我的 NAT 策略很有信心 - 人们可以顺利连接到我的 FTP 服务器,我可以从我的 DMZ 内部连接到其他 FTP 服务器 - 只有一台特定服务器存在此问题。在我将防火墙从 Cisco SA520 升级到 Dell Sonicwall SOHO 之前,连接工作正常。我还要注意,虽然我可以连接到其他 FTP 服务器,但这些服务器以被动模式连接,因此这可能是主动模式连接的问题。目前,问题服务器仅接受来自我的 IP 的主动模式。
我目前的想法是,这是我这边的防火墙问题,但我不明白为什么。我的防火墙规则非常简单:
LAN > WAN Allow all
DMZ > WAN Allow all
WAN > LAN Deny all
WAN > DMZ Allow Server Services (HTTP, HTTPS, FTP (All) (TCP 20, 21, 49152 - 65535))
WAN > DMZ Deny all
我还在高级防火墙设置中设置了以下规则:
Enable FTP Transformations for TCP port(s) in Service Object: FTP (All)
(“FTP(全部)”服务对象使用上面列出的相同端口 - TCP 20、21、49152 - 65535)。
我不太确定这条规则的作用,但我认为这就是允许外部源被动连接到我的服务器的原因。但是,我不知道当我尝试连接到外部源时这是否会导致问题。
--
使用 Sonicwall 的数据包监视器,我可以登录到服务器并发出 PORT 命令,该命令返回 200 PORT 成功响应。但是,在发出 LIST 命令后,我的服务器永远不会确认 FTP 服务器发送的 SYN 消息(帧 #57/58)。然后,FTP 服务器重新传输 SYN(帧 64/65 和 72/73)。当它在超时窗口中没有收到 ACK 时,它会超时。以下是尝试连接期间 Sonicwall 数据包监视器的一些输出:
No. Time Source Destination Protocol Length Info
53 3.750000 My DMZ IP FTP Server FTP 60 Request: LIST
54 3.750000 My WAN IP FTP Server FTP 60 Request: LIST
55 3.783334 FTP Server My WAN IP FTP 108 Response: 150 Opening BINARY mode data connection for /bin/ls.
56 3.783334 FTP Server My DMZ IP FTP 108 Response: 150 Opening BINARY mode data connection for /bin/ls.
57 3.783334 FTP Server My WAN IP TCP 62 20 → 61011 [SYN] Seq=0 Win=65535 Len=0 MSS=1460 SACK_PERM=1
58 3.783334 FTP Server My DMZ IP TCP 62 20 → 61011 [SYN] Seq=0 Win=65535 Len=0 MSS=1460 SACK_PERM=1
59 4.000000 My DMZ IP FTP Server TCP 60 61010 → 21 [ACK] Seq=88 Ack=289 Win=65280 Len=0
60 4.000000 My WAN IP FTP Server TCP 54 26752 → 21 [ACK] Seq=91 Ack=289 Win=65280 Len=0
64 6.683334 FTP Server My WAN IP TCP 62 [TCP Retransmission] 20 → 61011 [SYN] Seq=0 Win=65535 Len=0 MSS=1460 SACK_PERM=1
65 6.683334 FTP Server My DMZ IP TCP 62 [TCP Retransmission] 20 → 61011 [SYN] Seq=0 Win=65535 Len=0 MSS=1460 SACK_PERM=1
72 12.633334 FTP Server My WAN IP TCP 62 [TCP Retransmission] 20 → 61011 [SYN] Seq=0 Win=65535 Len=0 MSS=1460 SACK_PERM=1
73 12.633334 FTP Server My DMZ IP TCP 62 [TCP Retransmission] 20 → 61011 [SYN] Seq=0 Win=65535 Len=0 MSS=1460 SACK_PERM=1
(请注意,上面序列中任何丢失的帧都是由于我从该视图中过滤掉的其他流量造成的)。
从我的 LAN 机器上,在 LIST 命令之后发回 ACK,并且数据传输工作正常。
--
因此,尽管我已经诊断出了这个问题,但我不知道下一步该怎么做。路由器没有说它因为防火墙规则而丢弃了任何数据包或阻止了任何东西。有人知道为什么我的 LAN 机器发送了 ACK,而 DMZ 机器却没有发送吗?
答案1
我在 LAN 区域中使用 Pitney Bowes 的设备时也遇到了类似的问题。我通过将 Sonicwall 更新到固件 6.2.7.1-23n 解决了该问题。