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 是什么? pkts 是 packets (数据包)的缩写,表示"匹配到这条规则的累计数据包数量"。每有一个数据包命中某条 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_allow、INPUT_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;} 排查顺序: 近→远
排查顺序: 内→外
本地防火墙

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

(去后台改)
硬件防火墙

(找管理员)

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

相关推荐
Multipath7126 分钟前
Ku保底,Ka提速— 双频卫星聚合,打造应急通信“不断线”保底链路
网络·5g·安全·智能路由器·实时音视频
圆圆讲门店9 小时前
挑选同城获客服务机构时需要考量的核心因素都有哪些?
大数据·网络·人工智能·python
制造业的搬运工10 小时前
扫地机器人主板 PCB 选型:深圳线路板与普通板的 8 项工艺指标对比与参数清单
网络·科技·制造·科普·pcb工艺
XiaoMaqqqq12 小时前
目前知名的IP驱动产业新场景新工具有哪些
网络·python·网络协议·tcp/ip
李永奉12 小时前
中科蓝讯SDK开发-BT897X、BT891X、AB573X、AB572X 系列 触摸按键提示音功能实现
网络·单片机·嵌入式硬件·mcu·物联网
ShineWinsu13 小时前
对于ProtoBuffer:ProtoBuffer的介绍以及安装
linux·网络·google·协议·序列化·反序列化·protobuffer
Eddyp13 小时前
避开溢价!艾默生 TREX2 手操器省钱选型攻略
网络·其他·百度·微信·微信公众平台·新浪微博
FlightYe13 小时前
视界原理之2D视频(二):视频文件里有什么
android·linux·网络·c++·ffmpeg·音视频·aac
2601_9672127215 小时前
国际品质电源轨道系统供应商技术评估维度
大数据·网络·经验分享
acrel715 小时前
化工企业能源管理体系下智能化技术实践与探索
网络·人工智能