这是一个奇怪的问题。我有 2 个远程网络,我通过互联网在它们之间传输文件。昨天,一个常规的备份工作失败了,所以我开始研究它。几个月来,我一直在这两个网络之间传输文件而没有问题。
经过几个小时的调试,我得到了这个图表:
基本上,我无法将任何大文件(>50MB-ish)从网络 A 传输到网络 B 上两个路由器后面的任何设备。我是从网络 A 还是从网络 B 启动传输都没有关系。它将连接并开始传输,然后在几秒钟后(似乎从 5-60 秒不等)传输失败。
我可以毫无问题地从网络 A 转移到其他网络。我什至可以毫无问题地传输到仅位于 NAT 路由器 1 后面的网络 B 上的设备。小文件工作正常(大部分时间)。较大的文件开始正常,然后失败。
错误和日志
当我从网络 B 启动 rsync 传输时(将文件从 A 发送到 B)。
...several more identical lines (depends on how soon it fails)...
debug2: channel 0: window 1966080 sent adjust 131072
debug2: channel 0: window 1966080 sent adjust 131072
debug2: channel 0: window 1966080 sent adjust 131072
ssh_dispatch_run_fatal: Connection to XXX.XXX.XXX.XXX port 22: message authentication code incorrect
Sometimes ---> debug3: mux_client_read_packet: read header failed: Broken pipe
当我从网络 A 开始传输时(仍然从 A 发送到 B)
...several more identical lines (depends on how soon it fails)...
debug2: channel 0: rcvd adjust 131072
debug2: channel 0: rcvd adjust 131072
debug3: send packet: type 1
packet_write_wait: Connection to XXX.XXX.XXX.XXX port 22: Broken pipe
rsync: writefd_unbuffered failed to write 4 bytes to socket [sender]: Broken pipe (32)
尝试通过 HTTPS 从网络 A 下载大文件到 B 时,传输也会失败。当我运行 curl 时,我得到:
curl: (56) OpenSSL SSL_read: error:1408F119:SSL routines:SSL3_GET_RECORD:decryption failed or bad record mac, errno 0
我在两个路由器后面的网络 B 上的多个文件和多台计算机上看到了相同的行为。
我试过的
- 网络 B、NAT 路由器 2 上的固件更新:无效
- 重新启动两个网络中的所有设备:无效
- 尝试在网络 B 上通过 2 个不同的 ISP 传输:无效
- 棒球棒到视线中的每一个路由器:仍在决定这个......
更新
作为一个小更新,我在交互式 SSH 会话期间注意到了同样的问题。如果我运行一个在屏幕上产生大量输出的命令,有时我的 SSH 会话会因无效 MAC 错误而断开连接。
更新 2
NAT 路由器 2 是 Cisco RV320。作为一个实验,我暂时禁用了防火墙(见下面的截图)。传输现在有效,但这也破坏了路由器的要点(它在那里创建了我网络的受保护内层)。关于如何从这里开始的任何想法?防火墙设置对我来说有点不透明(它只是一个复选框)。我不确定它实际上在做什么。
顺便说一句,我尝试单独禁用 SPI、阻止 WAN 请求和 DoS,但这些设置都没有任何效果。只有主要的防火墙设置(它会自动禁用其他设置)起到了作用。
更新 3
我与思科技术支持人员进行了交谈,他们要求我将路由器直接连接到调制解调器作为测试(绕过 NAT 路由器 1)。在那种环境下,转移是成功的。因此,导致问题的原因在于两个路由器的组合。
我为 Cisco 路由器启用了每个可用的日志选项并运行了一些失败的传输,但日志中没有显示任何内容。在这一点上,我真的不确定如何进行。我可能只是为了好玩而更新 NAT 路由器 1 上的固件。