背景使用云服务器搭建服务,经常遇到服务无法连接或端口不通的问题,此文主要讲解这类问题如何逐步去排查分析、
排查思路一、检查实例状态检查cvm状态,是否关机,是否已到期,是否违规被封禁,是否有绑定公网IP,是否有公网带宽;
服务器列表 https://console.cloud.tencent.com/cvm/instance/index
二、检查公网状态预付费公网带宽检查公网I是否到期
公网IP列表 https://console.cloud.tencent.com/cvm/ip?rid=25
后付费公网带宽检查账号是否欠费
账号余额 https://console.cloud.tencent.com/expense
三、检查安全组/ACL1、检查CVM绑定的安全组入站规则,是否放行了客户端IP,以及是否放行了服务端口。
安全组规则从上到下匹配,如果上面的拒绝规则拦截了,拒绝规则下面添加的放行规则是不生效的。
在cvm列表点击cvm实例ID进入详情页面
2、进入到ACL页面检查CVM所在子网绑定的ACL入站和出站规则(ACL无状态,出入都需要检查),是否放行了客户端IP,以及是否放行了服务端口。
规则从上到下匹配,如果上面的拒绝规则拦截了,拒绝规则下面添加的放行规则是不生效的。
需注意,ACL没有绑定子网的话也是不生效的。
四、检查服务器监控检查cpu、内存、带宽、磁盘io 、连接数是否达到瓶颈
五、检查服务器是否正常启动通过控制台的vnc登录,检查系统是否正常启动。
Linux正常启动是会提示登录,如下图
如果非类似页面,有报错或者无法输入卡死的情况都不正常。
六、检查网卡配置1、检查IP地址是否与控制台的IP地址一致
代码语言:shell复制[root@test ~]# ifconfig eth0
eth0: flags=4163
inet 172.21.80.10 netmask 255.255.240.0 broadcast 172.21.95.255
inet6 fe80::5054:ff:fed2:4657 prefixlen 64 scopeid 0x20
ether 52:54:00:d2:46:57 txqueuelen 1000 (Ethernet)
RX packets 708411 bytes 132642817 (126.4 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 637782 bytes 113851805 (108.5 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@test ~]#2、检查路由是否配置正确,是否有默认路由
代码语言:shell复制[root@test ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 172.21.80.1 0.0.0.0 UG 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
172.21.80.0 0.0.0.0 255.255.240.0 U 0 0 0 eth0
[root@test ~]#一般可用 ip route get {IP} 这样的命令去查看路由走向哪个网卡
代码语言:shell复制[root@test ~]# ip route get 1.1.1.1
1.1.1.1 via 172.21.80.1 dev eth0 src 172.21.80.10
cache
[root@test ~]# 七、检查服务监听是否正常用netstat命令检查端口是否有监听,如果没监听,一般是端口对应的服务没启动,需要检查服务启动状态,以及进程是否存在,服务配置文件设置的监听地址是否为0.0.0.0,端口是否配置正确。
如果监听在127.0.0.1,公网是无法访问这个端口的。
代码语言:shell复制[root@test ~]# netstat -ntpl | grep 80
tcp 0 0 172.21.80.10:80 0.0.0.0:* LISTEN 21443/nginx: master
[root@test ~]#
[root@test ~]# systemctl status nginx
● nginx.service - The nginx HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2025-10-16 13:58:22 CST; 1 day 1h ago
Main PID: 21443 (nginx)
CGroup: /system.slice/nginx.service
├─21443 nginx: master process /usr/sbin/nginx
├─21444 nginx: worker process
└─21445 nginx: worker process
Oct 16 13:58:22 test systemd[1]: Starting The nginx HTTP and reverse proxy server...
Oct 16 13:58:22 test nginx[21438]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
Oct 16 13:58:22 test nginx[21438]: nginx: configuration file /etc/nginx/nginx.conf test is successful
Oct 16 13:58:22 test systemd[1]: Started The nginx HTTP and reverse proxy server.
[root@test ~]# ps aux | grep nginx
root 21443 0.0 0.0 39312 1084 ? Ss Oct16 0:00 nginx: master process /usr/sbin/nginx
nginx 21444 0.0 0.0 41784 2416 ? S Oct16 0:00 nginx: worker process
nginx 21445 0.0 0.0 41784 2396 ? S Oct16 0:00 nginx: worker process
root 21797 0.0 0.0 112812 972 pts/1 S+ 15:17 0:00 grep --color=auto nginx
[root@test ~]# 八、检查防火墙检查防火墙规则是否拦截了对应的端口,没有放通的话需要放通一下。
1、iptables防火墙
代码语言:shell复制[root@test ~]# iptables -nL
[root@test ~]# iptables -nL -t nat
[root@test ~]# iptables -nL -t raw
[root@test ~]# iptables -nL -t mangle2、firewalld防火墙
代码语言:shell复制[root@test ~]# firewall-cmd --list-all3、nftables防火墙
代码语言:shell复制[root@test ~]# nft list ruleset 4、ufw防火墙
代码语言:shell复制[root@test ~]# ufw status九、检查TCP半连/全连队列代码语言:shell复制通过 netstat -s 命令可以查看 TCP 半连接队列、全连接队列的溢出情况
$ netstat -s | grep -i "listen"
189088 times the listen queue of a socket overflowed
30140232 SYNs to LISTEN sockets dropped
上面输出的数值是累计值,分别表示有多少 TCP socket 链接因为全连接队列、半连接队列满了而被丢弃:
• 189088 times the listen queue of a socket overflowed 代表有 189088 次全连接队列溢出
• 30140232 SYNs to LISTEN sockets dropped 代表有 30140232 次半连接队列溢出参考文档
十、检查是否有tc(Traffic Control)规则检查是否有设置tc规则导致丢包
代码语言:shell复制[root@test ~]# tc qdisc ls参考文档
十一、检查内核参数1、开启 net.ipv4.tcp_tw_recycle 导致的PAWS 丢包
参考文档
2、设置 net.ipv4.conf.default.rp_filter 为1 开启严格路径校验导致丢包
参考文档
可以开启 net.ipv4.conf.*.log_martians ,在系统日志或者dmesg日志中查看丢包