首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >运维必看:一文搞懂服务器端口不通排查思路

运维必看:一文搞懂服务器端口不通排查思路

原创
作者头像
隔壁没老王
发布2025-10-17 22:49:14
发布2025-10-17 22:49:14
7490
举报

背景

使用云服务器搭建服务,经常遇到服务无法连接或端口不通的问题,此文主要讲解这类问题如何逐步去排查分析、

排查思路

一、检查实例状态

检查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

三、检查安全组/ACL

1、检查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<UP,BROADCAST,RUNNING,MULTICAST>  mtu 8500
        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<link>
        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 mangle

2、firewalld防火墙

代码语言:shell
复制
[root@test ~]# firewall-cmd --list-all

3、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日志中查看丢包

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 排查思路
    • 一、检查实例状态
    • 二、检查公网状态
    • 三、检查安全组/ACL
    • 四、检查服务器监控
    • 五、检查服务器是否正常启动
    • 六、检查网卡配置
    • 七、检查服务监听是否正常
    • 八、检查防火墙
    • 九、检查TCP半连/全连队列
    • 十、检查是否有tc(Traffic Control)规则
    • 十一、检查内核参数
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档