这是一份专为 零基础小白 设计的树莓派 2G 短信基站教程。全程使用开源 OpenBTS 框架,硬件成本约 ¥500,12 小时即可跑通。
📦 一、硬件清单(按淘宝/京东常见型号)
| 部件 | 推荐型号 | 作用 | 备注 |
|---|---|---|---|
| 树莓派 | Pi 3B+ 或 Pi 4(4G 内存版) | 主控平台 | 3B+ 功耗低、兼容性好;Pi 4 性能强但需散热 |
| GSM 模块 | SIM800L 或 SIM900A | 射频收发 | SIM800L 驱动成熟,OpenBTS 官方支持 |
| 天线 | GSM 外置天线(带 SMA 接口) | 信号收发 | 必配!塑料壳天线覆盖仅 10~20 米 |
| 电源 | 双路电源或独立 3.7V 2A+ 充电宝 | 供电 | SIM800L 峰值电流 2A,必须独立供电 |
| SIM 卡 | 移动/联通/电信 2G 卡(短信功能开启) | 身份认证 | 提前充值余额,无需流量 |
| 辅材 | 杜邦线若干、面包板(可选) | 接线 | 红黑线各 4 根,TX/RX 各 2 根 |
💡 电源避坑:SIM800L 开机瞬间电流可达 2A,若共用树莓派 5V 供电,极易导致 Pi 重启。建议:树莓派用原装 5V/2.5A 电源,SIM800L 用独立 3.7V 锂电池/充电宝供电。
🔌 二、硬件接线(重点:交叉串口 + RTS 接地)
text
SIM800L 引脚 → 树莓派 GPIO
VCC (3.7~4.2V) → 独立电源正极(或 Pi 5V Pin 2,建议独立)
GND → Pi GND Pin 6(共地)
TXD → Pi RX Pin 10 (GPIO 15)
RXD → Pi TX Pin 8 (GPIO 14)
RTS → Pi GND Pin 39(⚠️必须接地,否则串口通信失败)
📌 接线后检查:RXD↔TXD 交叉连接,RTS 固定接地。模块上电后,
LED会规律闪烁(约 1Hz 表示注册正常)。
💻 三、系统准备(Raspberry Pi OS Lite)
-
烧录系统 :下载
Raspberry Pi OS Lite (32-bit),用 BalenaEtcher 烧录至 SD 卡。 -
启用串口 :bash
sudo raspi-config # Interface Options → Serial Port → # "Would you like a login shell to be accessible over serial?" → No # "Would you like the serial port hardware to be enabled?" → Yes -
禁用蓝牙释放串口 :bash
sudo systemctl disable bluetooth sudo reboot -
验证串口 :重启后登录,执行
ls -l /dev/ttyAMA0,应看到设备文件。
🛠️ 四、一键安装 OpenBTS
bash
# 1. 更新系统
sudo apt update && sudo apt upgrade -y
# 2. 安装编译依赖
sudo apt install git build-essential libsqlite3-dev libmysqlclient-dev \
libusbx-dev libncurses-dev automake pkg-config libtool subversion \
asterisk asterisk-sqlite3 asterisk-mysql asterisk-voicemail \
mysql-server libssl-dev libreadline-dev libusb-1.0-0-dev \
libboost-dev libboost-system-dev libboost-thread-dev -y
# 3. 克隆 OpenBTS
git clone https://github.com/OpenBTS/openbts.git
cd openbts
# 4. 编译(带多核加速,约 5~15 分钟)
make -j$(nproc)
# 5. 安装 Asterisk 模块
sudo make install-asterisk
sudo systemctl enable asterisk
⚙️ 五、关键配置(决定能否搜到信号)
编辑配置文件:nano Config/config
修改以下核心参数(保留其他默认值):
ini
# 1. 频点(中国 900MHz GSM 常用 ARFCN)
channel 34 # 移动/联通通用,若搜不到可试 35 或 36
# 2. 运营商 PLMN(选其一)
PLMN 46000 # 中国移动
# PLMN 460
# 3. PLMN 选择(手机搜索时显示的运营商名称)
PLMN 46000 # 中国移动
# PLMN 46001 # 中国联通(部分手机需改为46001)
# PLMN 46003 # 中国电信(需手机支持2G VoLTE回退)
# 4. 短信功能开关
SMS 1
SMSRouter 1
# 5. 数据库路径(用于存储HSS鉴权信息)
database HSS sqlite3 /home/pi/openbts/db/HSS.db
# 6. 手机空闲模式参数(控制驻留时间,防频繁切换)
T3324 120 # 手机空闲定时器(单位:分钟,建议≥60)
T3324 0 # 关闭网络侧强制去注册
📌 保存退出 :
Ctrl+O→Enter→Ctrl+X
🗄️ 六、初始化 HSS 鉴权库
OpenBTS 首次运行会自动创建数据库目录。先手动生成 HSS 文件,再插入测试用户:
bash
# 1. 运行一次 OpenBTS(自动创建配置与数据库)
cd /home/pi/openbts
./startOpenBTS
# 看到 `Listening for SIP...` 后 Ctrl+C 退出
# 2. 创建测试用户(手机号与加密密钥)
sqlite3 /home/pi/openbts/db/HSS.db
INSERT INTO Users VALUES ('13800138000', '49F1F0B1C56F1090A45D32873501B34A', '3132333435363738393031323334353637383930', 0);
quit
# 💡 说明:
# 49F1F0B1... 是 OpenBTS 官方提供的测试 Kc(加密密钥)
# 3132333... 是 MSISDN(手机号,转16进制)
# 实际使用时可替换为你 SIM 卡对应的手机号
🚀 七、启动服务 & 手机测试
1. 启动 OpenBTS
bash
cd /home/pi/openbts
./startOpenBTS
✅ 正常现象:
- 终端输出
Listening for SIP on 5060 - 显示
channel 34注册成功 - 手机靠近天线时,终端会打印
IMSI=4600xxxxxxxxx和IMEI=xxxxxxxxxxxxxxx
2. 手机端设置
现代手机默认优先 4G/5G,需手动切换:
- 打开 设置 → 移动网络 → 网络类型
- 选择
GSM/EDGE或仅 2G - 关闭 VoLTE(部分手机依赖 4G 发 SMS)
- 手动搜索网络 → 会出现
China Mobile或OpenBTS→ 点击连接
3. 发送短信测试
在 OpenBTS 运行终端中,直接输入:
bash
sms 13800138000 欢迎连接基站!测试短信成功
✅ 成功标志 :手机端收到短信;终端打印 SMS sent successfully
📊 八、查看日志 & 捕获数据
所有连接、IMSI、短信记录均保存在日志中:
bash
# 实时跟踪日志(另开一个 SSH 终端)
tail -f ~/.asterisk.log
# 或查看 OpenBTS 专属日志
cat /home/pi/openbts/.OpenBTS.log
🔍 关键信息提取:
| 日志片段 | 含义 |
|---|---|
IMSI=460013xxxxxxxx |
手机唯一标识(460开头为国内) |
IMEI=86xxxxxxxxxxxx |
设备硬件ID |
SMS from 138... |
上行短信内容 |
RRC Connection Release |
手机断开连接(正常撤离) |
💡 可写脚本自动解析日志并入库 MySQL/CSV,实现批量捕获。
🛠️ 九、小白常见故障排查
| 现象 | 可能原因 | 解决步骤 |
|---|---|---|
| 搜不到网络 | ARFCN 错频 / RTS 未接地 / 供电不足 | 1. 改 channel 35 或 36 2. 确认 RTS 接 GND 3. SIM800L 换独立 3.7V 电源 |
| 手机连上闪断 | 信号过强/过弱 / T3324 设置不当 | 1. 拉远天线或加衰减器 2. 修改 T3324 180 3. 避开真实基站同频覆盖区 |
| 收不到短信 | HSS 用户不匹配 / 短信路由未启用 | 1. 检查 HSS.db 中手机号与 SIM 卡一致 2. 确认 SMS 1 已生效 3. 用 asterisk -rx "core show sms" 验证路由 |
| 4G/5G 手机不驻留 | 手机强制要求 LTE 证书 / 46000 被屏蔽 | 1. 手机设 2G only 2. 改 PLMN 46001 测试 3. 靠近天线(≤30米) |
| 树莓派重启 | 共用 5V 供电导致压降 | SIM800L 必须独立供电,树莓派用原装 5V/2.5A |
🌟 十、下一步进阶玩法(按需选做)
| 目标 | 实现方式 | 难度 |
|---|---|---|
| 自动捕获 IMEI/轨迹 | Python 解析日志 + SQLite 存储 | ⭐⭐ |
| ** captive Portal(登录页)** | 基站 + dnsmasq + 简易 Web 服务器 | ⭐⭐⭐ |
| 4G 基站 | 换 USRP 或 USB 4G 模块 + OpenAirInterface (OAI) | ⭐⭐⭐⭐ |
| 定时开关 + 远程管理 | systemd 服务 + nginx 控制面板 | ⭐⭐ |
📌 小白避坑总结
- RTS 接地是成败关键:不接地则串口无法握手,终端无日志。
- 2G 手机越来越少:建议准备一台旧安卓机(如红米 Note 7/10 等),手动关闭 4G/5G 最稳妥。
- 短信走 SMSC 有延迟 :OpenBTS 本地处理 SMS,延迟 <2 秒。若需对接真实短信网关,需配
SMSC参数。 - 功耗与散热:树莓派跑 OpenBTS 约 1.5W,SIM800L 峰值 2A/3.7V≈7.4W。建议加散热片,连续运行建议用 10000mAh 以上充电宝。