比起超时,拒绝连接其实是个好消息。

它立刻给你答案:对方的机器活着,网络也通,就是那个端口不让进。超时要等几十秒,还什么都说明不了。

RST 代表什么

客户端发 SYN,对方回了一个 RST。意思是「这个端口上没有人在等」。

注意前提:能回 RST,说明包到达了对面的主机。所以这不是网络不通,是服务或者策略的问题。

四种原因,按概率排

服务没启动。 最常见。重启服务器之后忘了设开机自启,或者进程崩了没拉起来。

只监听了 127.0.0.1。 配置里写 listen 127.0.0.1:8080,本机访问正常,外面一律拒绝。这个坑新手踩得最多,因为本地测什么都是好的。

防火墙 REJECT。 iptables 或 firewalld 用了 REJECT 而不是 DROP,表现就是秒拒绝。

IP 被拉黑。 fail2ban、云 WAF、面板的防爆破,把你当前 IP 封了。换个网络环境立刻能开,就是这种情况。

三条命令

ss -lntp 看端口和监听地址,重点看是 0.0.0.0 还是 127.0.0.1。

curl -v http://127.0.0.1:端口 看本机通不通。本机能通、外面不通,基本就是监听地址和防火墙的问题。

iptables -L -n 或者 firewall-cmd --list-all 看规则。

一个越来越常见的坑:IPv6

服务只监听了 IPv6 的 ::,IPv4 请求过来就被拒。或者反过来,只监听 IPv4,用户走 IPv6 就拒绝。

排查的时候 IPv4 和 IPv6 各测一次,三十秒的事。

顺序

先看服务,再看监听地址,再看防火墙,最后看 IP 黑名单。这个顺序从内到外,每一步都能排除一大片。

如果只有部分地区的用户反馈拒绝连接,用 网站测速 分节点测一下,能确认是全局还是某个节点回源断了。