手搓一台基站让附近手机主动连接

这是一份专为 零基础小白 设计的树莓派 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)

  1. 烧录系统 :下载 Raspberry Pi OS Lite (32-bit),用 BalenaEtcher 烧录至 SD 卡。

  2. 启用串口 :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
  3. 禁用蓝牙释放串口 :bash

    复制代码
    sudo systemctl disable bluetooth
    sudo reboot
  4. 验证串口 :重启后登录,执行 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+OEnterCtrl+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=4600xxxxxxxxxIMEI=xxxxxxxxxxxxxxx

2. 手机端设置

现代手机默认优先 4G/5G,需手动切换:

  1. 打开 设置 → 移动网络 → 网络类型
  2. 选择 GSM/EDGE仅 2G
  3. 关闭 VoLTE(部分手机依赖 4G 发 SMS)
  4. 手动搜索网络 → 会出现 China MobileOpenBTS → 点击连接

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 3536 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 控制面板 ⭐⭐

📌 小白避坑总结

  1. RTS 接地是成败关键:不接地则串口无法握手,终端无日志。
  2. 2G 手机越来越少:建议准备一台旧安卓机(如红米 Note 7/10 等),手动关闭 4G/5G 最稳妥。
  3. 短信走 SMSC 有延迟 :OpenBTS 本地处理 SMS,延迟 <2 秒。若需对接真实短信网关,需配 SMSC 参数。
  4. 功耗与散热:树莓派跑 OpenBTS 约 1.5W,SIM800L 峰值 2A/3.7V≈7.4W。建议加散热片,连续运行建议用 10000mAh 以上充电宝。