Jenkins 从节点连不上主节点?一次网络排查全记录 + 机器间通信“拦截层“全景讲解

适合读者:后端开发,知道 ping、IP、端口这些基本概念,但对防火墙、iptables、安全组不太熟。


一、问题背景

刚部署好 Jenkins,需要在另一台机器(从节点)上运行 agent.jar 连接主节点。从节点需要先从主节点下载 agent.jar,命令是:

bash 复制代码
curl -O http://jenkins.localhost.prod.com:8080/jenkins/jnlpJars/agent.jar

结果------下载不了,连接超时

但诡异的是,从节点 ping 主节点是通的:

bash 复制代码
ping jenkins.localhost.prod.com
# PING jenkins.localhost.prod.com (192.168.251.213) 56(84) bytes of data.
# 64 bytes from ... time=0.386 ms  ✅ 通!

ping 通,但下载文件不通。 这篇博客就是把这个问题的排查过程完整复盘,顺带把机器之间通信的"拦截层"体系讲清楚。


二、排查过程:一步步缩小范围

2.1 第一步:确认 Jenkins 到底跑在哪个端口

端口是什么? 一台机器上可以同时跑很多服务(Web 服务、数据库、SSH),每个服务绑定一个数字编号,这个编号就是"端口"。比如 80 是 Web 默认端口,22 是 SSH 默认端口,8080 是 Java Web 应用常用端口。

bash 复制代码
# 在 Jenkins 主节点上执行
ss -lntp | grep java

输出:

复制代码
LISTEN  0  50  *:8080  *:*  users:(("java",pid=2216964,fd=9))

结论:Jenkins 跑在 8080 端口,没问题。


2.2 第二步:查防火墙------8080 有没有被挡住

防火墙(firewall)是什么? 机器上的一道"安检门"。所有进出机器的网络数据,防火墙会按照你设置的规则决定"放行"还是"拦截"。

在 Linux 上,防火墙通常由 firewalld 服务管理。先看它是不是在运行:

bash 复制代码
systemctl status firewalld
# Active: active (running) ✅ 在运行

再看当前放行了哪些端口:

bash 复制代码
firewall-cmd --list-ports
# (空输出,什么都没放行!)

根因发现:防火墙在跑,但 8080 端口没有被放行。 于是加规则:

bash 复制代码
firewall-cmd --zone=public --add-port=8080/tcp --permanent && firewall-cmd --reload

2.3 第三步:加了规则还是不通 ------ 发现网卡没绑定

规则加了,但从节点还是超时。继续排查,发现一个更隐蔽的问题:

bash 复制代码
firewall-cmd --get-active-zones
# (空输出!)

Zone(区域)是什么? firewalld 把网络接口(网卡)归入不同的"区域",每个区域有自己的一套放行规则。firewalld 预定义了 9 种 zone,按信任度从低到高排列:

Zone 信任度 含义
drop 最低 所有入站连接直接丢弃,连拒绝消息都不回复(彻底隐身)
block 极低 所有入站连接拒绝,但会回复拒绝消息
public 默认 zone,适用于不可信的公网环境,只放行你明确配置的端口
external 中低 用于 NAT 伪装的外部网络(如路由器出口)
dmz 隔离区(Demilitarized Zone),内网和公网之间的缓冲地带
work 中高 工作网络,基本信任同网段的机器
home 家庭网络,信任度高于 work
internal 很高 内部网络,高度信任
trusted 最高 完全信任,所有入站连接无条件放行

日常场景中几乎只用两种:public(默认,对外暴露的服务器)和 trusted(内网里完全互信的机器)。

空输出的真正含义 :网卡没有绑定到任何 zone,所以刚才加的 8080 规则虽然写进了 public zone 的配置里,但没有网卡来"承载"这套规则

因果链(重点)
#mermaid-svg-YWRNdvOefdTCABy5{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-YWRNdvOefdTCABy5 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-YWRNdvOefdTCABy5 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-YWRNdvOefdTCABy5 .error-icon{fill:#552222;}#mermaid-svg-YWRNdvOefdTCABy5 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-YWRNdvOefdTCABy5 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-YWRNdvOefdTCABy5 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-YWRNdvOefdTCABy5 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-YWRNdvOefdTCABy5 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-YWRNdvOefdTCABy5 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-YWRNdvOefdTCABy5 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-YWRNdvOefdTCABy5 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-YWRNdvOefdTCABy5 .marker.cross{stroke:#333333;}#mermaid-svg-YWRNdvOefdTCABy5 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-YWRNdvOefdTCABy5 p{margin:0;}#mermaid-svg-YWRNdvOefdTCABy5 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-YWRNdvOefdTCABy5 .cluster-label text{fill:#333;}#mermaid-svg-YWRNdvOefdTCABy5 .cluster-label span{color:#333;}#mermaid-svg-YWRNdvOefdTCABy5 .cluster-label span p{background-color:transparent;}#mermaid-svg-YWRNdvOefdTCABy5 .label text,#mermaid-svg-YWRNdvOefdTCABy5 span{fill:#333;color:#333;}#mermaid-svg-YWRNdvOefdTCABy5 .node rect,#mermaid-svg-YWRNdvOefdTCABy5 .node circle,#mermaid-svg-YWRNdvOefdTCABy5 .node ellipse,#mermaid-svg-YWRNdvOefdTCABy5 .node polygon,#mermaid-svg-YWRNdvOefdTCABy5 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-YWRNdvOefdTCABy5 .rough-node .label text,#mermaid-svg-YWRNdvOefdTCABy5 .node .label text,#mermaid-svg-YWRNdvOefdTCABy5 .image-shape .label,#mermaid-svg-YWRNdvOefdTCABy5 .icon-shape .label{text-anchor:middle;}#mermaid-svg-YWRNdvOefdTCABy5 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-YWRNdvOefdTCABy5 .rough-node .label,#mermaid-svg-YWRNdvOefdTCABy5 .node .label,#mermaid-svg-YWRNdvOefdTCABy5 .image-shape .label,#mermaid-svg-YWRNdvOefdTCABy5 .icon-shape .label{text-align:center;}#mermaid-svg-YWRNdvOefdTCABy5 .node.clickable{cursor:pointer;}#mermaid-svg-YWRNdvOefdTCABy5 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-YWRNdvOefdTCABy5 .arrowheadPath{fill:#333333;}#mermaid-svg-YWRNdvOefdTCABy5 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-YWRNdvOefdTCABy5 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-YWRNdvOefdTCABy5 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-YWRNdvOefdTCABy5 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-YWRNdvOefdTCABy5 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-YWRNdvOefdTCABy5 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-YWRNdvOefdTCABy5 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-YWRNdvOefdTCABy5 .cluster text{fill:#333;}#mermaid-svg-YWRNdvOefdTCABy5 .cluster span{color:#333;}#mermaid-svg-YWRNdvOefdTCABy5 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-YWRNdvOefdTCABy5 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-YWRNdvOefdTCABy5 rect.text{fill:none;stroke-width:0;}#mermaid-svg-YWRNdvOefdTCABy5 .icon-shape,#mermaid-svg-YWRNdvOefdTCABy5 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-YWRNdvOefdTCABy5 .icon-shape p,#mermaid-svg-YWRNdvOefdTCABy5 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-YWRNdvOefdTCABy5 .icon-shape .label rect,#mermaid-svg-YWRNdvOefdTCABy5 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-YWRNdvOefdTCABy5 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-YWRNdvOefdTCABy5 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-YWRNdvOefdTCABy5 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 网卡 ens18 未绑定 zone
firewalld 不会为 ens18 生成

对应的 iptables 规则
数据包从 ens18 进入时

iptables INPUT 链走到 INPUT_ZONES 子链
INPUT_ZONES 的规则是:

IN_public 仅匹配来自 + 网卡(wildcard)的包

但 ens18 流量不匹配任何 zone 的规则
在 INPUT_ZONES 中匹配不到任何 ACCEPT
掉到链末尾的兜底规则:

REJECT all
❌ 数据包被拒绝

小技巧:验证这个因果链------执行 iptables -L IN_public_allow -n -v --line-numbers | grep 8080,如果 8080 的 ACCEPT 规则存在但 pkts=0(匹配次数为 0),就说明规则写对了但流量没走这儿,大概率是网卡没绑定 zone。

bash 复制代码
# 把 ens18 网卡绑到 public zone
firewall-cmd --zone=public --add-interface=ens18 --permanent && firewall-cmd --reload

# 确认绑定成功
firewall-cmd --get-active-zones
# public
#   interfaces: ens18  ✅

2.4 第四步:还是不通 ------ 换个端口测试,发现 TCP 全死

8080 仍然不通,我换了一个思路:不用 Jenkins 端口测,换个最基础的端口------SSH 的 22 端口,看看是所有 TCP 都不通,还是只有 8080 不通。

TCP 是什么? 两台机器之间"传数据"使用的协议。ping 用的叫 ICMP(只测试通不通,不传实际数据),下载文件、SSH 登录、访问网页用的叫 TCP(真正传输数据的协议)。

bash 复制代码
# 从节点测试主节点的 SSH 端口
nc -zv jenkins.localhost.prod.com 22 -w 3
# TIMEOUT ❌ 22 端口也不通!

这个发现是关键转折点------如果只有 8080 不通,那是 Jenkins 配置问题;但 22 也不通,说明问题不在应用层,而在网络层。


2.5 第五步:反向测试------主节点往从节点也测一下

bash 复制代码
# 主节点测试从节点的 SSH 端口
nc -zv 192.168.251.11 22 -w 3
# TIMEOUT ❌ 反向也不通!

双向 TCP 全死,但 ping 双向都通。


2.6 第六步:对照线索,定位根因

整理所有线索:

线索 含义
ping 通 两台机器在同一局域网,网络层可达
ARP 表互见 二层链路没问题,能互相看到对方的 MAC 地址
TCP 全不通(22、8080) 不是某个应用的问题,是 TCP 协议被整体拦截
本地 iptables 规则正确,但 pkts=0 规则存在但无流量命中------排除本地防火墙问题

ARP 是什么? 在局域网里,机器之间通信最终靠 MAC 地址(网卡的物理地址,出厂烧录的)。ARP 就是"根据 IP 查 MAC 地址"的协议。ARP 表互见 = 两台机器确实在同一个局域网里。
iptables 是什么? Linux 内核自带的网络包过滤系统。你可以把它理解为"最底层的防火墙",直接在内核里拦截或放行数据包。firewalld 本质上是 iptables 的一个图形化/命令行封装,最终生成的也是 iptables 规则。
pkts 是什么? pktspackets (数据包)的缩写,表示"匹配到这条规则的累计数据包数量"。每有一个数据包命中某条 iptables 规则,该规则的 pkts 计数器就 +1。排查时的核心判断 :如果一条 ACCEPT 规则的 pkts=0,说明从未有数据包走到这里------流量在更上游就被拦了;如果 pkts 在正常增长,说明规则生效、流量确实在走这条路。

结论只有一种可能:虚拟化平台层面有安全策略,专门拦截了 TCP 协议(但放行了 ICMP/ping)。 这超出了两台虚拟机自己能控制的范围,需要在麒麟虚拟化平台的管理后台去调整。


以上就是排查全过程。下面来系统讲讲------机器之间通信,到底有多少层"拦截"?


三、机器间通信的"拦截层"全景

两台机器通信,数据包从 A 出发到 B,一路上会经过多个"安检关卡"。每个关卡都可以选择放行或拦截。理解这个层级结构,是排查网络问题的基本功。
#mermaid-svg-sakLLdqVxuOF9Wwg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-sakLLdqVxuOF9Wwg .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-sakLLdqVxuOF9Wwg .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-sakLLdqVxuOF9Wwg .error-icon{fill:#552222;}#mermaid-svg-sakLLdqVxuOF9Wwg .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-sakLLdqVxuOF9Wwg .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-sakLLdqVxuOF9Wwg .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-sakLLdqVxuOF9Wwg .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-sakLLdqVxuOF9Wwg .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-sakLLdqVxuOF9Wwg .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-sakLLdqVxuOF9Wwg .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-sakLLdqVxuOF9Wwg .marker{fill:#333333;stroke:#333333;}#mermaid-svg-sakLLdqVxuOF9Wwg .marker.cross{stroke:#333333;}#mermaid-svg-sakLLdqVxuOF9Wwg svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-sakLLdqVxuOF9Wwg p{margin:0;}#mermaid-svg-sakLLdqVxuOF9Wwg .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-sakLLdqVxuOF9Wwg .cluster-label text{fill:#333;}#mermaid-svg-sakLLdqVxuOF9Wwg .cluster-label span{color:#333;}#mermaid-svg-sakLLdqVxuOF9Wwg .cluster-label span p{background-color:transparent;}#mermaid-svg-sakLLdqVxuOF9Wwg .label text,#mermaid-svg-sakLLdqVxuOF9Wwg span{fill:#333;color:#333;}#mermaid-svg-sakLLdqVxuOF9Wwg .node rect,#mermaid-svg-sakLLdqVxuOF9Wwg .node circle,#mermaid-svg-sakLLdqVxuOF9Wwg .node ellipse,#mermaid-svg-sakLLdqVxuOF9Wwg .node polygon,#mermaid-svg-sakLLdqVxuOF9Wwg .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-sakLLdqVxuOF9Wwg .rough-node .label text,#mermaid-svg-sakLLdqVxuOF9Wwg .node .label text,#mermaid-svg-sakLLdqVxuOF9Wwg .image-shape .label,#mermaid-svg-sakLLdqVxuOF9Wwg .icon-shape .label{text-anchor:middle;}#mermaid-svg-sakLLdqVxuOF9Wwg .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-sakLLdqVxuOF9Wwg .rough-node .label,#mermaid-svg-sakLLdqVxuOF9Wwg .node .label,#mermaid-svg-sakLLdqVxuOF9Wwg .image-shape .label,#mermaid-svg-sakLLdqVxuOF9Wwg .icon-shape .label{text-align:center;}#mermaid-svg-sakLLdqVxuOF9Wwg .node.clickable{cursor:pointer;}#mermaid-svg-sakLLdqVxuOF9Wwg .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-sakLLdqVxuOF9Wwg .arrowheadPath{fill:#333333;}#mermaid-svg-sakLLdqVxuOF9Wwg .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-sakLLdqVxuOF9Wwg .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-sakLLdqVxuOF9Wwg .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-sakLLdqVxuOF9Wwg .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-sakLLdqVxuOF9Wwg .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-sakLLdqVxuOF9Wwg .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-sakLLdqVxuOF9Wwg .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-sakLLdqVxuOF9Wwg .cluster text{fill:#333;}#mermaid-svg-sakLLdqVxuOF9Wwg .cluster span{color:#333;}#mermaid-svg-sakLLdqVxuOF9Wwg div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-sakLLdqVxuOF9Wwg .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-sakLLdqVxuOF9Wwg rect.text{fill:none;stroke-width:0;}#mermaid-svg-sakLLdqVxuOF9Wwg .icon-shape,#mermaid-svg-sakLLdqVxuOF9Wwg .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-sakLLdqVxuOF9Wwg .icon-shape p,#mermaid-svg-sakLLdqVxuOF9Wwg .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-sakLLdqVxuOF9Wwg .icon-shape .label rect,#mermaid-svg-sakLLdqVxuOF9Wwg .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-sakLLdqVxuOF9Wwg .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-sakLLdqVxuOF9Wwg .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-sakLLdqVxuOF9Wwg :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 机器 B(主节点)
网络中间设备
虚拟化平台层 / 云平台
机器 A(从节点)
应用发出请求(如 curl)
出站防火墙规则

(OUTPUT 链)
网卡 → 物理发出
出方向安全组策略
入方向安全组策略
交换机 / 路由器
硬件防火墙 / NAT 网关
网卡 → 接收数据
入站防火墙规则

(INPUT 链)
应用接收请求

(Jenkins:8080)

核心规律 :数据包从 A 到 B,走的是对称路径 ------A 侧有出站规则,B 侧有入站规则,中间还有平台层和硬件层的拦截点。排查时要从近到远逐层排除。


四、各层拦截机制详解

4.1 第一层:虚拟机本地防火墙

这是你可以直接在命令行操作的一层,也是排查时最先查的。
#mermaid-svg-p5OHsqoRKxDAnTrD{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-p5OHsqoRKxDAnTrD .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-p5OHsqoRKxDAnTrD .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-p5OHsqoRKxDAnTrD .error-icon{fill:#552222;}#mermaid-svg-p5OHsqoRKxDAnTrD .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-p5OHsqoRKxDAnTrD .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-p5OHsqoRKxDAnTrD .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-p5OHsqoRKxDAnTrD .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-p5OHsqoRKxDAnTrD .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-p5OHsqoRKxDAnTrD .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-p5OHsqoRKxDAnTrD .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-p5OHsqoRKxDAnTrD .marker{fill:#333333;stroke:#333333;}#mermaid-svg-p5OHsqoRKxDAnTrD .marker.cross{stroke:#333333;}#mermaid-svg-p5OHsqoRKxDAnTrD svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-p5OHsqoRKxDAnTrD p{margin:0;}#mermaid-svg-p5OHsqoRKxDAnTrD .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-p5OHsqoRKxDAnTrD .cluster-label text{fill:#333;}#mermaid-svg-p5OHsqoRKxDAnTrD .cluster-label span{color:#333;}#mermaid-svg-p5OHsqoRKxDAnTrD .cluster-label span p{background-color:transparent;}#mermaid-svg-p5OHsqoRKxDAnTrD .label text,#mermaid-svg-p5OHsqoRKxDAnTrD span{fill:#333;color:#333;}#mermaid-svg-p5OHsqoRKxDAnTrD .node rect,#mermaid-svg-p5OHsqoRKxDAnTrD .node circle,#mermaid-svg-p5OHsqoRKxDAnTrD .node ellipse,#mermaid-svg-p5OHsqoRKxDAnTrD .node polygon,#mermaid-svg-p5OHsqoRKxDAnTrD .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-p5OHsqoRKxDAnTrD .rough-node .label text,#mermaid-svg-p5OHsqoRKxDAnTrD .node .label text,#mermaid-svg-p5OHsqoRKxDAnTrD .image-shape .label,#mermaid-svg-p5OHsqoRKxDAnTrD .icon-shape .label{text-anchor:middle;}#mermaid-svg-p5OHsqoRKxDAnTrD .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-p5OHsqoRKxDAnTrD .rough-node .label,#mermaid-svg-p5OHsqoRKxDAnTrD .node .label,#mermaid-svg-p5OHsqoRKxDAnTrD .image-shape .label,#mermaid-svg-p5OHsqoRKxDAnTrD .icon-shape .label{text-align:center;}#mermaid-svg-p5OHsqoRKxDAnTrD .node.clickable{cursor:pointer;}#mermaid-svg-p5OHsqoRKxDAnTrD .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-p5OHsqoRKxDAnTrD .arrowheadPath{fill:#333333;}#mermaid-svg-p5OHsqoRKxDAnTrD .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-p5OHsqoRKxDAnTrD .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-p5OHsqoRKxDAnTrD .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-p5OHsqoRKxDAnTrD .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-p5OHsqoRKxDAnTrD .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-p5OHsqoRKxDAnTrD .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-p5OHsqoRKxDAnTrD .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-p5OHsqoRKxDAnTrD .cluster text{fill:#333;}#mermaid-svg-p5OHsqoRKxDAnTrD .cluster span{color:#333;}#mermaid-svg-p5OHsqoRKxDAnTrD div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-p5OHsqoRKxDAnTrD .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-p5OHsqoRKxDAnTrD rect.text{fill:none;stroke-width:0;}#mermaid-svg-p5OHsqoRKxDAnTrD .icon-shape,#mermaid-svg-p5OHsqoRKxDAnTrD .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-p5OHsqoRKxDAnTrD .icon-shape p,#mermaid-svg-p5OHsqoRKxDAnTrD .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-p5OHsqoRKxDAnTrD .icon-shape .label rect,#mermaid-svg-p5OHsqoRKxDAnTrD .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-p5OHsqoRKxDAnTrD .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-p5OHsqoRKxDAnTrD .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-p5OHsqoRKxDAnTrD :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Linux 防火墙体系
生成规则
匹配数据包
firewalld

(用户友好层)
iptables / nftables

(内核规则层)
规则链 (Chain)

  • INPUT(入站)

  • OUTPUT(出站)

  • FORWARD(转发)

大白话版

  • firewalld 是"前台服务员",你告诉它"开放 8080 端口",它帮你翻译成底层规则。
  • iptables 是"后台保安",真正在内核里检查每个数据包,按规则放行或拦截。
  • "链(Chain)"是三本登记簿------INPUT 登记入站规则、OUTPUT 登记出站规则、FORWARD 登记转发规则。

关键概念------链的匹配顺序

iptables 的规则是从上到下依次匹配的,一旦匹配上就执行动作(ACCEPT/DROP/REJECT),不再往下看。如果所有规则都没匹配上,走最后一条默认规则。
#mermaid-svg-PqpUaNosWhhZ42Ah{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-PqpUaNosWhhZ42Ah .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-PqpUaNosWhhZ42Ah .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-PqpUaNosWhhZ42Ah .error-icon{fill:#552222;}#mermaid-svg-PqpUaNosWhhZ42Ah .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-PqpUaNosWhhZ42Ah .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-PqpUaNosWhhZ42Ah .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-PqpUaNosWhhZ42Ah .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-PqpUaNosWhhZ42Ah .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-PqpUaNosWhhZ42Ah .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-PqpUaNosWhhZ42Ah .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-PqpUaNosWhhZ42Ah .marker{fill:#333333;stroke:#333333;}#mermaid-svg-PqpUaNosWhhZ42Ah .marker.cross{stroke:#333333;}#mermaid-svg-PqpUaNosWhhZ42Ah svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-PqpUaNosWhhZ42Ah p{margin:0;}#mermaid-svg-PqpUaNosWhhZ42Ah .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-PqpUaNosWhhZ42Ah .cluster-label text{fill:#333;}#mermaid-svg-PqpUaNosWhhZ42Ah .cluster-label span{color:#333;}#mermaid-svg-PqpUaNosWhhZ42Ah .cluster-label span p{background-color:transparent;}#mermaid-svg-PqpUaNosWhhZ42Ah .label text,#mermaid-svg-PqpUaNosWhhZ42Ah span{fill:#333;color:#333;}#mermaid-svg-PqpUaNosWhhZ42Ah .node rect,#mermaid-svg-PqpUaNosWhhZ42Ah .node circle,#mermaid-svg-PqpUaNosWhhZ42Ah .node ellipse,#mermaid-svg-PqpUaNosWhhZ42Ah .node polygon,#mermaid-svg-PqpUaNosWhhZ42Ah .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-PqpUaNosWhhZ42Ah .rough-node .label text,#mermaid-svg-PqpUaNosWhhZ42Ah .node .label text,#mermaid-svg-PqpUaNosWhhZ42Ah .image-shape .label,#mermaid-svg-PqpUaNosWhhZ42Ah .icon-shape .label{text-anchor:middle;}#mermaid-svg-PqpUaNosWhhZ42Ah .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-PqpUaNosWhhZ42Ah .rough-node .label,#mermaid-svg-PqpUaNosWhhZ42Ah .node .label,#mermaid-svg-PqpUaNosWhhZ42Ah .image-shape .label,#mermaid-svg-PqpUaNosWhhZ42Ah .icon-shape .label{text-align:center;}#mermaid-svg-PqpUaNosWhhZ42Ah .node.clickable{cursor:pointer;}#mermaid-svg-PqpUaNosWhhZ42Ah .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-PqpUaNosWhhZ42Ah .arrowheadPath{fill:#333333;}#mermaid-svg-PqpUaNosWhhZ42Ah .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-PqpUaNosWhhZ42Ah .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-PqpUaNosWhhZ42Ah .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-PqpUaNosWhhZ42Ah .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-PqpUaNosWhhZ42Ah .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-PqpUaNosWhhZ42Ah .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-PqpUaNosWhhZ42Ah .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-PqpUaNosWhhZ42Ah .cluster text{fill:#333;}#mermaid-svg-PqpUaNosWhhZ42Ah .cluster span{color:#333;}#mermaid-svg-PqpUaNosWhhZ42Ah div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-PqpUaNosWhhZ42Ah .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-PqpUaNosWhhZ42Ah rect.text{fill:none;stroke-width:0;}#mermaid-svg-PqpUaNosWhhZ42Ah .icon-shape,#mermaid-svg-PqpUaNosWhhZ42Ah .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-PqpUaNosWhhZ42Ah .icon-shape p,#mermaid-svg-PqpUaNosWhhZ42Ah .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-PqpUaNosWhhZ42Ah .icon-shape .label rect,#mermaid-svg-PqpUaNosWhhZ42Ah .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-PqpUaNosWhhZ42Ah .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-PqpUaNosWhhZ42Ah .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-PqpUaNosWhhZ42Ah :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 不匹配
不匹配
匹配到 ACCEPT
没匹配到
数据包到达
规则1: 已建立连接 → ACCEPT
规则2: 本地回环 → ACCEPT
规则3: 进入子链检查
子链中逐条匹配...
✅ 放行
规则4: 兜底 REJECT
❌ 拦截

本次踩坑点:8080 规则虽然加进去了,但网卡没绑定 zone,导致流量根本没走那条规则链。

这部分你能直接控制的命令后面有速查表。


4.2 第二层:虚拟化平台 / 云平台安全策略

这是本次问题的真正根因所在。

不管你用的是 VMware、Proxmox、麒麟云,还是阿里云 / 腾讯云,虚拟机外面都有一层由平台控制的网络策略。
#mermaid-svg-t3dxgTcSkP428Y7i{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-t3dxgTcSkP428Y7i .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-t3dxgTcSkP428Y7i .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-t3dxgTcSkP428Y7i .error-icon{fill:#552222;}#mermaid-svg-t3dxgTcSkP428Y7i .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-t3dxgTcSkP428Y7i .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-t3dxgTcSkP428Y7i .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-t3dxgTcSkP428Y7i .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-t3dxgTcSkP428Y7i .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-t3dxgTcSkP428Y7i .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-t3dxgTcSkP428Y7i .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-t3dxgTcSkP428Y7i .marker{fill:#333333;stroke:#333333;}#mermaid-svg-t3dxgTcSkP428Y7i .marker.cross{stroke:#333333;}#mermaid-svg-t3dxgTcSkP428Y7i svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-t3dxgTcSkP428Y7i p{margin:0;}#mermaid-svg-t3dxgTcSkP428Y7i .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-t3dxgTcSkP428Y7i .cluster-label text{fill:#333;}#mermaid-svg-t3dxgTcSkP428Y7i .cluster-label span{color:#333;}#mermaid-svg-t3dxgTcSkP428Y7i .cluster-label span p{background-color:transparent;}#mermaid-svg-t3dxgTcSkP428Y7i .label text,#mermaid-svg-t3dxgTcSkP428Y7i span{fill:#333;color:#333;}#mermaid-svg-t3dxgTcSkP428Y7i .node rect,#mermaid-svg-t3dxgTcSkP428Y7i .node circle,#mermaid-svg-t3dxgTcSkP428Y7i .node ellipse,#mermaid-svg-t3dxgTcSkP428Y7i .node polygon,#mermaid-svg-t3dxgTcSkP428Y7i .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-t3dxgTcSkP428Y7i .rough-node .label text,#mermaid-svg-t3dxgTcSkP428Y7i .node .label text,#mermaid-svg-t3dxgTcSkP428Y7i .image-shape .label,#mermaid-svg-t3dxgTcSkP428Y7i .icon-shape .label{text-anchor:middle;}#mermaid-svg-t3dxgTcSkP428Y7i .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-t3dxgTcSkP428Y7i .rough-node .label,#mermaid-svg-t3dxgTcSkP428Y7i .node .label,#mermaid-svg-t3dxgTcSkP428Y7i .image-shape .label,#mermaid-svg-t3dxgTcSkP428Y7i .icon-shape .label{text-align:center;}#mermaid-svg-t3dxgTcSkP428Y7i .node.clickable{cursor:pointer;}#mermaid-svg-t3dxgTcSkP428Y7i .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-t3dxgTcSkP428Y7i .arrowheadPath{fill:#333333;}#mermaid-svg-t3dxgTcSkP428Y7i .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-t3dxgTcSkP428Y7i .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-t3dxgTcSkP428Y7i .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-t3dxgTcSkP428Y7i .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-t3dxgTcSkP428Y7i .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-t3dxgTcSkP428Y7i .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-t3dxgTcSkP428Y7i .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-t3dxgTcSkP428Y7i .cluster text{fill:#333;}#mermaid-svg-t3dxgTcSkP428Y7i .cluster span{color:#333;}#mermaid-svg-t3dxgTcSkP428Y7i div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-t3dxgTcSkP428Y7i .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-t3dxgTcSkP428Y7i rect.text{fill:none;stroke-width:0;}#mermaid-svg-t3dxgTcSkP428Y7i .icon-shape,#mermaid-svg-t3dxgTcSkP428Y7i .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-t3dxgTcSkP428Y7i .icon-shape p,#mermaid-svg-t3dxgTcSkP428Y7i .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-t3dxgTcSkP428Y7i .icon-shape .label rect,#mermaid-svg-t3dxgTcSkP428Y7i .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-t3dxgTcSkP428Y7i .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-t3dxgTcSkP428Y7i .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-t3dxgTcSkP428Y7i :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 物理宿主机 / 云平台
虚拟机 B
应用
虚拟机 A
应用
虚拟交换机
安全组(Security Group)
网络 ACL

安全组(Security Group)

  • 作用在虚拟机级别,是一组"允许什么协议、什么端口进出"的规则
  • 默认行为一般是"入方向全拒绝,出方向全放行"
  • 修改后立即生效,不需要重启

网络 ACL

  • 作用在子网级别,是整个网段的准入规则
  • 比安全组更底层,通常由平台管理员配置
  • 是无状态的(出和入要分别配)

为什么 ping 通、TCP 不通?
#mermaid-svg-RYHCeWAQANmdn3Fm{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-RYHCeWAQANmdn3Fm .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-RYHCeWAQANmdn3Fm .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-RYHCeWAQANmdn3Fm .error-icon{fill:#552222;}#mermaid-svg-RYHCeWAQANmdn3Fm .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-RYHCeWAQANmdn3Fm .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-RYHCeWAQANmdn3Fm .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-RYHCeWAQANmdn3Fm .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-RYHCeWAQANmdn3Fm .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-RYHCeWAQANmdn3Fm .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-RYHCeWAQANmdn3Fm .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-RYHCeWAQANmdn3Fm .marker{fill:#333333;stroke:#333333;}#mermaid-svg-RYHCeWAQANmdn3Fm .marker.cross{stroke:#333333;}#mermaid-svg-RYHCeWAQANmdn3Fm svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-RYHCeWAQANmdn3Fm p{margin:0;}#mermaid-svg-RYHCeWAQANmdn3Fm .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-RYHCeWAQANmdn3Fm .cluster-label text{fill:#333;}#mermaid-svg-RYHCeWAQANmdn3Fm .cluster-label span{color:#333;}#mermaid-svg-RYHCeWAQANmdn3Fm .cluster-label span p{background-color:transparent;}#mermaid-svg-RYHCeWAQANmdn3Fm .label text,#mermaid-svg-RYHCeWAQANmdn3Fm span{fill:#333;color:#333;}#mermaid-svg-RYHCeWAQANmdn3Fm .node rect,#mermaid-svg-RYHCeWAQANmdn3Fm .node circle,#mermaid-svg-RYHCeWAQANmdn3Fm .node ellipse,#mermaid-svg-RYHCeWAQANmdn3Fm .node polygon,#mermaid-svg-RYHCeWAQANmdn3Fm .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-RYHCeWAQANmdn3Fm .rough-node .label text,#mermaid-svg-RYHCeWAQANmdn3Fm .node .label text,#mermaid-svg-RYHCeWAQANmdn3Fm .image-shape .label,#mermaid-svg-RYHCeWAQANmdn3Fm .icon-shape .label{text-anchor:middle;}#mermaid-svg-RYHCeWAQANmdn3Fm .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-RYHCeWAQANmdn3Fm .rough-node .label,#mermaid-svg-RYHCeWAQANmdn3Fm .node .label,#mermaid-svg-RYHCeWAQANmdn3Fm .image-shape .label,#mermaid-svg-RYHCeWAQANmdn3Fm .icon-shape .label{text-align:center;}#mermaid-svg-RYHCeWAQANmdn3Fm .node.clickable{cursor:pointer;}#mermaid-svg-RYHCeWAQANmdn3Fm .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-RYHCeWAQANmdn3Fm .arrowheadPath{fill:#333333;}#mermaid-svg-RYHCeWAQANmdn3Fm .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-RYHCeWAQANmdn3Fm .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-RYHCeWAQANmdn3Fm .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-RYHCeWAQANmdn3Fm .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-RYHCeWAQANmdn3Fm .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-RYHCeWAQANmdn3Fm .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-RYHCeWAQANmdn3Fm .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-RYHCeWAQANmdn3Fm .cluster text{fill:#333;}#mermaid-svg-RYHCeWAQANmdn3Fm .cluster span{color:#333;}#mermaid-svg-RYHCeWAQANmdn3Fm div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-RYHCeWAQANmdn3Fm .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-RYHCeWAQANmdn3Fm rect.text{fill:none;stroke-width:0;}#mermaid-svg-RYHCeWAQANmdn3Fm .icon-shape,#mermaid-svg-RYHCeWAQANmdn3Fm .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-RYHCeWAQANmdn3Fm .icon-shape p,#mermaid-svg-RYHCeWAQANmdn3Fm .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-RYHCeWAQANmdn3Fm .icon-shape .label rect,#mermaid-svg-RYHCeWAQANmdn3Fm .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-RYHCeWAQANmdn3Fm .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-RYHCeWAQANmdn3Fm .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-RYHCeWAQANmdn3Fm :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 安全组: 允许
安全组: 拒绝
ICMP 数据包(ping)
✅ 通过
TCP 数据包(curl/SSH)
❌ 拦截

安全组可以按协议类型做精细化控制。ICMP(ping)和 TCP(传数据)是不同的协议,可以分别设置允许或拒绝。你的情况大概率是:安全组配置了"允许 ICMP",但没有配"允许 TCP",导致出现 ping 通但传数据不通的诡异现象。

怎么修:去虚拟化平台/云平台的管理后台,找到对应虚拟机/安全组,把 TCP 协议(或需要的端口如 22、8080)加入允许列表。


4.3 第三层:硬件防火墙 / 网络设备

本次问题不涉及这一层,但知道它的存在很重要。

如果是物理机房环境,或者跨机房 / 跨地域通信,还会经过独立的硬件防火墙、路由器 ACL 等。
#mermaid-svg-yrJA97mMJbi6gNXA{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-yrJA97mMJbi6gNXA .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-yrJA97mMJbi6gNXA .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-yrJA97mMJbi6gNXA .error-icon{fill:#552222;}#mermaid-svg-yrJA97mMJbi6gNXA .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-yrJA97mMJbi6gNXA .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-yrJA97mMJbi6gNXA .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-yrJA97mMJbi6gNXA .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-yrJA97mMJbi6gNXA .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-yrJA97mMJbi6gNXA .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-yrJA97mMJbi6gNXA .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-yrJA97mMJbi6gNXA .marker{fill:#333333;stroke:#333333;}#mermaid-svg-yrJA97mMJbi6gNXA .marker.cross{stroke:#333333;}#mermaid-svg-yrJA97mMJbi6gNXA svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-yrJA97mMJbi6gNXA p{margin:0;}#mermaid-svg-yrJA97mMJbi6gNXA .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-yrJA97mMJbi6gNXA .cluster-label text{fill:#333;}#mermaid-svg-yrJA97mMJbi6gNXA .cluster-label span{color:#333;}#mermaid-svg-yrJA97mMJbi6gNXA .cluster-label span p{background-color:transparent;}#mermaid-svg-yrJA97mMJbi6gNXA .label text,#mermaid-svg-yrJA97mMJbi6gNXA span{fill:#333;color:#333;}#mermaid-svg-yrJA97mMJbi6gNXA .node rect,#mermaid-svg-yrJA97mMJbi6gNXA .node circle,#mermaid-svg-yrJA97mMJbi6gNXA .node ellipse,#mermaid-svg-yrJA97mMJbi6gNXA .node polygon,#mermaid-svg-yrJA97mMJbi6gNXA .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-yrJA97mMJbi6gNXA .rough-node .label text,#mermaid-svg-yrJA97mMJbi6gNXA .node .label text,#mermaid-svg-yrJA97mMJbi6gNXA .image-shape .label,#mermaid-svg-yrJA97mMJbi6gNXA .icon-shape .label{text-anchor:middle;}#mermaid-svg-yrJA97mMJbi6gNXA .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-yrJA97mMJbi6gNXA .rough-node .label,#mermaid-svg-yrJA97mMJbi6gNXA .node .label,#mermaid-svg-yrJA97mMJbi6gNXA .image-shape .label,#mermaid-svg-yrJA97mMJbi6gNXA .icon-shape .label{text-align:center;}#mermaid-svg-yrJA97mMJbi6gNXA .node.clickable{cursor:pointer;}#mermaid-svg-yrJA97mMJbi6gNXA .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-yrJA97mMJbi6gNXA .arrowheadPath{fill:#333333;}#mermaid-svg-yrJA97mMJbi6gNXA .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-yrJA97mMJbi6gNXA .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-yrJA97mMJbi6gNXA .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-yrJA97mMJbi6gNXA .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-yrJA97mMJbi6gNXA .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-yrJA97mMJbi6gNXA .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-yrJA97mMJbi6gNXA .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-yrJA97mMJbi6gNXA .cluster text{fill:#333;}#mermaid-svg-yrJA97mMJbi6gNXA .cluster span{color:#333;}#mermaid-svg-yrJA97mMJbi6gNXA div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-yrJA97mMJbi6gNXA .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-yrJA97mMJbi6gNXA rect.text{fill:none;stroke-width:0;}#mermaid-svg-yrJA97mMJbi6gNXA .icon-shape,#mermaid-svg-yrJA97mMJbi6gNXA .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-yrJA97mMJbi6gNXA .icon-shape p,#mermaid-svg-yrJA97mMJbi6gNXA .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-yrJA97mMJbi6gNXA .icon-shape .label rect,#mermaid-svg-yrJA97mMJbi6gNXA .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-yrJA97mMJbi6gNXA .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-yrJA97mMJbi6gNXA .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-yrJA97mMJbi6gNXA :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 检查项:

  • 源IP/目标IP

  • 端口

  • 协议类型

  • 连接数限制
    机器 A
    交换机
    硬件防火墙
    路由器
    交换机
    机器 B

这一层一般由网络管理员控制,开发人员接触不到。但如果你排除了本地防火墙和云平台安全组后问题依旧,就需要联系网络管理员排查这一层。


4.4 计算机网络五层模型 & 本次问题在每一层的状态

上面讲的三层拦截是"物理部署视角",你学的计算机网络五层模型是"协议分层视角"。两者不矛盾,而是正交的两个维度------拦截层告诉你"谁在拦",协议层告诉你"拦了什么东西"。
#mermaid-svg-ucc7mpSARI9lZUgp{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-ucc7mpSARI9lZUgp .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-ucc7mpSARI9lZUgp .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-ucc7mpSARI9lZUgp .error-icon{fill:#552222;}#mermaid-svg-ucc7mpSARI9lZUgp .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-ucc7mpSARI9lZUgp .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-ucc7mpSARI9lZUgp .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-ucc7mpSARI9lZUgp .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-ucc7mpSARI9lZUgp .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-ucc7mpSARI9lZUgp .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-ucc7mpSARI9lZUgp .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-ucc7mpSARI9lZUgp .marker{fill:#333333;stroke:#333333;}#mermaid-svg-ucc7mpSARI9lZUgp .marker.cross{stroke:#333333;}#mermaid-svg-ucc7mpSARI9lZUgp svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-ucc7mpSARI9lZUgp p{margin:0;}#mermaid-svg-ucc7mpSARI9lZUgp .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-ucc7mpSARI9lZUgp .cluster-label text{fill:#333;}#mermaid-svg-ucc7mpSARI9lZUgp .cluster-label span{color:#333;}#mermaid-svg-ucc7mpSARI9lZUgp .cluster-label span p{background-color:transparent;}#mermaid-svg-ucc7mpSARI9lZUgp .label text,#mermaid-svg-ucc7mpSARI9lZUgp span{fill:#333;color:#333;}#mermaid-svg-ucc7mpSARI9lZUgp .node rect,#mermaid-svg-ucc7mpSARI9lZUgp .node circle,#mermaid-svg-ucc7mpSARI9lZUgp .node ellipse,#mermaid-svg-ucc7mpSARI9lZUgp .node polygon,#mermaid-svg-ucc7mpSARI9lZUgp .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-ucc7mpSARI9lZUgp .rough-node .label text,#mermaid-svg-ucc7mpSARI9lZUgp .node .label text,#mermaid-svg-ucc7mpSARI9lZUgp .image-shape .label,#mermaid-svg-ucc7mpSARI9lZUgp .icon-shape .label{text-anchor:middle;}#mermaid-svg-ucc7mpSARI9lZUgp .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-ucc7mpSARI9lZUgp .rough-node .label,#mermaid-svg-ucc7mpSARI9lZUgp .node .label,#mermaid-svg-ucc7mpSARI9lZUgp .image-shape .label,#mermaid-svg-ucc7mpSARI9lZUgp .icon-shape .label{text-align:center;}#mermaid-svg-ucc7mpSARI9lZUgp .node.clickable{cursor:pointer;}#mermaid-svg-ucc7mpSARI9lZUgp .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-ucc7mpSARI9lZUgp .arrowheadPath{fill:#333333;}#mermaid-svg-ucc7mpSARI9lZUgp .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-ucc7mpSARI9lZUgp .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-ucc7mpSARI9lZUgp .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ucc7mpSARI9lZUgp .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-ucc7mpSARI9lZUgp .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ucc7mpSARI9lZUgp .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-ucc7mpSARI9lZUgp .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-ucc7mpSARI9lZUgp .cluster text{fill:#333;}#mermaid-svg-ucc7mpSARI9lZUgp .cluster span{color:#333;}#mermaid-svg-ucc7mpSARI9lZUgp div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-ucc7mpSARI9lZUgp .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-ucc7mpSARI9lZUgp rect.text{fill:none;stroke-width:0;}#mermaid-svg-ucc7mpSARI9lZUgp .icon-shape,#mermaid-svg-ucc7mpSARI9lZUgp .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ucc7mpSARI9lZUgp .icon-shape p,#mermaid-svg-ucc7mpSARI9lZUgp .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-ucc7mpSARI9lZUgp .icon-shape .label rect,#mermaid-svg-ucc7mpSARI9lZUgp .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ucc7mpSARI9lZUgp .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-ucc7mpSARI9lZUgp .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-ucc7mpSARI9lZUgp :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 物理层(Physical Layer)
网线 / 光纤 / 电信号
✅ 物理连接正常(否则 ping 也不会通)
数据链路层(Data Link Layer)
MAC 地址 / ARP / 交换机
✅ ARP 表互见,说明两台机器在同一局域网
网络层(Network Layer)
IP 地址 / 路由 / ICMP(ping)
✅ ping 通,说明网络层可达

但网络层不管端口,只管 IP 寻址
传输层(Transport Layer)
TCP(可靠传输)/ UDP(快速传输)

  • 端口号(22, 8080, 80...)
    🔥 问题出在这一层!

TCP 协议被平台安全策略整体拦截
应用层(Application Layer)
HTTP / SSH / DNS

具体应用协议
Jenkins 的 HTTP 服务跑在这一层

→ 取决于传输层是否通

一句话总结 :物理层、数据链路层、网络层都是通的(ping 通、ARP 互见),问题卡在传输层------TCP 协议被拦截,导致上层应用(HTTP/SSH)全部不可用。

各层与拦截机制的对应关系

协议层 拦截点 排查时看什么
物理层 网线松了 / 交换机端口坏了 ip link 看网卡状态是否为 UP
数据链路层 VLAN 隔离、ARP 欺骗 arp -n 看能否解析对方 MAC 地址
网络层 路由黑洞、IP 黑白名单 ping 看 ICMP 是否通,traceroute 看在哪一跳断了
传输层 iptables、安全组、ACL nc -zv <IP> <PORT> 看 TCP 端口是否可达
应用层 应用防火墙(WAF)、代理认证 curl -v 看 HTTP 响应码

这次排查的路径就是沿着协议层从下往上验证的:物理层没问题 → ping 通(网络层)→ ARP 互见(链路层)→ TCP 不通(传输层卡住)。


4.5 为什么需要这么多层拦截?防火墙、安全组、ACL、硬件防火墙的区别

你的直觉没错------表面上看它们都是"拦数据包的",为什么不能一个搞定?答案在三个维度控制范围不同、配置权限不同、设计目标不同
#mermaid-svg-N34EyYxSUvc9jPeC{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-N34EyYxSUvc9jPeC .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-N34EyYxSUvc9jPeC .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-N34EyYxSUvc9jPeC .error-icon{fill:#552222;}#mermaid-svg-N34EyYxSUvc9jPeC .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-N34EyYxSUvc9jPeC .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-N34EyYxSUvc9jPeC .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-N34EyYxSUvc9jPeC .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-N34EyYxSUvc9jPeC .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-N34EyYxSUvc9jPeC .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-N34EyYxSUvc9jPeC .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-N34EyYxSUvc9jPeC .marker{fill:#333333;stroke:#333333;}#mermaid-svg-N34EyYxSUvc9jPeC .marker.cross{stroke:#333333;}#mermaid-svg-N34EyYxSUvc9jPeC svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-N34EyYxSUvc9jPeC p{margin:0;}#mermaid-svg-N34EyYxSUvc9jPeC .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-N34EyYxSUvc9jPeC .cluster-label text{fill:#333;}#mermaid-svg-N34EyYxSUvc9jPeC .cluster-label span{color:#333;}#mermaid-svg-N34EyYxSUvc9jPeC .cluster-label span p{background-color:transparent;}#mermaid-svg-N34EyYxSUvc9jPeC .label text,#mermaid-svg-N34EyYxSUvc9jPeC span{fill:#333;color:#333;}#mermaid-svg-N34EyYxSUvc9jPeC .node rect,#mermaid-svg-N34EyYxSUvc9jPeC .node circle,#mermaid-svg-N34EyYxSUvc9jPeC .node ellipse,#mermaid-svg-N34EyYxSUvc9jPeC .node polygon,#mermaid-svg-N34EyYxSUvc9jPeC .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-N34EyYxSUvc9jPeC .rough-node .label text,#mermaid-svg-N34EyYxSUvc9jPeC .node .label text,#mermaid-svg-N34EyYxSUvc9jPeC .image-shape .label,#mermaid-svg-N34EyYxSUvc9jPeC .icon-shape .label{text-anchor:middle;}#mermaid-svg-N34EyYxSUvc9jPeC .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-N34EyYxSUvc9jPeC .rough-node .label,#mermaid-svg-N34EyYxSUvc9jPeC .node .label,#mermaid-svg-N34EyYxSUvc9jPeC .image-shape .label,#mermaid-svg-N34EyYxSUvc9jPeC .icon-shape .label{text-align:center;}#mermaid-svg-N34EyYxSUvc9jPeC .node.clickable{cursor:pointer;}#mermaid-svg-N34EyYxSUvc9jPeC .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-N34EyYxSUvc9jPeC .arrowheadPath{fill:#333333;}#mermaid-svg-N34EyYxSUvc9jPeC .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-N34EyYxSUvc9jPeC .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-N34EyYxSUvc9jPeC .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-N34EyYxSUvc9jPeC .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-N34EyYxSUvc9jPeC .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-N34EyYxSUvc9jPeC .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-N34EyYxSUvc9jPeC .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-N34EyYxSUvc9jPeC .cluster text{fill:#333;}#mermaid-svg-N34EyYxSUvc9jPeC .cluster span{color:#333;}#mermaid-svg-N34EyYxSUvc9jPeC div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-N34EyYxSUvc9jPeC .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-N34EyYxSUvc9jPeC rect.text{fill:none;stroke-width:0;}#mermaid-svg-N34EyYxSUvc9jPeC .icon-shape,#mermaid-svg-N34EyYxSUvc9jPeC .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-N34EyYxSUvc9jPeC .icon-shape p,#mermaid-svg-N34EyYxSUvc9jPeC .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-N34EyYxSUvc9jPeC .icon-shape .label rect,#mermaid-svg-N34EyYxSUvc9jPeC .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-N34EyYxSUvc9jPeC .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-N34EyYxSUvc9jPeC .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-N34EyYxSUvc9jPeC :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 不同拦截层的作用范围
机房/数据中心
硬件防火墙

控制范围: 整个机房

谁配置: 网络管理员

粒度: 端口+协议+IP+应用层DPI
单台虚拟机内部
firewalld/iptables

控制范围: 本机

谁配置: root 用户

粒度: 端口+协议+IP
云平台/虚拟化平台
安全组

控制范围: 单台VM

谁配置: 云平台用户

粒度: 端口+协议+IP
网络ACL

控制范围: 整个子网

谁配置: 平台管理员

粒度: 端口+协议+子网

核心区别表

维度 软件防火墙(firewalld/iptables) 安全组(Security Group) 网络 ACL 硬件防火墙
控制范围 本机 单台虚拟机 整个子网 整个机房/网段
谁配置 机器管理员(root) 云平台用户(你) 平台/网络管理员 网络管理员
状态感知 有状态(自动放行回包) 有状态 无状态(出入都要配) 有状态
粒度 端口 + 协议 + IP 端口 + 协议 + IP 端口 + 协议 + IP + 子网 端口 + 协议 + IP + 应用层(DPI)
典型场景 防止本机被外部攻击 云上多租户隔离,"我的 VM 不能让别人的 VM 访问" 子网边界管控,"这个网段只允许访问数据库端口" 机房边界流量清洗,抗 DDoS

用大白话解释为什么需要这么多层

你租了一间公寓(虚拟机),公寓所在的楼(云平台/子网)和小区(机房)各有管理方。

  • 软件防火墙 = 你家里的防盗门:你自己决定给谁开门、锁哪些窗户。物业管不着。
  • 安全组 = 公寓楼的门禁:物业管,决定外人能不能进你这栋楼。你在手机上就能设置。
  • 网络 ACL = 小区的车辆道闸:保安队管,控制哪些车能进出小区。个人住户改不了,要找保安队。
  • 硬件防火墙 = 城市边界检查站:政府管,在大规模流量进来之前就做拦截和清洗。你感知不到它的存在。

你家的防盗门再牢固,也不代表你可以撤掉小区门禁------每一层管的是不同边界的安全。

它们会不会有冲突?

会。这也是排查时为什么要从近到远逐层排查

复制代码
你机器上的 iptables 放行了 → 安全组可能拦着 → ACL 可能拦着 → 硬件防火墙可能拦着

任何一层不放行,整个链路就断了。本次问题就是:本地防火墙和规则都对了,但安全组(平台层)拦了 TCP


4.6 出方向安全策略需要配置吗?

在实际开通需求中,一个很容易搞混的问题是:安全组的出方向规则要不要也配置?从节点用的是操作系统随机分配的端口,出方向会不会拦?

先纠正一个概念

出方向规则检查的是目标端口 (你要连到哪),不是源端口(你从哪出发)。从节点的随机源端口根本不会出现在出方向规则的匹配条件里:

复制代码
出方向规则:从节点 → 主节点:8080
            ↑            ↑
        源 IP(从节点)  目标端口(8080)← 规则只检查这个
        源端口(52341)← 规则不关心这个

有状态 vs 无状态,差异巨大
#mermaid-svg-raj22TvcHzpzHGxU{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-raj22TvcHzpzHGxU .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-raj22TvcHzpzHGxU .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-raj22TvcHzpzHGxU .error-icon{fill:#552222;}#mermaid-svg-raj22TvcHzpzHGxU .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-raj22TvcHzpzHGxU .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-raj22TvcHzpzHGxU .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-raj22TvcHzpzHGxU .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-raj22TvcHzpzHGxU .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-raj22TvcHzpzHGxU .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-raj22TvcHzpzHGxU .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-raj22TvcHzpzHGxU .marker{fill:#333333;stroke:#333333;}#mermaid-svg-raj22TvcHzpzHGxU .marker.cross{stroke:#333333;}#mermaid-svg-raj22TvcHzpzHGxU svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-raj22TvcHzpzHGxU p{margin:0;}#mermaid-svg-raj22TvcHzpzHGxU .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-raj22TvcHzpzHGxU .cluster-label text{fill:#333;}#mermaid-svg-raj22TvcHzpzHGxU .cluster-label span{color:#333;}#mermaid-svg-raj22TvcHzpzHGxU .cluster-label span p{background-color:transparent;}#mermaid-svg-raj22TvcHzpzHGxU .label text,#mermaid-svg-raj22TvcHzpzHGxU span{fill:#333;color:#333;}#mermaid-svg-raj22TvcHzpzHGxU .node rect,#mermaid-svg-raj22TvcHzpzHGxU .node circle,#mermaid-svg-raj22TvcHzpzHGxU .node ellipse,#mermaid-svg-raj22TvcHzpzHGxU .node polygon,#mermaid-svg-raj22TvcHzpzHGxU .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-raj22TvcHzpzHGxU .rough-node .label text,#mermaid-svg-raj22TvcHzpzHGxU .node .label text,#mermaid-svg-raj22TvcHzpzHGxU .image-shape .label,#mermaid-svg-raj22TvcHzpzHGxU .icon-shape .label{text-anchor:middle;}#mermaid-svg-raj22TvcHzpzHGxU .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-raj22TvcHzpzHGxU .rough-node .label,#mermaid-svg-raj22TvcHzpzHGxU .node .label,#mermaid-svg-raj22TvcHzpzHGxU .image-shape .label,#mermaid-svg-raj22TvcHzpzHGxU .icon-shape .label{text-align:center;}#mermaid-svg-raj22TvcHzpzHGxU .node.clickable{cursor:pointer;}#mermaid-svg-raj22TvcHzpzHGxU .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-raj22TvcHzpzHGxU .arrowheadPath{fill:#333333;}#mermaid-svg-raj22TvcHzpzHGxU .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-raj22TvcHzpzHGxU .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-raj22TvcHzpzHGxU .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-raj22TvcHzpzHGxU .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-raj22TvcHzpzHGxU .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-raj22TvcHzpzHGxU .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-raj22TvcHzpzHGxU .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-raj22TvcHzpzHGxU .cluster text{fill:#333;}#mermaid-svg-raj22TvcHzpzHGxU .cluster span{color:#333;}#mermaid-svg-raj22TvcHzpzHGxU div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-raj22TvcHzpzHGxU .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-raj22TvcHzpzHGxU rect.text{fill:none;stroke-width:0;}#mermaid-svg-raj22TvcHzpzHGxU .icon-shape,#mermaid-svg-raj22TvcHzpzHGxU .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-raj22TvcHzpzHGxU .icon-shape p,#mermaid-svg-raj22TvcHzpzHGxU .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-raj22TvcHzpzHGxU .icon-shape .label rect,#mermaid-svg-raj22TvcHzpzHGxU .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-raj22TvcHzpzHGxU .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-raj22TvcHzpzHGxU .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-raj22TvcHzpzHGxU :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 无状态安全组(如 AWS 网络 ACL)
从节点 → 主节点:8080
出方向规则:目标 8080 ✅
主节点回复 → 从节点:52341
入方向规则检查:目标 52341
❌ 52341 没有显式规则 → 被拦截!
有状态安全组(如 AWS 安全组、firewalld)
从节点 → 主节点:8080
规则检查:目标端口 8080 ✅
连接被记住(状态表)
主节点回复 → 从节点:52341
自动放行(匹配状态表)✅

三种典型场景

场景 出方向默认策略 需要做什么
有状态 + 默认放行出方向(最常见) 允许所有出方向 什么都不用做,agent 自动能连通
有状态 + 默认拒绝出方向 拒绝所有出方向 加一条规则:从节点 → 主节点:8080 TCP
无状态(如网络 ACL) 需双向显式配置 出方向:从节点 → 主节点:8080;入方向:主节点 → 从节点 1024-65535

为什么默认策略通常是"拦入不拦出"?

安全策略的首要职责是防外部入侵。内部机器主动发起的连接被认为是可信的,外部主动连进来的才需要严格审查。
#mermaid-svg-E6rMcEfTqKgcjb7M{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-E6rMcEfTqKgcjb7M .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-E6rMcEfTqKgcjb7M .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-E6rMcEfTqKgcjb7M .error-icon{fill:#552222;}#mermaid-svg-E6rMcEfTqKgcjb7M .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-E6rMcEfTqKgcjb7M .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-E6rMcEfTqKgcjb7M .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-E6rMcEfTqKgcjb7M .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-E6rMcEfTqKgcjb7M .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-E6rMcEfTqKgcjb7M .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-E6rMcEfTqKgcjb7M .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-E6rMcEfTqKgcjb7M .marker{fill:#333333;stroke:#333333;}#mermaid-svg-E6rMcEfTqKgcjb7M .marker.cross{stroke:#333333;}#mermaid-svg-E6rMcEfTqKgcjb7M svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-E6rMcEfTqKgcjb7M p{margin:0;}#mermaid-svg-E6rMcEfTqKgcjb7M .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-E6rMcEfTqKgcjb7M .cluster-label text{fill:#333;}#mermaid-svg-E6rMcEfTqKgcjb7M .cluster-label span{color:#333;}#mermaid-svg-E6rMcEfTqKgcjb7M .cluster-label span p{background-color:transparent;}#mermaid-svg-E6rMcEfTqKgcjb7M .label text,#mermaid-svg-E6rMcEfTqKgcjb7M span{fill:#333;color:#333;}#mermaid-svg-E6rMcEfTqKgcjb7M .node rect,#mermaid-svg-E6rMcEfTqKgcjb7M .node circle,#mermaid-svg-E6rMcEfTqKgcjb7M .node ellipse,#mermaid-svg-E6rMcEfTqKgcjb7M .node polygon,#mermaid-svg-E6rMcEfTqKgcjb7M .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-E6rMcEfTqKgcjb7M .rough-node .label text,#mermaid-svg-E6rMcEfTqKgcjb7M .node .label text,#mermaid-svg-E6rMcEfTqKgcjb7M .image-shape .label,#mermaid-svg-E6rMcEfTqKgcjb7M .icon-shape .label{text-anchor:middle;}#mermaid-svg-E6rMcEfTqKgcjb7M .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-E6rMcEfTqKgcjb7M .rough-node .label,#mermaid-svg-E6rMcEfTqKgcjb7M .node .label,#mermaid-svg-E6rMcEfTqKgcjb7M .image-shape .label,#mermaid-svg-E6rMcEfTqKgcjb7M .icon-shape .label{text-align:center;}#mermaid-svg-E6rMcEfTqKgcjb7M .node.clickable{cursor:pointer;}#mermaid-svg-E6rMcEfTqKgcjb7M .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-E6rMcEfTqKgcjb7M .arrowheadPath{fill:#333333;}#mermaid-svg-E6rMcEfTqKgcjb7M .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-E6rMcEfTqKgcjb7M .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-E6rMcEfTqKgcjb7M .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-E6rMcEfTqKgcjb7M .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-E6rMcEfTqKgcjb7M .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-E6rMcEfTqKgcjb7M .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-E6rMcEfTqKgcjb7M .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-E6rMcEfTqKgcjb7M .cluster text{fill:#333;}#mermaid-svg-E6rMcEfTqKgcjb7M .cluster span{color:#333;}#mermaid-svg-E6rMcEfTqKgcjb7M div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-E6rMcEfTqKgcjb7M .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-E6rMcEfTqKgcjb7M rect.text{fill:none;stroke-width:0;}#mermaid-svg-E6rMcEfTqKgcjb7M .icon-shape,#mermaid-svg-E6rMcEfTqKgcjb7M .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-E6rMcEfTqKgcjb7M .icon-shape p,#mermaid-svg-E6rMcEfTqKgcjb7M .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-E6rMcEfTqKgcjb7M .icon-shape .label rect,#mermaid-svg-E6rMcEfTqKgcjb7M .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-E6rMcEfTqKgcjb7M .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-E6rMcEfTqKgcjb7M .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-E6rMcEfTqKgcjb7M :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 外部世界
受信任的内部网络
出方向:默认放行 ✅

相信自己人发起的请求
入方向:默认拒绝 ❌

防外部入侵
从节点(内部机器)
潜在攻击者

在节点上的iptables规则也说明了这一点

txt 复制代码
# OUTPUT 链:只有 3 条规则,最后 policy 是 ACCEPT(默认放行)
Chain OUTPUT (policy ACCEPT ...)  

# INPUT 链:7 条规则,最后是 REJECT(默认拒绝)
Chain INPUT (policy ACCEPT ...) → 但第 7 条 REJECT 兜底

三种典型策略对比:

出方向默认 入方向默认 谁用
宽松型 放行 拒绝 个人电脑、内部开发服务器
标准企业型 放行 拒绝 大多数公司内网
严格型(金融/军工) 拒绝 拒绝 高安全等级环境,出/入都白名单制

五、完整排查方法论

综合上面所有的层级,排查两台机器之间网络不通的问题,应该按照从近到远、从内到外的顺序:
#mermaid-svg-jYNeWKrzO2bd1Jii{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-jYNeWKrzO2bd1Jii .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-jYNeWKrzO2bd1Jii .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-jYNeWKrzO2bd1Jii .error-icon{fill:#552222;}#mermaid-svg-jYNeWKrzO2bd1Jii .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-jYNeWKrzO2bd1Jii .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-jYNeWKrzO2bd1Jii .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-jYNeWKrzO2bd1Jii .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-jYNeWKrzO2bd1Jii .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-jYNeWKrzO2bd1Jii .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-jYNeWKrzO2bd1Jii .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-jYNeWKrzO2bd1Jii .marker{fill:#333333;stroke:#333333;}#mermaid-svg-jYNeWKrzO2bd1Jii .marker.cross{stroke:#333333;}#mermaid-svg-jYNeWKrzO2bd1Jii svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-jYNeWKrzO2bd1Jii p{margin:0;}#mermaid-svg-jYNeWKrzO2bd1Jii .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-jYNeWKrzO2bd1Jii .cluster-label text{fill:#333;}#mermaid-svg-jYNeWKrzO2bd1Jii .cluster-label span{color:#333;}#mermaid-svg-jYNeWKrzO2bd1Jii .cluster-label span p{background-color:transparent;}#mermaid-svg-jYNeWKrzO2bd1Jii .label text,#mermaid-svg-jYNeWKrzO2bd1Jii span{fill:#333;color:#333;}#mermaid-svg-jYNeWKrzO2bd1Jii .node rect,#mermaid-svg-jYNeWKrzO2bd1Jii .node circle,#mermaid-svg-jYNeWKrzO2bd1Jii .node ellipse,#mermaid-svg-jYNeWKrzO2bd1Jii .node polygon,#mermaid-svg-jYNeWKrzO2bd1Jii .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-jYNeWKrzO2bd1Jii .rough-node .label text,#mermaid-svg-jYNeWKrzO2bd1Jii .node .label text,#mermaid-svg-jYNeWKrzO2bd1Jii .image-shape .label,#mermaid-svg-jYNeWKrzO2bd1Jii .icon-shape .label{text-anchor:middle;}#mermaid-svg-jYNeWKrzO2bd1Jii .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-jYNeWKrzO2bd1Jii .rough-node .label,#mermaid-svg-jYNeWKrzO2bd1Jii .node .label,#mermaid-svg-jYNeWKrzO2bd1Jii .image-shape .label,#mermaid-svg-jYNeWKrzO2bd1Jii .icon-shape .label{text-align:center;}#mermaid-svg-jYNeWKrzO2bd1Jii .node.clickable{cursor:pointer;}#mermaid-svg-jYNeWKrzO2bd1Jii .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-jYNeWKrzO2bd1Jii .arrowheadPath{fill:#333333;}#mermaid-svg-jYNeWKrzO2bd1Jii .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-jYNeWKrzO2bd1Jii .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-jYNeWKrzO2bd1Jii .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-jYNeWKrzO2bd1Jii .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-jYNeWKrzO2bd1Jii .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-jYNeWKrzO2bd1Jii .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-jYNeWKrzO2bd1Jii .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-jYNeWKrzO2bd1Jii .cluster text{fill:#333;}#mermaid-svg-jYNeWKrzO2bd1Jii .cluster span{color:#333;}#mermaid-svg-jYNeWKrzO2bd1Jii div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-jYNeWKrzO2bd1Jii .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-jYNeWKrzO2bd1Jii rect.text{fill:none;stroke-width:0;}#mermaid-svg-jYNeWKrzO2bd1Jii .icon-shape,#mermaid-svg-jYNeWKrzO2bd1Jii .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-jYNeWKrzO2bd1Jii .icon-shape p,#mermaid-svg-jYNeWKrzO2bd1Jii .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-jYNeWKrzO2bd1Jii .icon-shape .label rect,#mermaid-svg-jYNeWKrzO2bd1Jii .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-jYNeWKrzO2bd1Jii .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-jYNeWKrzO2bd1Jii .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-jYNeWKrzO2bd1Jii :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 否





通了
还是不通
❓ 两台机器网络不通
第一层:本地防火墙

systemctl status firewalld

firewall-cmd --list-ports
规则正确?
修复本地防火墙规则
第二层:确认对端端口是否监听

ss -lntp | grep 端口号
端口在监听?
启动目标服务
第三层:平台安全策略

检查虚拟化平台/云平台

安全组、网络ACL
平台策略放行了?
修改安全组/ACL 规则
第四层:联系网络管理员

排查硬件防火墙/路由器
重新测试连通性
✅ 解决

核心原则

  1. 先查自己能控制的(本地防火墙、服务端口)
  2. 再查平台控制的(安全组、ACL)
  3. 最后查别人控制的(网络设备、硬件防火墙)

六、本次问题速览

维度 内容
现象 从节点 ping 主节点通,但 curl 下载文件和 SSH 连接均超时
排除了 Jenkins 端口配置、本地 firewalld 规则、网卡未绑定 zone(这些都修了但没用)
根因 麒麟虚拟化平台的网络策略拦截了 TCP 协议(ICMP/ping 被放行了)
解决方向 去麒麟平台管理后台,找到两台虚拟机之间的安全策略,放开 TCP 协议或指定端口
关键教训 ping 通不等于能传数据;排查要按"本地 → 平台 → 硬件"逐层推进

七、命令速查表

前提 :以下命令默认在问题机器上执行。<IP> 替换为目标机器的 IP,<PORT> 替换为端口号。

7.1 判断两台机器能不能通信

目的 命令 说明
看能不能 ping 通(ICMP) ping <IP> 只测网络层可达,不等于能传数据
看 TCP 端口是否可达 nc -zv <IP> <PORT> -w 3 最常用的连通性测试,3秒超时
测 HTTP 服务是否可达 curl -v http://<IP>:<PORT>/ 能测试 Web 服务是否正常响应
看路由经过哪些节点 traceroute <IP> 数据包经过的每一跳,定位在哪一跳断了

7.2 查看防火墙状态

目的 命令 说明
看防火墙是否在运行 systemctl status firewalld 显示 active (running) 就是在跑
看当前放行了哪些端口 firewall-cmd --list-ports 空输出 = 什么都没放行
看当前放行了哪些服务 firewall-cmd --list-services 如 ssh、http 等预定义服务
看完整的防火墙配置 firewall-cmd --list-all 包含 zone、端口、服务、网卡绑定等所有信息
看网卡绑定到哪个 zone firewall-cmd --get-active-zones 本次踩坑的关键命令

7.3 修改防火墙规则

目的 命令 说明
开放端口(临时,重启失效) firewall-cmd --add-port=<PORT>/tcp 测试时临时开放用
开放端口(永久) firewall-cmd --add-port=<PORT>/tcp --permanent --permanent 才持久化
重载规则使其生效 firewall-cmd --reload 修改永久规则后必须执行这条
绑定网卡到 zone firewall-cmd --zone=public --add-interface=<网卡名> --permanent 容易忽略的一步
关闭防火墙(仅测试用!) systemctl stop firewalld 仅排查时临时用,测完记得开回来

7.4 查看底层 iptables 规则

目的 命令 说明
看 INPUT 链(入站规则) iptables -L INPUT -n -v --line-numbers 带行号、带流量统计
看 OUTPUT 链(出站规则) iptables -L OUTPUT -n -v --line-numbers 一般 OUTPUT 默认放行
看特定端口的规则 `iptables -L -n -v grep `
看子链内部规则 iptables -L <子链名> -n -v --line-numbers IN_public_allowINPUT_ZONES

pkts 列很关键 :如果一条 ACCEPT 规则的 pkts=0,说明数据包根本没走到这条规则------可能是网卡没绑定 zone,或者流量在更上层被拦截了。

7.5 查看端口监听情况

目的 命令 说明
看哪些端口在监听 ss -lntp 比老旧的 netstat 更快
只看某个服务的端口 `ss -lntp grep <进程名>`
看监听的 IP 范围 关注 0.0.0.0:PORT vs 127.0.0.1:PORT 0.0.0.0 = 对外网开放,127.0.0.1 = 仅本机访问

7.6 系统安全模块检查

目的 命令 说明
SELinux 状态 getenforce Enforcing = 开启(可能拦截网络请求),Disabled = 关闭
麒麟安全模块 systemctl status kysec 麒麟系统特有的安全模块

7.7 网络基础信息

目的 命令 说明
看本机 IP `ip addr grep "inet "`
看 ARP 表 arp -n 确认两台机器是否在同一局域网(能看到对方的 MAC 地址就是同网段)
看路由表 ip route 确认默认网关等路由配置
DNS 解析测试 nslookup <域名>ping <域名> 确认域名是否能正确解析到 IP

八、总结

这次排查踩了三个坑:

  1. 网卡没绑定 zone------firewalld 规则加了但不生效,因为网卡没挂到 zone 上
  2. 被"ping 通"误导------ping 通只能证明 ICMP 协议可达,不代表 TCP 协议能传数据
  3. 忽略了平台层------排查完本地防火墙就蒙了,没第一时间想到虚拟化平台还有自己的安全策略

记住这张图就够了:
#mermaid-svg-evV5Or6wapfac3KT{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-evV5Or6wapfac3KT .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-evV5Or6wapfac3KT .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-evV5Or6wapfac3KT .error-icon{fill:#552222;}#mermaid-svg-evV5Or6wapfac3KT .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-evV5Or6wapfac3KT .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-evV5Or6wapfac3KT .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-evV5Or6wapfac3KT .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-evV5Or6wapfac3KT .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-evV5Or6wapfac3KT .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-evV5Or6wapfac3KT .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-evV5Or6wapfac3KT .marker{fill:#333333;stroke:#333333;}#mermaid-svg-evV5Or6wapfac3KT .marker.cross{stroke:#333333;}#mermaid-svg-evV5Or6wapfac3KT svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-evV5Or6wapfac3KT p{margin:0;}#mermaid-svg-evV5Or6wapfac3KT .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-evV5Or6wapfac3KT .cluster-label text{fill:#333;}#mermaid-svg-evV5Or6wapfac3KT .cluster-label span{color:#333;}#mermaid-svg-evV5Or6wapfac3KT .cluster-label span p{background-color:transparent;}#mermaid-svg-evV5Or6wapfac3KT .label text,#mermaid-svg-evV5Or6wapfac3KT span{fill:#333;color:#333;}#mermaid-svg-evV5Or6wapfac3KT .node rect,#mermaid-svg-evV5Or6wapfac3KT .node circle,#mermaid-svg-evV5Or6wapfac3KT .node ellipse,#mermaid-svg-evV5Or6wapfac3KT .node polygon,#mermaid-svg-evV5Or6wapfac3KT .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-evV5Or6wapfac3KT .rough-node .label text,#mermaid-svg-evV5Or6wapfac3KT .node .label text,#mermaid-svg-evV5Or6wapfac3KT .image-shape .label,#mermaid-svg-evV5Or6wapfac3KT .icon-shape .label{text-anchor:middle;}#mermaid-svg-evV5Or6wapfac3KT .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-evV5Or6wapfac3KT .rough-node .label,#mermaid-svg-evV5Or6wapfac3KT .node .label,#mermaid-svg-evV5Or6wapfac3KT .image-shape .label,#mermaid-svg-evV5Or6wapfac3KT .icon-shape .label{text-align:center;}#mermaid-svg-evV5Or6wapfac3KT .node.clickable{cursor:pointer;}#mermaid-svg-evV5Or6wapfac3KT .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-evV5Or6wapfac3KT .arrowheadPath{fill:#333333;}#mermaid-svg-evV5Or6wapfac3KT .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-evV5Or6wapfac3KT .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-evV5Or6wapfac3KT .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-evV5Or6wapfac3KT .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-evV5Or6wapfac3KT .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-evV5Or6wapfac3KT .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-evV5Or6wapfac3KT .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-evV5Or6wapfac3KT .cluster text{fill:#333;}#mermaid-svg-evV5Or6wapfac3KT .cluster span{color:#333;}#mermaid-svg-evV5Or6wapfac3KT div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-evV5Or6wapfac3KT .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-evV5Or6wapfac3KT rect.text{fill:none;stroke-width:0;}#mermaid-svg-evV5Or6wapfac3KT .icon-shape,#mermaid-svg-evV5Or6wapfac3KT .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-evV5Or6wapfac3KT .icon-shape p,#mermaid-svg-evV5Or6wapfac3KT .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-evV5Or6wapfac3KT .icon-shape .label rect,#mermaid-svg-evV5Or6wapfac3KT .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-evV5Or6wapfac3KT .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-evV5Or6wapfac3KT .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-evV5Or6wapfac3KT :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 排查顺序: 近→远
排查顺序: 内→外
本地防火墙

(你能控制)
平台安全策略

(去后台改)
硬件防火墙

(找管理员)

从近到远,从内到外,逐层排除,不跳步。

相关推荐
数聚天成DeepSData1 小时前
外贸海关进出口数据去哪免费下载?从统计到明细的查找指南
linux·服务器·开发语言·前端·网络·人工智能·自然语言处理
网络安全零基础教程2 小时前
零基础转行网安,前两个月具体该学什么工具
网络·学习·安全·web安全·网络安全
路由侠内网穿透.2 小时前
本地部署开源日志收集系统 Log Bull 并实现外部访问
运维·服务器·网络·数据库·开源
神仙别闹2 小时前
基于C++设计一个 P2P 聊天软件
网络·网络协议·p2p
三川6983 小时前
深入浅出SSD 11:SSD测试
网络
ljj2535575051__3 小时前
LVS(Linux virual server)
服务器·网络·lvs
映翰通朱工3 小时前
从0到1:EC942边缘计算机用Python实现Modbus TCP采集+MQTT上云全记录(附踩坑实录)
网络·python·网络协议·tcp/ip·二次开发·映翰通
发量惊人的中年网工5 小时前
自建清洗中心VS托管安全服务:2026年企业DDoS防护ROI深度测算
网络·ddos
Yang961113 小时前
光缆故障快速排查实操技巧,鼎讯信通 Smart-S3 OTDR 一线使用心得
网络