Linux 服务器网络不通排查 SOP(标准操作流程)

🔍 Linux 服务器 telnet IP 端口 超时?按顺序排查:

  1. ✅ 先用 IP 测试

    → 排除 DNS 问题(nslookup / dig

  2. 🛡️ 查本机出站防火墙

    sudo iptables -L OUTPUT -n -v(看是否 DROP)

    → 检查 firewalldnftables(如启用)

  3. ☁️ 查云平台安全组(出站规则!)

    → 登录控制台,确认目标 IP/端口是否放行

  4. 📡 抓包验证请求是否发出

    sudo tcpdump -i any host <IP> and port <PORT>

    → 无 SYN 包?→ 本机拦截;有 SYN 无回?→ 外部问题

  5. 🔄 横向对比测试

    → 其他机器能否 telnet 通?判断问题是本地还是目标侧


🧭 Linux 服务器网络不通排查 SOP

------ 当你在服务器上 telnet 目标IP 端口 超时怎么办?

场景:在某台 Linux 服务器上执行 telnet 192.168.1.100 8080telnet api.example.com 443,提示 "Connection timed out"(连接超时)


一、先理解几个关键概念

✅ 1. telnet 超时 vs 连接被拒绝

现象 含义 可能原因
Connection timed out 数据包发出去了,但没人回应 防火墙 DROP、目标没开、中间网络拦截
Connection refused 数据包到达目标,但目标明确拒绝 目标服务未监听该端口

🔍 本文只讨论 "超时" 场景 ------ 这通常意味着请求被静默丢弃


✅ 2. 网络流向:你是"客户端"还是"服务端"?

  • 如果你在服务器 A 上执行 telnet B:portA 是客户端,B 是服务端
  • 此时流量方向是:A → B
  • 在 A 上,这个出站连接受 OUTPUT 控制;
  • 在 B 上,入站连接受 INPUT 控制。

📌 本文假设你是在 发起连接的机器(客户端) 上排查问题。


✅ 3. 防火墙层级模型(由近到远)

从内到外:

复制代码
[你的进程] 
    ↓
1️⃣ 本地防火墙(iptables / nftables / firewalld) → OUTPUT 链
    ↓
2️⃣ 云平台安全组(出站规则) ← 常被忽略!
    ↓
3️⃣ 中间网络设备(企业防火墙、ACL)
    ↓
4️⃣ 目标服务器防火墙(INPUT 链)
    ↓
5️⃣ 目标服务是否真正在监听?

二、标准排查流程(SOP)

💡 建议按顺序执行,每一步都可能快速定位问题!


🔹 Step 1:确认是不是 DNS 问题(如果用了域名)

复制代码
nslookup api.example.com
# 或
dig api.example.com +short
  • 如果解析失败 → 检查 /etc/resolv.conf 和 DNS 配置;
  • 如果解析出错 IP → 用真实 IP 直接 telnet 测试。

建议:先用 IP 测试,排除 DNS 干扰。


🔹 Step 2:检查本地防火墙(本机 OUTPUT 规则)

(1)查看 iptables OUTPUT 链
复制代码
sudo iptables -L OUTPUT -n -v

重点关注:

  • 是否有 -j DROP-j REJECT 规则?
  • 默认策略是什么?(最后一行:policy ACCEPT or DROP?)

⚠️ 如果策略是 DROP,但又没有明确放行目标 IP/端口,就会超时。

(2)检查是否用了 firewalld(RHEL/CentOS)
复制代码
sudo firewall-cmd --state          # 看是否 running
sudo firewall-cmd --list-all       # 查看出站规则(默认通常全开)

💡 firewalld 默认允许所有出站,所以一般不是它的问题。

(3)检查 nftables(新系统)
复制代码
sudo nft list ruleset | grep -A5 -B5 "output\|egress"

🔹 Step 3:检查云平台安全组(出站规则!)

🚨 这是开发最容易忽略的地方!

如果你的服务器在 阿里云、腾讯云、AWS、华为云等公有云

  1. 登录云控制台;
  2. 找到该服务器实例;
  3. 查看关联的 安全组(Security Group)
  4. 切换到 "出站规则"(Egress Rules) 标签页;
  5. 检查是否限制了目标 IP 或端口。

✅ 大多数云平台默认 "出站全开",但如果你或团队自定义过规则,就可能拦截。


🔹 Step 4:用 tcpdump 抓包,确认请求是否发出

这是最可靠的验证手段

在你的服务器上执行:

复制代码
sudo tcpdump -i any host <目标IP> and port <目标端口>

然后另开一个终端,执行:

复制代码
telnet <目标IP> <目标端口>

观察 tcpdump 输出:

表格

现象 含义 下一步
看到 SYN 包发出 你的服务器已放行 问题在外部(目标或中间网络)
完全看不到任何包 被本机防火墙 DROP 回到 Step 2,检查 OUTPUT 规则
看到 SYN 但无 SYN+ACK 请求到达目标,但目标没响应 联系目标方排查

💡 示例:
10:00:01.123456 IP your-server.54321 > target-ip.8080: Flags [S], ... → 表示 SYN 已发出。


🔹 Step 5:测试从其他机器访问同一目标

  • 从你本地电脑、另一台服务器执行 telnet 目标IP 端口
  • 如果 所有人都超时 → 问题在目标侧(服务没开/目标防火墙);
  • 如果 只有你的服务器超时 → 问题在你的出站路径(本机防火墙 / 云安全组 / 路由)。

🔹 Step 6:检查路由和网关(较少见,但需排除)

复制代码
# 查看去往目标 IP 的路由
ip route get <目标IP>

# 示例输出:
# 192.168.10.50 via 10.0.0.1 dev eth0 src 10.0.0.100 uid 1000
  • 确认下一跳(via)是否可达;
  • 如果走错了网卡或网关,可能导致包发不出去。

三、常见误区 & 最佳实践

✅ 最佳实践:

  1. 先用 IP 测试,排除 DNS;
  2. 优先检查云安全组出站规则
  3. 善用 tcpdump,眼见为实;
  4. 网络是分层的,必须逐层验证。

四、附录:常用命令速查

用途 命令
测试连通性 telnet IP PORTnc -zv IP PORT
DNS 解析 nslookup example.com
查看本地监听 ss -tuln
检查 OUTPUT 防火墙 sudo iptables -L OUTPUT -n -v
抓包验证 sudo tcpdump -i any host IP and port PORT
查看路由 ip route get IP

✅ 总结

telnet 目标IP 端口 超时时,请按以下顺序思考:

  1. 是不是 DNS 问题? → 用 IP 测试
  2. 本机防火墙拦了吗? → 查 OUTPUT
  3. 云安全组出站放行了吗? → 登录控制台看
  4. 包到底发出去没?tcpdump 抓包
  5. 别人能通吗? → 横向对比
  6. 路由对吗?ip route get
相关推荐
十日十行12 小时前
Linux和window共享文件夹
linux
Sinclair15 小时前
简单几步,安卓手机秒变服务器,安装 CMS 程序
android·服务器
木心月转码ing19 小时前
WSL+Cpp开发环境配置
linux
Rockbean2 天前
用40行代码搭建自己的无服务器OCR
服务器·python·deepseek
茶杯梦轩2 天前
CompletableFuture 在 项目实战 中 创建异步任务 的核心优势及使用场景
服务器·后端·面试
崔小汤呀2 天前
最全的docker安装笔记,包含CentOS和Ubuntu
linux·后端
何中应2 天前
vi编辑器使用
linux·后端·操作系统
何中应2 天前
Linux进程无法被kill
linux·后端·操作系统
何中应2 天前
rm-rf /命令操作介绍
linux·后端·操作系统
何中应2 天前
Linux常用命令
linux·操作系统