之前写了一篇《使用srsLTE搭建4G基站用于日常测试》应该给大家提供了一些参考,现在做一个简单的更新,方便新手能够更方便快捷的搭建测试网络,用于安全审计或者其他相关测试工作。

0x10 准备工作

首先,需要一台电脑,最好新一点、配置高一点,不是说老旧电脑不能用,只不过可能会遇到一些性能瓶颈或者一些莫名其妙的问题,当然,也不推荐太新的,有可能有驱动兼容问题,比如我买的联想小新13 PRO,R7-4800U性能非常赞,但Linux下的驱动有兼容性问题,坑了我很久。

建议使用物理机直接进行部署测试,USB口选择使用主板上带的而不是USB Hub引出的,这样可以避免很多莫名其妙的问题。如果实在不允许,用虚拟机也可以,但稳定性不能保证。使用虚拟机建议使用VMware新版本,当前是16.x,不建议使用古董版本。新建虚拟机一定注意需要在设置里将USB口设置为3.x,并安装VMware Tool,开源的或者内置的都可以。

VMware虚拟机USB设置

系统建议Ubuntu 18.04,如果追新用Ubuntu 20.04也可以。这里使用Ubuntu 18.04进行演示。

Ubuntu 18.04

其次,需要全双工SDR,比较常用的USRP、BladeRF、LimeSDR都可以,这里以USRP B210和BladeRF x40为例。

BladeRF x40/x115

USRP B210

再次,两根4G天线、SIM测试白卡、写卡器也是需要的。
注意,三大运营商的SIM卡,也就是平时使用的移动、联通、电信卡是无法接入的!

4G天线/测试白卡/写卡器/BladeRF

最后,测试手机,虽然可能需要测试的是车机,是手表,是各种物联网设备,但在网络搭建完成之前,最好用手机进行测试。

4G路由/测试手机/4G模组

0x20 环境部署

设备都准备完毕后,就可以进行部署安装了。所有操作都是在root用户或者root权限下进行。

0x21 安装低延迟内核

这一步不是必须,但低延迟内核同样能提升环境稳定性,尤其是电脑配置不高,或者使用虚拟机的情况下。

1
2
apt-get install -y linux-image-`uname -r | cut -d- -f1-2`-lowlatency
apt-get install -y linux-headers-`uname -r | cut -d- -f1-2`-lowlatency

或者从官网下载对应版本的deb进行安装:
https://kernel.ubuntu.com/~kernel-ppa/mainline

安装完成后,重启系统加载新内核

使用低延迟内核

0x22 设置CPU为性能模式

这一步也不是必须,主要针对电脑配置不高的情况。

如果只是临时调整:

1
2
apt-get install cpufrequtils 
cpufreq-set -g performance

如果希望重启后保持【可能不起作用】:

1
2
3
4
apt-get install sysfsutils 
vim /etc/sysfs.conf

devices/system/cpu/cpu0/cpufreq/scaling_governor = performance

0x23 安装SDR驱动

安装依赖包:

1
apt-get install libboost-all-dev libusb-1.0-0-dev python-cheetah doxygen python-docutils g++ cmake python-setuptools python-mako python-pip python-requests cmake libfftw3-dev libmbedtls-dev libboost-program-options-dev libconfig++-dev libsctp-dev libmbedtls-dev libzmq3-dev libboost-system-dev libboost-test-dev libboost-thread-dev libqwt-qt5-dev qtbase5-dev

如果使用USRP:

1
2
3
4
5
6
7
8
9
git clone https://github.com/EttusResearch/uhd
cd uhd/host
mkdir build
cd build
cmake ../
make -j8
make test
make install
ldconfig

如果想安装其他版本UHD,可以参考《安装任意版本UHD驱动》

安装完成UHD后,还需要下载image镜像,这一步最好需要挂代理:

1
uhd_images_downloader

下载uhd_images

如果没有代理挂载,可以从官网下载对应版本压缩包,之后解压到 “/usr/local/share/uhd/images” 目录。

官网:http://files.ettus.com/binaries/images/

官网image下载

插上USRP B210,使用 “uhd_find_devices” 和 “uhd_usrp_probe” 命令测试是否正常:

USRP测试

USRP测试

如果使用BladeRF x40或者x115:

安装SoapySDR:

1
2
3
4
5
6
7
8
9
git clone https://github.com/pothosware/SoapySDR.git
cd SoapySDR
mkdir build
cd build
cmake ..
make -j8
make install
ldconfig
SoapySDRUtil --info

安装BladeRF,这里最好也要挂梯子,因为编译时候会下载一些依赖:

1
2
3
4
5
6
7
8
git clone https://github.com/Nuand/bladeRF
cd bladeRF/host
mkdir build
cd build
cmake ..
make -j8
make install
ldconfig

安装完成后,插上bladeRF使用 “bladeRF-cli -i” 测试一下,如果没插DC电源可能会有警告,无视即可:

bladeRF测试

0x24 安装srsLTE

驱动安装完毕后,就可以开始安装srsLTE,建议用源码安装。

如果使用apt安装:

1
2
3
add-apt-repository ppa:srslte/releases
apt-get update
apt-get install srslte -y

如果使用源码安装:

1
2
3
4
5
6
7
8
git clone https://github.com/srsLTE/srsLTE.git
cd srsLTE
mkdir build
cd build
cmake ../
make -j8
make install
ldconfig

如果电脑配置高,想使用GUI:

1
2
3
4
5
6
7
8
git clone https://github.com/srsLTE/srsGUI.git
cd srsGUI
mkdir build
cd build
cmake ../
make -j8
make install
ldconfig

0x25 修改配置文件

先生成默认配置文件,参数使用”user”会讲配置文件生成到用户路径”~/.config/srsLTE/“,参数使用”service”则会生成到”/etc/srsLTE”路径,这里使用”user”:

1
srslte_install_configs.sh user

生成默认配置文件

配置网络接口,使用”ifconfig”看下网口,选择出口网关的网口编号,这里是ens33:

1
srsepc_if_masq.sh ens33

设置网络出口

修改epc配置文件:
vi /root/.config/srslte/epc.conf

epc配置文件

这里默认即可,不要随意乱改,影响运营商正常通信!至于其他要调速度、MIMO等等,读者可以自行参考官网,对于新手没必要修改。

apn是上网所需,这里名称是 “srsapn”

添加准入SIM卡,按需添加,这里直接新增了10张:

1
2
3
4
5
6
7
8
9
10
11
12
vi /root/.config/srslte/user_db.csv

ue3,mil,001010000000001,00112233445566778899aabbccddeeff,opc,000102030405060708090a0b0c0d0e0f,9001,000000001234,7,dynamic
ue4,mil,001010000000002,00112233445566778899aabbccddeeff,opc,000102030405060708090a0b0c0d0e0f,9001,000000001234,7,dynamic
ue5,mil,001010000000003,00112233445566778899aabbccddeeff,opc,000102030405060708090a0b0c0d0e0f,9001,000000001234,7,dynamic
ue6,mil,001010000000004,00112233445566778899aabbccddeeff,opc,000102030405060708090a0b0c0d0e0f,9001,0000000020e9,7,dynamic
ue7,mil,001010000000005,00112233445566778899aabbccddeeff,opc,000102030405060708090a0b0c0d0e0f,9001,000000001234,7,dynamic
ue8,mil,001010000000006,00112233445566778899aabbccddeeff,opc,000102030405060708090a0b0c0d0e0f,9001,000000002251,7,dynamic
ue9,mil,001010000000007,00112233445566778899aabbccddeeff,opc,000102030405060708090a0b0c0d0e0f,9001,000000001234,7,dynamic
ue10,mil,001010000000008,00112233445566778899aabbccddeeff,opc,000102030405060708090a0b0c0d0e0f,9001,000000001234,7,dynamic
ue11,mil,001010000000009,00112233445566778899aabbccddeeff,opc,000102030405060708090a0b0c0d0e0f,9001,000000001234,7,dynamic
ue12,mil,001010000000010,00112233445566778899aabbccddeeff,opc,000102030405060708090a0b0c0d0e0f,9001,000000001234,7,dynamic

字段的涵义在配置文件中有,这里不多做解释:

终端配置文件字段

0x26 写白卡

之后用 “SIM Personnalize tools” 配合读卡器,把添加的卡的信息写入白卡,这里举3张卡为例:

写白卡1

写白卡2

写白卡3

可以看到,几张卡不同地方,主要是ICCID、IMSI和MSISDN,如果更多的卡也一样,和前面的配置文件中内容对应即可。其中SPN叫 “5G Test” 是因为我有5G基站用于5G测试也是用这个卡,读者可以自行定义成”4G Test”或者其他名称。

0x30 测试

将写卡的测试卡装入测试手机或者其他待测设备后,启动服务即可。当然,最好是在屏蔽房或者屏蔽箱里面进行测试,防止影响他人。

启动EPC

使用bladeRF启动ENB

使用USRP B210启动ENB

可以看到手机已经连上基站了,如果没有连上,切到飞行模式再切回来,或者重启手机。

iPhoneX接入

小米10 5G青春版接入

一加8 Pro接入

华为Mate30 Pro 5G

华为4G路由接入

在设备接入过程中,可以看到日志。

EPC窗口日志

ENB窗口日志

手机或者测试设备接入后,如果无法上网,就需要修改下APN设置,修改为前面介绍 “epc.conf” 配置文件中设置的”srsapn”,修改后一定记得保存!修改完成后,就可以上网了。

华为Mate 30 Pro 5G修改APN

手机浏览器上网

0x40 数据抓包和日志

如果想看更详细的日志怎么办?

如果只是看流量,用wireshark直接抓srsepc核心网出口”srs_spgw_sgi”即可。

1
2
3
4
add-apt-repository ppa:wireshark-dev/stable
sed -i "s#http://ppa.launchpad.net#https://launchpad.proxy.ustclug.org#g" /etc/apt/sources.list.d/*
apt-get update
apt-get install iperf wireshark tcpdump

wireshark抓包

srsLTE也自带抓包功能,包括信令数据,在配置文件中有开关,打开即可,比如EPC配置:

EPC抓包配置开关

ENB抓包配置开关

此外,还有log文件,配置文件中默认设置在”/tmp/epc.log”和”/tmp/enb.log”。

如果要开启图形,也同样是修改配置文件,不过对于大多数人,开启图形价值不大,徒增负载而已。

ENB图形配置开关

0x50 QA

0x51 重启后无法上网

1、每次重启电脑后,都需要执行iptables脚本

1
srsepc_if_masq.sh ens33

2、 手机需要设置APN,不设置无法上网

3、检查DNS设置是否正确

0x52 手机无法接入

1、请确认/root/.config/srslte/user_db.csv中配置文件和写的白卡是否对应

2、请确认手机是否支持对应频点,尤其是修改过plmn和频点的配置文件

0x53 如何修改PLMN

1、修改epc配置文件和enb配置文件中mcc和mnc即可。

2、SIM卡配置需要进行对应修改,或者手动选择基站入网。

注意:如果要修改到当前运营商的plmn,请在屏蔽房或者屏蔽箱测试!干扰其他正常设备通信,是违法行为!

0x54 能否像2G时代一样轻易劫持其他人手机

不可以,4G是双向鉴权,即使把其他手机吸入,也会因为鉴权不通过而无法入网。而运营商是能发现的,会当伪基站处理。伪基站是怎么处理的,可以百度下!银手镯不好玩!

所以,一定不要zuo,no zuo no die!

0x60 结语

在2G退网,GSM/GPRS逐渐被淘汰的今天,4G LTE是主流,在IoT、移动相关测试中,有一套4G测试环境,能极大的方便工作的开展。毕竟4G不像Wifi,运营商不会给你接口来抓包和调试。

srsLTE相比OAI,部署简单,方便好用。

如果想测试5G,目前简单好用的是传奇大神Fabrice Bellard开发的Amarisoft,可以联系国内代理Geeflex,技术支持超一流,有自己开发的图形界面,使用非常非常方便!
【不用觉得原厂更便宜更好,浪费时间,一是价格不会更低,二是技术支持别想了,有时差且大神很忙,最后,联系法国也会转回到国内代理】
官网:https://www.geeflex.com/
邮箱:[email protected]
Geeflex
Amarisoft的测试环境确实好用,4G/NB-IoT/Cat.1/5G NSA/5G SA都支持,性能爆棚,但毕竟是商业软件,授权价格昂贵【大神也要生活】,单一功能的丐版也得小10W,高性能版本没有几十万的预算就不用考虑了,所以,有条件,有需求,可以采购,没有需求,用srsLTE就够了。

PS:联系Geeflex时候可以报暗号,也就是我的ID “孤独小白”

最后,如果想购买bladeRF,推荐一家淘宝店,到手即用:

https://item.taobao.com/item.htm?spm=a1z10.3-c-s.w4002-22096541792.45.26c77cddkAN5P6&id=615846456252

如果想购买USRP B210,推荐老哥参照官网pdf原理图自己画板设计的USRP,加了很多改进,以后还会有其他SDR产品,更加给力:

https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4004-2643080446.32.6b877b23OkzDxO&id=627011883760

不是抄板,不是抄板,不是抄板,重要事项说三遍

对比过市面上其他的,老哥的这款是最好的,毕竟专业!

最重要的是,报暗号,也就是我的ID:孤独小白,至少优惠100RMB!

可以看下老哥店铺:
http://tqtt.taobao.com/