使用 USRP B210 和 srsRAN 搭建私有 LTE 网络
参考
实验过程参考了以下资源,所以不再赘述,仅写一写配置细节和注意事项。
- Private LTE with LimeSDR and srsRAN
- srsRAN 4G 文档
- Your First LTE - Open5GS
- 使用 USRP 与 srsLTE 搭建软件 LTE 基站
- 使用 Open5GS+srsRAN 用 B210 在 docker 中搭建5G测试基站
- Write a sim card with pySim
清单
以下仅为本文所用到的设备和软件:
- Ettus Research USRP B210:SDR 开发板
- UHD:USRP 固件
- Gialer 可编程 SIM 卡
- GRSIMWrite:SIM 卡读写工具(Windows only)
- Windows 笔记本
- PC/SC 读卡器
- Raspberry Pi 5:连接 SDR 设备、运行 srsRAN
- srsRAN:开源 LTE/NR 软件栈
- srsUE(未用到):UE 模拟器,可以搭配两台 USRP B210 建立端到端的 LTE 连接
- srsENB:eNodeB(基站)模拟器
- srsEPC:EPC(核心网),处理 UE 鉴权和数据转发
安装 srsRAN
建议选用最新的 release 版本进行编译,而不是从 apt 源安装。由于 srsRAN 4G 较旧,不支持 C++20 语法,最好使用 Ubuntu 22.04 或容器。我在 Debian 13 (trixie) 上浪费了大量时间解决编译环境,换成 Raspberry Pi OS (Debian 12 bookworm) 后就顺利了。
必须先安装 SDR 驱动(UHD)再编译 srsRAN,否则会跳过 srsUE 和 srsENB 的编译。
卡片读写
pySim 虽然也能用,但最好使用原厂的 GRSIMWrite 工具,其带 GUI、更加直观,可以存储参数。Gialer 的卡片上写有 ADM: 3838383838383838
,实际上它是 HEX 编码后的 ASCII 字符串 88888888
。即使不小心弄错了,pySim 也会提示 ValueError: PIN-ADM needs to be <=8 digits (ascii)
。这时候应该反应过来这段 ADM
的意义了。
Administrative Data (AD) 字段定义于 3GPP TS 31.102 的第 4.2.1 节。
srsENB 配置
srsENB 处理所有射频相关的配置(srsenb.conf
),包括:cell ID、工作频段、带宽、发射增益等。
EARFCN:LTE 信道号
- 3350(B7 FDD):srsENB 默认值,搜不到信号,浪费了不少时间
- 1934(B3 FDD):这篇教程使用,搜不到信号,浪费了不少时间
- 1650/1750/1850(B3 FDD):亲测正常使用
联网
srsEPC 依靠 NAT 来提供网络访问,自带的配置脚本 srsepc_if_masq.sh
将调用 iptables
来配置 masquerade。对于 Raspberry Pi OS Lite,需要手动从 APT 源安装 iptables
。
性能

RPi 5 的性能足以支撑 srsRAN 的运行,我甚至用的是插线板的自带的 USB-A 口,搭配一分二的 USB-C 线同时给两个 Pi 5 并外挂了一个 USRP B210。使用 fast.com 测得下行吞吐约 50Mbps,上行约为 60Mbps。iperf3
更精准但我懒得弄了。
从 EPC 到 UE 的 ping RTT 约为 20-30ms,远不及 Wi-Fi。
在 Intel N100 的小主机上运行,吞吐在 20-40Mbps 之间浮动,同时 srsENB 出现如下错误信息:
1 | RACH: tti=2841, cc=0, pci=1, preamble=48, offset=1, temp_crnti=0x7a |
问题源自处理器性能不足,和 N100 主频低有关系。
构建 srsRAN 容器
在 Raspberry Pi 5 上测试 srsRAN 后,受到这篇博客的启发,将 srsRAN 打包成了单体的 Docker 容器,这样就不会搞脏宿主机环境了。
dockerfile
如下:
1 | FROM ubuntu:22.04 |
docker-compose.yml
如下:
1 | services: |
使用方法:
- 新建一个名为
srsRAN_4G
的目录,将上述dockerfile
和docker-compose.yml
放入其中。 docker compose up --build
构建并启动容器。- 容器成功运行后,会在
srsRAN_4G/
下生成config
目录,包含了 srsRAN 的默认配置文件。根据需要,手动修改 EPC、ENB 和 UE 的配置文件。 - 插入 USRP B210。
- 进入容器:
docker exec -it srsran_4g_container tmux
,在不同的窗口中依次运行srsepc
和srsenb
即可。 - 在宿主机执行
srsepc_if_masq.sh <interface>
来配置 NAT。
总结
其实折腾 SDR hacking 的念头很早就有了,最早是多年前在乌云 Drops 上看到用摩托罗拉 C118 搭建 OsmocomBB 实现 GSM Sniffing;后来又刷到了 Femtocell(皮基站)相关的文章。实习工作时也接触过 RTL-SDR,但只是用作 ADS-B Receiver。
去年研究 eSIM 时发现 UK Ofcom 提供 Shared Access License,起步价仅为 £80/年(2x3.3MHz 或 10MHz);身在美国的 homelabber 可以使用商用的 CBRS 基站来部署 LTE/NR 网络,参考 $100,DIY 搭建合法的 LTE 网络。不过 UK 和 EU 也在逐步推进类似 CBRS 的动态频谱分配机制,希望相关政策早日落地吧。
总的来说,srsRAN 4G 只适合学习折腾,无法 scale up 到生产环境;srsRAN 5G 则是真正能对接商用的 O-RAN 设备勉强实现可用的。