参考
实验过程参考了以下资源,所以不再赘述,仅写一写配置细节和注意事项。
- 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 出现如下错误信息:
RACH: tti=2841, cc=0, pci=1, preamble=48, offset=1, temp_crnti=0x7a
User 0x7a requesting RRC Reestablishment as 0x79. Cause: otherFailure
Disconnecting rnti=0x79.
User 0x7a connected
RACH: tti=4881, cc=0, pci=1, preamble=7, offset=1, temp_crnti=0x7b
User 0x7b requesting RRC Reestablishment as 0x7a. Cause: otherFailure
Disconnecting rnti=0x7a.
User 0x7b connected
RACH: tti=8881, cc=0, pci=1, preamble=26, offset=1, temp_crnti=0x7c
User 0x7c requesting RRC Reestablishment as 0x7b. Cause: otherFailure
Disconnecting rnti=0x7b.
问题源自处理器性能不足,和 N100 主频低有关系。
构建 srsRAN 容器
在 Raspberry Pi 5 上测试 srsRAN 后,受到这篇博客的启发,将 srsRAN 打包成了单体的 Docker 容器,这样就不会搞脏宿主机环境了。
dockerfile 如下:
FROM ubuntu:22.04
ENV DEBIAN_FRONTEND=noninteractive
ENV TZ="Europe/London"
RUN apt update && \
apt install -y libuhd-dev uhd-host && \
/usr/bin/uhd_images_downloader && \
apt install -y git nano htop nload iftop tmux screen && \
apt install -y build-essential cmake libfftw3-dev libmbedtls-dev libboost-program-options-dev libconfig++-dev libsctp-dev && \
apt clean && \
rm -rf /var/lib/apt/lists/*
RUN git clone https://github.com/srsran/srsRAN_4G.git && \
cd srsRAN_4G && \
git checkout tags/release_23_11 && \
mkdir -p build
RUN cd srsRAN_4G/build && \
cmake ../ && \
make -j$(nproc) && \
# make test && \
make install
RUN apt purge -y --auto-remove git build-essential cmake
RUN rm -rf /srsRAN_4G/.git
CMD ["bash"]docker-compose.yml 如下:
services:
srsran_4g:
build:
context: .
dockerfile: dockerfile
image: srsran_4g:latest
container_name: srsran_4g_container
volumes:
- ./config:/etc/srsran
- /dev/bus/usb:/dev/bus/usb
privileged: true # Required for USB access
command: ["sh", "-c", "srsran_install_configs.sh service && cp /usr/local/bin/srsepc_if_masq.sh /etc/srsran/srsepc_if_masq.sh && bash"]
tty: true
stdin_open: true
network_mode: host使用方法:
- 新建一个名为
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 设备勉强实现可用的。