香港服务器 TCP 连接被拒绝的定位与修复
一、先快速判断错误类型
- 出现 Connection refused / ERR_CONNECTION_REFUSED:通常是目标主机对该端口没有监听,或本机的防火墙/安全策略直接返回了 RST,握手未完成。
- 能 ping 通 但端口连不上:说明 ICMP 可达,但 TCP 端口未开放/被拦截,或目标服务未在该端口监听。
- 浏览器访问 HTTPS 报错 而 telnet IP 443 能连上:多为 证书/域名不匹配、链不完整 等应用层问题。
以上特征可快速缩小排查范围,优先检查端口监听与访问控制。
二、服务器端排查与修复(优先执行)
- 检查服务是否运行并监听正确端口与地址
- Linux:
- 查看监听:ss -tulpn | grep :端口 或 netstat -tulnp | grep :端口
- 查看服务状态:systemctl status nginx/sshd/your_app
- Windows:
- 查看监听:netstat -ano | findstr :端口
- 修正监听地址为 0.0.0.0(而非仅 127.0.0.1),或确认 IPv6 监听与客户端访问方式匹配。
- 核对云服务商安全组与系统防火墙
- 云安全组需放行对应 协议/端口/源网段(如 TCP 80/443/22,源 0.0.0.0/0 或你的办公网段)。
- Linux:
- firewalld:firewall-cmd --list-all;放行示例:firewall-cmd --add-port=80/tcp --permanent && firewall-cmd --reload
- 或 iptables:iptables -A INPUT -p tcp --dport 80 -j ACCEPT
- Windows:高级安全 Windows 防火墙入站规则放行对应端口。
- SELinux/AppArmor 等安全模块拦截
- 检查:getenforce(返回 Enforcing 时可能拦截)。
- 临时排查:setenforce 0;若恢复,改为设置策略(如 setsebool -P httpd_can_network_connect on)。
- 端口占用或配置错误
- 查找占用:lsof -i :端口 / netstat -ano | findstr :端口 → 结束或调整端口。
- 应用配置:确认反向代理/上游地址、端口与协议一致。
- 高并发导致的资源/队列瓶颈
- 文件描述符与队列:
- ulimit -n 查看;在 /etc/security/limits.d/ 提升 soft/hard nofile(如 200000)。
- sysctl -w net.core.somaxconn=65535、net.core.netdev_max_backlog=250000、net.ipv4.tcp_max_syn_backlog=65535 并 sysctl -p。
- 端口与回收(按需):
- sysctl -w net.ipv4.ip_local_port_range="1024 65535"
- 谨慎启用 net.ipv4.tcp_tw_reuse=1;在部分内核版本上 tcp_tw_recycle 与 NAT/负载均衡不兼容,建议保持默认或禁用。
以上步骤覆盖了“服务未监听/监听错误、访问控制、策略拦截、资源瓶颈”等高发根因。
三、网络与客户端侧排查
- 端口连通性测试
- telnet 服务器IP 端口 或 nc -vz 服务器IP 端口:
- 显示 Connected 表示 TCP 三次握手成功;
- 显示 Connection refused 多为远端未监听或被策略拒绝;
- 超时则可能是中间网络/策略丢弃。
- 路由与丢包定位
- 使用 mtr 目标IP(长时间采样)或 traceroute/tracert 定位在哪一跳开始丢包/高延迟。
- 更换网络环境验证
- 从公司宽带切换到 手机 4G/5G 或其他运营商,排除本地运营商对特定端口/协议的拦截或策略限制。
- 客户端本地限制
- 临时关闭本机防火墙/安全软件;检查是否启用 代理/VPN;必要时清理 DNS 缓存(Windows:ipconfig /flushdns;Linux:systemctl restart systemd-resolved)。
- 应用层现象区分
- 若 telnet IP 443 能连而浏览器报错,多为 HTTPS 证书问题(过期、域名不匹配、链不完整)。
以上有助于区分“远端拒绝”与“中间网络/客户端问题”。
四、常见场景与对应处理
| 场景 | 典型现象 | 快速处理 |
|—|—|—|
| 服务未启动/崩溃 | ss/ netstat 看不到监听;systemctl status 异常 | 启动服务、查看日志、修复配置后 reload/restart |
| 监听在 127.0.0.1 或错误地址 | 本机能访问,外网被拒 | 将应用/反向代理监听改为 0.0.0.0 |
| 云安全组未放行 | 服务器防火墙已放行,外网仍拒绝 | 在云控制台安全组放行对应 协议/端口/源网段 |
| firewalld/iptables 拦截 | 本机能连,外网被拒 | 按协议端口添加放行规则并持久化 |
| SELinux/AppArmor 拦截 | 服务已启动但仍被拒 | 临时 setenforce 0 验证,随后配置正确布尔值/策略 |
| 端口占用 | 服务启动失败/端口冲突 | 结束占用进程或更换端口 |
| 高并发连接被拒 | 高峰期大量 “Connection refused” | 提升 ulimit -n、调大 somaxconn/tcp_max_syn_backlog,优化端口与回收策略 |
| 运营商/跨境策略拦截 | 仅某运营商或跨境访问被拒 | 更换端口/协议、换网络测试,必要时联系运营商或云厂商 |
| 证书问题(HTTPS) | telnet 443 可连,浏览器报错 | 更新/更换证书,确保域名匹配与链完整 |
以上对照表可作为一线排障的速查清单。
五、提交工单时建议准备的关键信息
- 具体报错与端口:如 “Connection refused”,目标 IP:端口(例:203.0.113.10:443)。
- 测试命令与结果:
- ss -tulpn | grep :端口 或 netstat -ano | findstr :端口
- telnet IP 端口 / nc -vz IP 端口 的输出
- systemctl status 服务名 的关键日志
- firewall-cmd --list-all 或 iptables -L -n 的规则片段
- getenforce 返回值与(若改动过)相关 SELinux 布尔值
- ulimit -n、cat /proc/sys/net/core/somaxconn、cat /proc/sys/net/ipv4/tcp_max_syn_backlog
- 长时间 mtr 报告(客户端到服务器),以及更换网络(如 4G/5G)后的对比结果
这些信息能帮助云厂商/机房快速定位是“服务/访问控制/网络”哪一段的问题。