现网凌晨三点,没人敢重启一台AMF。可排障这门手艺,恰恰只在“敢按按钮”的环境里才练得出来——按错了会怎样?信令在哪一步断的?换组参数是什么效果?这些问题的答案,在现网永远只能靠猜,在实验床上却是几分钟能验证的事。今天这篇,讲讲怎么用三件开源软件,在一台笔记本上养出一张能注册、能建会话、能跑数据的5G SA试验网,以及怎么把它变成运维团队真正用得上的练兵场。
干了十八年核心网,我对现网排障最大的感受是三个字:不敢动。
第一不敢动,是因为故障窗口短。用户投诉上来了,领导在群里催,你只有几分钟到几十分钟的处置时间,任何“试试看”的操作都可能让故障面扩大。于是排障变成了一门“读”的手艺——读日志、读告警、读话单,靠经验脑补信令怎么走,但很少有机会真正“做”一遍验证。
第二不敢动,是因为环境不可复现。用户侧一千种终端、一千种卡状态,你复现不出那一通失败的注册。根因定位八分靠推理、两分靠运气。
第三不敢动,是因为人才培养没有沙盘。新来的工程师对着几万条网元日志,最缺的不是知识,而是“完整的因果体验”:我改了这个参数,UE那一端到底会看到什么?现网永远不会给你做这个实验的机会。
这三个“不敢动”,指向同一个解法:一张可以随便折腾的实验网。2G那个年代,想练手得蹭实验室的真设备,机会稀缺;而今天,开源社区已经把一张完整的5G SA核心网装进了普通笔记本。这件事的技术含量不高,但运维价值被严重低估了——它把排障从“推理题”变成“可重复做的实验题”。
本文的解读主轴是 Open5GS 官方文档(open5gs.org/open5gs/docs) 和 3GPP TS 24.501(5G NAS协议,Stage 3):文中涉及的流程、消息与错误码,属于可验证的标准与文档事实;具体的部署手法和排障案例,则来自我个人的实战复盘,属于经验观点,供参考。
搭一套能跑通端到端流程的5G SA试验网,核心思路是“核心网用一个项目,RAN用模拟器,想上真空口再加SDR”。四件主流开源货,分工如下:
| 项目 | 角色 | 语言 | 许可证 | 一句话定位 |
|---|---|---|---|---|
| Open5GS | 5GC/EPC核心网 | C | AGPL-3.0 | 模块化NF齐全,EPC与5GC一套代码覆盖,文档完善,最接近“能扛生产”的开源核心网 |
| free5GC | 5GC核心网 | Go | Apache-2.0 | 学术团队出品,跟R15/R16特性比较快,适合研究型场景 |
| UERANSIM | 模拟gNB+模拟UE | C++ | GPLv3 | 纯软件模拟RAN和终端,不依赖任何硬件,入门首选 |
| srsRAN Project | 真实gNB | C++ | AGPL-3.0 | 配USRP等SDR上真实空口,是“模拟”到“真机”的桥 |
怎么选?我的建议是组合拳:Open5GS 当核心网,UERANSIM 当RAN——这是最低成本的闭环,也是各项目官方文档互相打通最顺畅的组合;free5GC 适合想读代码、跟标准演进的人;srsRAN 留到第二阶段再上。
几点选型经验:其一,Open5GS 的强项在“全”——它同时覆盖EPC和5GC,这意味着你可以在实验床上研究4/5G互操作、EPS Fallback这类现网最常见的跨系统问题;其二,许可证要留意,AGPL-3.0 对商用改造有传染性约束,拿来内部练手没问题,想做商业产品发行就要请法务把关;其三,UERANSIM 只是模拟器,它不模拟无线信道,这是它的天花板,后面第五节细说。
先看整体架构,一张图说清楚信令和用户面怎么走:
flowchart TD
UE["模拟UE nr-ue<br/>TUN口收发"] -->|N1 NAS| gNB["模拟gNB nr-gnb"]
gNB -->|N2 NGAP| AMF["AMF"]
AMF -->|N11| SMF["SMF"]
SMF -->|N4 PFCP| UPF["UPF<br/>ogstun接口"]
UPF -->|N3 GTP-U| NET["internet DNN"]
AMF -->|鉴权与签约| AUTH["AUSF UDM UDR"]
SMF -->|会话策略| AUTH
部署过程按官方文档(Open5GS 文档的 Quickstart 一节,UERANSIM 仓库的 README)走,不会超过半小时。把关键步骤和我踩过的坑摘出来:
第一步:装核心网。 Ubuntu 上用官方 PPA(ppa:open5gs/latest)安装,各NF以独立服务形式落在系统里,配置文件集中在 /etc/open5gs/ 下的各 .yaml。签约数据放 MongoDB,官方还提供一个 Node.js 写的 WebUI,默认跑在本机 9999 端口(文档给的默认账号是 admin/1423),点点鼠标就能开户——IMSI、K、OPc、APN、切片,一个页面全包。批量开户可以用 open5gs-dbctl 这类脚本工具。
第二步:做用户面出口。 建一块 TUN 接口(通常叫 ogstun),官方文档用 10.45.0.0/16 做UE地址池,再配一条 NAT 伪装规则让流量出公网。这一步是新手翻车第一名,第四节案例三专门讲。
第三步:起模拟RAN。 UERANSIM 两个可执行文件:nr-gnb 连 AMF(默认 SCTP 38412),nr-ue 附着到 gNB。UE 配置文件里要写死 SIM 参数——IMSI、K、OPc,因为你没有真卡,鉴权向量是配置文件里这几个十六进制串和核心网签约数据“对暗号”算出来的(Milenge类算法)。配套的 nr-cli 可以随时看UE状态和信令dump,非常好用。
第四步:验证。 UE注册成功、PDU会话建立后,在模拟UE的TUN口上 ping 一下外网,通了,就是一张端到端都活的5G SA网。整个过程中,AMF、SMF的日志(/var/log/open5gs/)就是你的第一手排障材料。
到这里你已经拥有:一个真实的5GC软件栈(NGAP、NAS、PFCP、GTP-U,全是按3GPP规范实现的真协议)、一个可控的模拟RAN、一个随开随关的实验环境。总成本:一台8G内存的笔记本,电费忽略不计。
工具搭好只是开始,真正的价值在排障。下面三个案例是我带新人时必练的“通关题”,覆盖了5G排障里最高频的三类故障。方法论先说清楚:分段定位,从UE侧看到的错误码入手,沿N1→N2/N3逐段往下剥——这个思路在现网和实验床上完全同构。
现象:nr-ue 起来后反复重试,日志里能看到 Registration reject。
定位:这是最典型的一段式排障。NAS层的拒绝码定义在 TS 24.501 里(继承自EPS时代 TS 24.301 的编号体系),它直接告诉你核心网在哪一步、因为什么把你拒了。最常见的三个:#3 Illegal UE、#7 5GS services not allowed、#15 No suitable cells in tracking area。
根因与修复:#3/#7 九成是签约和鉴权问题——WebUI里开户的K、OPc和UE配置文件里写的不一致,鉴权向量算不对,AUSF/UDM环节直接判非法;#15 则是“注册能走到接入层校验,但AMF认为你所在的跟踪区不适合你”,九成是 gNB广播的TAC/PLMN和AMF配置里支持的TAC/PLMN对不上。我带的新人最常犯的错就是:改了gNB配置文件里的TAC,忘了改AMF侧 amf.yaml 里的 plmn_support 配置。两边对齐,立通。
现象:注册成功了,但PDU Session Establishment Reject,UE有TUN口却拿不到地址。
定位:注册走N1/N2,会话走N1/N2/N4三段,此时AMF已经放行,问题域收敛到SMF—UPF一侧。同样先看拒绝码:#27(missing or unknown DNN)说明UE请求的DNN在SMF侧没有对应配置;#26(insufficient resources)则常见于SMF到UPF的N4/PFCP会话没建立起来——UPF没起来、地址配错、路由不通,SMF拿不到用户面资源,只能报资源不足。
修复经验:#27 就去SMF配置里把DNN段补上(默认文档用 internet);#26 先 ss/tcpdump 确认PFCP的8805端口通不通,再看UPF日志有没有PFCP Association成功的记录。这个案例的训练价值在于让新人理解:注册成功≠会话能成,控制面通≠用户面通——这是5G排障里最基本也最容易混淆的分界线。
现象:一切都“成功”,UE的TUN口也拿到了 10.45.x.x 的地址,但外网ping不通。
定位:这是纯粹的宿主机网络问题,也是 Open5GS 新手群里的永恒话题。分段测:在UPF侧抓GTP-U(2152端口),看上行解封装后包有没有进来;包进来了、回包出不去,就是NAT那条 MASQUERADE 规则没配或者被宿主机重启冲掉了;再查 ogstun 接口和路由表。
根因:90%就是那条 iptables -t nat 伪装规则丢了。修复:补上规则,通了。这个案例看着最简单,训练价值却最大——它教会新人“用户面三段式检查法”:GTP-U封装段、核心网内部段、NAT出公网段,一段一段抓包,谁也别想蒙混过关。
把三案浓缩成一张速查表和一张定位决策图:
| 现象 | 第一眼看哪 | 高频根因 |
|---|---|---|
| 卡在NG Setup | AMF日志、SCTP 38412 | PLMN或TAC两边不一致 |
| 注册被拒 #3/#7 | 鉴权信令、签约数据 | K/OPc不匹配、IMSI没开户 |
| 注册被拒 #15 | gNB广播与AMF支持列表 | TAC不在AMF配置内 |
| PDU会话拒 #27 | SMF配置 | DNN缺失或不匹配 |
| PDU会话拒 #26 | PFCP关联状态 | UPF未启动、N4不通 |
| 注册成功ping不通 | ogstun、NAT规则 | MASQUERADE规则丢失 |
flowchart TD
S["UE连不上"] --> Q1{"SCTP 38412通吗"}
Q1 -->|不通| A1["查N2链路<br/>看NG Setup是否失败"]
Q1 -->|通| Q2{"UE发注册请求了吗"}
Q2 -->|没有| A2["查gNB与UE配置<br/>PLMN和TAC对齐"]
Q2 -->|收到拒绝| Q3{"NAS拒绝码是多少"}
Q3 -->|3或7| A3["查鉴权签约<br/>K与OPc是否一致"]
Q3 -->|15| A4["查TAC与PLMN<br/>是否在AMF支持列表"]
顺带说一句排障的“外功”:Wireshark 对这套环境的支持相当成熟——SCTP 默认端口 38412 会自动解码 NGAP,GTP-U 走 2152,NAS 消息嵌在里面一层层展开,注册全流程每一步的信令元组清清楚楚。让新人把一次成功注册的PCAP从头到尾读一遍,胜过讲十遍注册流程PPT。
模拟器跑通之后,很多人会想:能让真手机注册上来吗?能,但中间隔着三道坎,每一道都有明确的解法。
第一道坎:鉴权材料。 真手机里的USIM不认配置文件,你得给它一张“写了你核心网认识的K/OPc”的卡。业界通行做法是用 sysmocom 这类厂商的可编程USIM卡,配合 Osmocom 社区的 pySim 写卡工具把 IMSI、K、OPc 灌进去。5G的SUCI concealment要求卡支持相应的鉴权算法套件,买卡时确认清楚。
第二道坎:真空口。 UERANSIM 没有无线,你得换 srsRAN Project 起一个真gNB,配一块 USRP B210 级别的SDR(5~20MHz带宽足够把注册、会话、数据全流程跑起来)。这一步之后,你就拥有了一张“只有你自己”的微型运营商。
第三道坎:合规。 这是必须严肃提醒的一条:空口发射要用频率,无照发射违法,也可能干扰现网。实验室要么用屏蔽箱/屏蔽室,要么走正规渠道申请试验频率。别在现网频段上裸发射,这条红线不因“只是玩玩”而消失。
过了这三道坎,实验床的保真度会上一个大台阶——你能看到真终端的NAS行为差异、真实的注册时延。但也要想清楚值不值:对多数运维训练场景,模拟器已经够用;真机环节更适合做互操作研究的小团队。
实验床最怕沦为“装完就吃灰”的玩具。让它产生运维价值,我实践中总结出三件正经事:
第一件:新人训练营。 我给团队新人的第一周作业就是:照文档搭网、故意埋三个故障(改TAC、删DNN、清NAT规则)让他排、排完写复盘。一周下来,他对N1/N2/N3/N4的信令关系和错误码体系就有手感了——这比三个月的“跟着值班看告警”效率高得多。核心是故障要人来埋,因果要自己验。
第二件:升级回归台。 Open5GS 这类项目迭代很快,每次升级前,在实验床上把“注册—建会话—传数据—去激活”这条主干道用脚本过一遍,就是最小可行的冒烟测试。这套脚本稍加改造(shell或Python驱动 nr-cli、检查TUN口连通性、比对结果),就能挂进CI——开源核心网的“版本验证”从此不用拿现网冒险。
第三件:故障复现器。 现网疑难来了,先在实验床上复现一遍。链路层断链、签约数据异常、会话建立被拒,绝大多数控制面故障都能在实验床上做出来;复现了,才能从容地做变量隔离,把“猜”变成“证”。这也是我这些年最大的体会:排障水平的差距,本质上是“可重复实验次数”的差距——高手不是直觉更准,而是单位时间能验证更多假设。
泼一盆冷水,实验床有三条明确的边界:
它不懂无线。 UERANSIM没有信道衰落、没有切换重选、没有真实的空口时延——凡是“无线侧特有”的故障(弱覆盖、乒乓切换、上行干扰),实验床一律无能为力。这块短板要靠真SDR或路测去补。
它不代表规模。 单UE跑通了,不代表一千并发不崩。Open5GS 官方从未声称默认配置可以直接扛生产话务,容量、HA、数据持久化这些生产命题,实验床只能提供“入门级的参考架构”,不能提供结论。
它不是安全边界。 实验床上几乎所有组件默认监听在本机或局域网,WebUI还有默认账号——不要把它暴露到公网,哪怕“只是玩玩”。核心网组件暴露公网的后果,任何一个干过运维的都懂。
另外提醒一句:不同项目版本之间默认值和配置项差异不小,本文提到的端口、子网、账号等细节均以官方文档当前版本为准,动手前先读一遍对应版本的文档,别拿旧教程硬套新版本。
十八年前我学GPRS排障,靠的是蹭机房、抄笔记、在真网上踩坑;今天,一张完整的5G SA核心网可以装进任何一台笔记本,注册信令的每一步都摊开给你看。工具的民主化,把“排障”这门手艺的练习成本压到了近乎为零——剩下的差距,只在于你练不练。
现网教会我们敬畏,实验床教会我们因果。一个只待在现网的人,永远只有推理;一个常待在实验床的人,才有验证。把你不敢在现网按的那个按钮,搬到笔记本上按一遍——这就是我对每个想往深处走的通信运维同行,最实在的一条建议。
本文由「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 等场景全覆盖。
