再会,
几天前,我在 Ubuntu 12.04 上安装了新服务器,并将我的所有数据和服务从旧服务器(相当过时的 2011 年服务器)迁移到新服务器。它上安装了许多不同的服务:nginx、mysql、memcached、varnish 等。
现在我遇到了网络连接问题:有限数量的连接可以正常工作,但其他连接则无法正常工作,只是超时。此类请求在 Web 服务器的访问日志中根本看不到。此外,一些使用 cURL 的传出请求也无法正常工作,它们会在 30 秒后超时。有时我无法连接到服务器——SSH 连接有时也会超时!正在 Ping google:
--- google.com ping statistics ---
33 packets transmitted, 0 received, 100% packet loss, time 32017ms
我没有更新或安装任何额外的防火墙,也没有更改系统网络配置选项。
您可以通过访问任何页面轻松重现该问题(例如:http://en.advisor.travel/poi/Wroclaw_Palace-15356) 并多次快速刷新页面。最终您将收到“服务器不可用”浏览器错误。
看起来服务器有一些奇怪的网络连接限制或规则来阻止来自一个 IP 的快速连接连续,但我找不到任何有用的设置 :/ 在syslog
或中找不到任何有趣的东西dmseg
。
/etc/sysctl.conf
除默认行外,所有内容均被注释掉:
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
默认防火墙ufw
已停止。
非常感谢您对正在发生的事情以及该做什么的任何想法!
答案1
当我连接到服务器时,我发现一些客户端端口号可以工作,而其他端口号则无法工作。每次工作的端口号都是相同的,但由于普通客户端每次都会使用新的端口号,因此端口号看起来是随机的。
此行为可能是网络链路捆绑中断的症状。您希望流量在捆绑中的链路上实现负载平衡,但您不希望 TCP 连接中的数据包在网络上相互超越,因此每个 TCP 连接都应保持在捆绑中的同一链路上。
这就是为什么捆绑中的断开的链接会导致某些端口号正常工作而其他端口号失败的原因。
traceroute 显示 SYN 数据包从我的计算机一直可靠地发送到服务器前的最后一跳。但我无法可靠地收到 SYN-ACK。这意味着问题要么出在从最后一个路由器到服务器的最后一跳上,要么出在返回路径上的某个地方。
您可以从服务器运行traceroute -n -p 80 name-of-another-server
以查看来自服务器的 SYN 数据包可以可靠地发送多远。