首页 › tech › 笔记本上搭核心网:故障复现记

笔记本上搭核心网:故障复现记

概述:核心网运维最尴尬的一件事是想练手却没处练——现网不敢动,商用测试床要立项要预算,新人的第一次实操往往就是凌晨的割接窗口。本文回答一个问题:能否用一台笔记本、零预算,复刻一张5G核心网,把现网最经典的几类故障搬进来反复演练?答案是四个开源项目:free5gc、Open5GS、UERANSIM、Wireshark。本文以 free5gc 与 Open5GS 官方仓库/文档及 3GPP 相关规范(TS 24.501、29.244、23.501)为锚定来源,给出从搭网到故障注入的完整练兵路径。

目录

一、现网练不了兵,是运维这行的老尴尬

干了十几年核心网,我对一个事实深有体会:核心网运维的技能,九成是在深夜事故里逼出来的。带过的年轻工程师,成长路径几乎一模一样——前两年跟着看告警、抄命令,第一次独立处置就是凌晨两点的割接保障。练手机会?没有。现网是生产环境,没人敢让新人碰;商用协议测试床动辄百万级投入,各省就那么几套,排期比现网割接还紧。

代价在事故复盘里写得明明白白。2022年7月2日凌晨,日本KDDI在替换语音处理设备的割接中出事:注册话务激增叠加流量控制缺陷,故障像雪球一样滚过整个网络,语音、数据大面积中断。据KDDI官方调查报告和NHK等公开报道,波及用户以千万计,大部分区域语音业务持续异常约两天,全网完全恢复用了更久,事后被定性为影响日本通信史上罕见的大规模事故。近三年从东京到北美,多起全国级断网的复盘报告里,反复出现同一类结论:变更前的测试环境没有覆盖到这条路径。

环境问题不解决,练兵就是一句空话。好消息是,5GC标准化十年后,开源社区已经把“协议实现”这件事做平了:核心网的全部网元行为,都有高质量的开放代码可以跑在一台笔记本上。现网不敢动的故障,实验室里随便造。

二、开源四件套:各管一段

先把四个项目摆清楚,各有各的岗位,别装错位置:

项目 语言 定位 能力范围 存储依赖 典型搭档
free5gc Go 研究与教学导向的5GC 5GC全套SBA网元(AMF/SMF/UPF/NRF/UDM/AUSF/PCF等) MongoDB UERANSIM
Open5GS C 工程化双模核心网 5GC + EPC 双模 MongoDB(另有WebUI开户) UERANSIM/srsRAN
UERANSIM C++ UE与gNB纯软件仿真 空口与N2仿真,不含核心网功能 无 任一5GC
srsRAN Project C++ 真空口基站 gNB/CU-DU,支持O-RAN 7.2分流 无 USRP等SDR硬件+5GC

几句话点评:

本文的搭配建议:Open5GS 或 free5gc 二选一当核心网,UERANSIM 当无线侧,Wireshark 当眼睛。这也是开源社区事实上的标准实验组合——连现网厂家的研发团队,内部测试也常拿这套当沙盘。

三、半小时,把一张5G核心网立起来

硬件门槛低到离谱:一台4核8G的虚拟机(或笔记本装Ubuntu 22.04)足够跑全套。建议核心网和UERANSIM分两台虚拟机部署,中间隔一张NAT网卡——这样后面做链路故障注入才有“真的断”的感觉。

整体拓扑如下,这也是后面所有故障演练的战场:

flowchart TD
    UE["模拟UE<br/>UERANSIM"] -->|空口仿真| GNB["模拟gNB<br/>UERANSIM"]
    GNB -->|N2 NGAP| AMF["AMF<br/>注册与移动性"]
    AMF -->|N12 鉴权| AUSF["AUSF"]
    AMF -->|N8 签约| UDM["UDM"]
    AMF -->|N11 会话| SMF["SMF"]
    SMF -->|N7 策略| PCF["PCF"]
    SMF -->|N10 签约| UDM
    SMF -->|N4 PFCP| UPF["UPF<br/>用户面锚点"]
    UPF -->|N6| DN["数据网<br/>NAT出口"]
    AMF -->|服务注册| NRF["NRF"]
    SMF -->|服务发现| NRF

搭建步骤,以Open5GS为例(free5gc同理,官方文档都有逐步指引):

  1. 装核心网。Ubuntu下按官方文档走PPA最省事:sudo add-apt-repository ppa:open5gs/latest,然后 sudo apt install open5gs。装完是一组独立服务:amfd、smfd、upfd、nrfd……每个对应一个网元。
  2. 装MongoDB和WebUI,在WebUI里开户一个测试用户:填IMSI、K、OPc三件套。这三个值等下要原样抄进UE配置——鉴权五元组对不上,注册第一步就会死在AUSF门口,这是新手第一坑。
  3. 编译UERANSIM,改两个YAML:gNB配置里填AMF的IP、PLMN和TAC;UE配置里填IMSI/K/OPc和DNN(默认internet)。
  4. 按序点亮:先起NRF和AMF,再跑UERANSIM的gNB——观察AMF日志里NG Setup成功,这是N2通了的标志;然后起UE,看Registration Request一路走到Registration Accept;最后PDU Session Establishment Complete,UE拿到地址,ping通对端,全网拉通。

验收标准就一句话:UE能ping出去。到这里你拥有了人生第一张私有的5G核心网。抓包建议全程开着,Wireshark的显示过滤串后面要用:ngap、nas-5gs、pfcp、http2(SBI信令走HTTP/2)。看信令是核心网运维的基本功,实验室里每一帧都值得逐条读懂。

四、四个经典故障,搬进笔记本

网立起来只是及格线。真正的价值在下面:把现网反复杀伤的四类故障注入进去,练到形成条件反射。

场景一:注册风暴——AMF如何体面地认怂

复现方法:写个循环脚本,让UERANSIM并发拉起几十上百个UE,同时把周期性注册间隔调小,人为制造信令洪峰。

你会看到什么:AMF先是注册成功率掉头向下,接着日志里出现NAS拒绝,原因值#22(Congestion),拒绝消息里带着退避计时器T3346——UE收到后必须安静到计时器超时才能再试。再往下压,gNB侧会收到NGAP的Overload Start消息:AMF在告诉接入网“我顶不住了,少放人进来”。

这一幕对应的现网剧本:KDDI事故的引擎正是注册风暴——割接后全网终端重新注册,信令洪峰压垮控制面,再扩散到用户面。3GPP在TS 24.501里定义了NAS级过载控制(T3346退避),在TS 38.413里定义了NGAP级过载(Overload Start/Stop),两层闸门就是为了这一天设计的。过载时先拒谁、拒多少、退避多长,标准允许多种实现,具体行为以各厂家官方文档为准——但“要有闸门、闸门要分级”这件事,标准是强制表态的。

练兵要点:观察你的AMF在多大压力下开始拒绝,拒绝的顺序是什么,gNB侧如何配合。把数值记下来,你就理解了现网割接方案里“灰度放量、分片升档”为什么是铁律——放量曲线要坡度,不能跳崖。

场景二:N4心跳一断,计费先瞎

复现方法:核心网全绿、用户正打着流量的时候,在宿主机上敲一条iptables,把UDP 8805端口(PFCP注册端口)双向丢弃,模拟SMF与UPF之间的N4链路中断:

sudo iptables -A INPUT  -p udp --dport 8805 -j DROP
sudo iptables -A OUTPUT -p udp --dport 8805 -j DROP

你会看到什么:世界安静了几秒——用户流量居然还在跑。然后SMF日志开始报PFCP Heartbeat Request无响应,重试若干次后把UPF标记为不可用。此后新会话建立失败;更要命的是存量会话的用量报告停了,计费系统对这个UPF下的所有流量瞬间失明。

这一幕对应的现网剧本:用户面照转、计费先瞎,是N4故障最阴险的地方。控制面断了,业务表面无恙,故障发现靠的往往不是告警而是账务对账——等计费部门找上门,故障已经烧了好几个小时。TS 29.244定义的PFCP心跳机制就是为此而设,心跳间隔与重试次数的取值,直接决定“误判摘除”与“带病运行”之间的天平。

练兵要点:记录从断链到UPF被摘除经历了几个心跳周期;再想一层——你的现网监控里,有没有一条告警能在第一分钟就抓住“PFCP会话报告断流”?

场景三:NRF失踪——缓存在裸奔

复现方法:直接停掉NRF进程(或封掉它的SBI端口,Open5GS默认7777)。

你会看到什么:先是什么都不发生。已注册的UE照常上网,已建立的会话纹丝不动。很多人第一次做这个实验都会愣住:NRF全挂了,网络怎么没瘫? 答案在SBA的设计里:TS 23.501允许消费网元缓存服务发现结果,NRF返回的NF Profile自带有效期,有效期内网元直接用缓存互访,不走NRF。缓存在替NRF裸奔。然后,在缓存到期、恰好又有新业务要发现的时刻,雪崩才开始:新PDU会话建立失败,AMF与SMF之间查不到可用实例,日志里刷满发现失败。

练兵要点:量出你这套网从“NRF死”到“业务开始坏”的真实间隔,这就是SBA网络的“缓冲垫厚度”。现网启示有两条:NRF必须部署成Pool/Set级高可用;监控要看“缓存剩余有效期分布”,而不是等发现失败告警——等到告警响,缓冲垫已经磨穿了。

场景四:DNS配错一行,网元互相失联

复现方法:把核心网内部DNS指到一台自建dnsmasq,跑通后故意改坏一条记录——比如让SMF解析UPF的主机名返回空,或者干脆停掉resolver。

你会看到什么:注册流程开始变得极慢,UE侧表现为超时重试;SMF日志里是解析失败或解析超时。注意关键现象:不是报错,是慢。DNS故障最典型的伪装是“网络性能劣化”,一线最容易按“拥塞”方向去查,白白烧掉黄金处置时间。

这一幕对应的现网剧本:EPC/互操作世界里DNS是隐形地基——APN解析、TAI-FQDN、漫游路由查询(机制见TS 29.303),任何一个解析环节数秒的超时,乘以全网用户就是一场事故。运营商内部DNS出问题引发大面积业务劣化,在历年故障通报里从来不缺席。4/5G互操作(N26接口、EPS Fallback)对DNS的依赖比纯5G场景更深,这也是我推荐用Open5GS练这套场景的原因。

练兵要点:先练“识别”——看到注册建立时延抬升而信令内容正常,第一反应应该有一项是查DNS;再练“兜底”——看看你的配置里resolver配了几个、超时多少、能否降级。

五、从练兵场到现网:演练要有闭环

单点复现只是入门,练兵要成体系。我给团队定过一个规矩:每月一个“故障日”,从现网事故库里选题,进实验室盲演。流程如下:

flowchart TD
    A["月初选题<br/>从事故库挑场景"] --> B["注入故障<br/>iptables或停进程"]
    B --> C["盲演定位<br/>只看告警与日志"]
    C --> D{"10分钟内<br/>给出第一假设?"}
    D -->|是| E["验证根因<br/>抓包对时间轴"]
    D -->|否| F["记卡点<br/>回炉补课"]
    E --> G["复盘归档<br/>更新SOP"]
    F --> G
    G --> A

盲演的意思是:处置人只知道“网络坏了”,不知道注入了什么,只许看告警、日志和抓包。这是对现网值班场景的最大还原。每季度把四个场景升级一个难度,例如叠加故障(N4断链同时来一波注册风暴)或加时间压力。

四个场景的标准演练清单,拿去就能用:

场景 注入方法 关键观测点 对应规范
注册风暴 脚本并发拉起大量UE NAS拒绝原因#22、T3346、NGAP Overload Start TS 24.501 / TS 38.413
N4断链 iptables封UDP 8805 PFCP心跳超时、UPF摘除耗时、用量报告断流 TS 29.244
NRF失联 停进程或封SBI端口 缓存兜底时长、到期后的发现失败 TS 23.501
DNS失联 停resolver或改坏记录 注册建立时延、解析超时重试 TS 29.303

考核标准定成行为化的:10分钟内给出第一假设并说出验证路径。比如N4断链场景的满分答案应该是三句话:用户面在跑控制面异常,先查N4;抓包过滤pfcp看心跳有没有去有回;顺手确认计费侧是否已受影响、要不要提前通报。能把“顺手通报计费”说出来,说明演练真正长成了意识。

复盘产物只有一份:更新后的SOP。每次演练的卡点,就是SOP该加的那一行。半年之后,这份SOP会比任何厂家培训都贴合你自己的网络。

六、实验室的天花板:哪些坑复现不了

最后泼三盆冷水,免得练兵练出错觉。

第一,容量差着数量级。笔记本上几十个UE就是极限,现网AMF面对的是百万级注册用户。过载控制的“阈值行为”可以理解机理,绝对数值没有参考意义。容量类问题还是要靠厂家实验室和现网灰度,实验室解决的是“行为学”,不是“容量学”。

第二,空口是假的。UERANSIM没有无线信道,不存在弱覆盖、干扰、切换测量这些无线世界的烦恼。想碰真空口,上srsRAN加SDR,但那是另一个维度的投入,而且依然替代不了真实商用终端的芯片行为——现网排查里大量怪问题(终端不回Registration Complete、鉴权向量兼容性)只有真机才能触发。

第三,代码不等于产品。开源实现是理解协议的最佳教具,但厂家设备在可靠性、运维接口、容量调度上有大量规范之外的工程化设计,这部分实验室里看不到。开源代码以学习研究为主,任何想直接用于生产环境的想法都应先做完整评估。

天花板之上,这套实验室的价值依然是无可替代的:它把“事故”从一条新闻变成了你亲手摸过的一条条信令。KDDI那种级别的雪崩,没人希望在现场第二次见到——但每个核心网工程师都应该在笔记本上见过一次。见过了,真轮到你值那班夜岗时,手不会抖。

参考来源

  1. free5gc 官方仓库 — 本文主轴来源之一:Go语言开源5GC,网元组成与部署方式以官方README/文档为准
  2. Open5GS 官方文档 — 本文主轴来源之一:双模核心网安装、配置与WebUI开户的官方指引
  3. UERANSIM 官方仓库 — 开源UE/gNB仿真器,实验组合的无线侧
  4. 3GPP TS 29.244(PFCP规范) — N4接口PFCP心跳与会话报告机制(ETSI交付页)
  5. 3GPP TS 24.501(5G NAS协议) — NAS过载拒绝原因值与T3346退避计时器定义
  6. 2022年KDDI通信障害(Wikipedia条目) — 事故时间线整理,转述KDDI官方调查报告要点,具体数据以官方报告为准

本文由「51学通信」技术团队出品。51学通信由通信行业18年老兵爱卫生(微信ID: gprshome201101)维护,聚焦5G/6G核心网、3GPP标准解读、通信前沿技术深度分析。 出版作品有《5G核心网原理与实践》《IMS原理与实践》等4本通信专业书籍。知识星球「51学通信」提供深度技术答疑和行业洞察。

[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。

51学通信知识星球海报-扫码加入