Найти тему
The Codeby

Поднимаем GSM станцию с помощью YateBTS и bladeRF

Источник codeby.net

Привет codeby.net!
Не так давно ко мне в руки попал такой устройство как bladeRF x115. Первое что мне захотелось сделать это поднять свою GSM станцию. Когда я начал этим заниматься у меня возникли сложности в процессе установки и настройки необходимого софта. Информации на русскоязычных площадках я не нашел а на зарубежных информация устарела. В процессе пришлось пройти через все грабли самому. В связи с этим собственно появилась мысль описать процесс установки и настройки YateBTS под bladeRF.

Настраивать будем под Ubuntu 18.04.

Для начало установим необходимые пакеты:

sudo apt-get install -y libbladerf-dev git subversion autoconf apache2 php libapache2-mod-php g++ make libgsm1-dev libgusb-dev rlwrap

Затем установим ПО для bladeRF:

sudo add-apt-repository ppa:bladerf/bladerf
sudo apt-get update
sudo apt-get install bladerf

Установим FPGA в соответствии с вашей моделью bladeRF:

sudo apt-get install bladerf-fpga-hostedx40 # for bladeRF x40
sudo apt-get install bladerf-fpga-hostedx115 # for bladeRF x115
sudo apt-get install bladerf-fpga-hostedxa4 # for bladeRF 2.0 Micro A4
sudo apt-get install bladerf-fpga-hostedxa9 # for bladeRF 2.0 Micro A9

Устанавливаем Yate:

svn checkout http://voip.null.ro/svn/yate/trunk yate
cd yate
./autogen.sh
./configure
sudo make install-noapi
sudo ldconfig

Перемещаемся обратно домашнюю директорию:

cd ~

Устанавливаем YateBTS:

svn checkout http://voip.null.ro/svn/yatebts/trunk yatebts
cd yatebts/

Прежде чем начать собирать проект нужно внести некоторые изменения иначе будет ошибка при cборке.

Откроем файл mbts/GPRS/MSInfo.cpp:

GPRSLOG(INFO,GPRS_MSG|GPRS_CHECK_OK) << "Multislot assignment for "<<this<<os; - найдем эту строку
GPRSLOG(INFO,GPRS_MSG|GPRS_CHECK_OK) << "Multislot assignment for "<<this<<(!os.fail()); и заменим ее на эту

Сохраним изменение и перейдем к следующему файлу.

Тоже самое сделаем с файлом mbts/SGSNGGSN/Sgsn.cpp

SGSNLOGF(INFO,GPRS_OK|GPRS_MSG,"SGSN","Removing SgsnInfo:"<<ss);
SGSNLOGF(INFO,GPRS_OK|GPRS_MSG,"SGSN","Removing SgsnInfo:"<<(!ss.fail()));

SGSNLOGF(INFO,GPRS_OK|GPRS_MSG,"SGSN","Removing gmm:"<<ss);
SGSNLOGF(INFO,GPRS_OK|GPRS_MSG,"SGSN","Removing gmm:"<<(!ss.fail()));

Когда файлы будут исправлены можно перейти к сборке проекта.

./autogen.sh
./configure
sudo make install

Настраиваем Web GUI YateBTS:

cd /var/www/html
sudo ln -s /usr/local/share/yate/nipc_web yatebts
sudo chmod -R a+w /usr/local/etc/yate

http://localhost/yatebts - по этому адресу можно получить доступ к Web интерфейсу YateBTS

Настраиваем GSM BTS:
Откроем Web панель YateBTS

-2

Переходим на вкладку BTS Configuration и выставляем настройки:

Radio.Band=900
Radio.C0=75
Identity.MCC=001
Identity.MNC=01
Radio.PowerManager.MaxAttenDB=35
Radio.PowerManager.MinAttenDB=35

После того как настройки выставлены нажимаем Submit. Теперь надо выставить разрешение на подключение к нашей станции. Переходим на вкладку Subscribers в правом нижнем углу выбираем Accept by REGEXP

-4

В поле Regexp пишем .* и нажимаем Save.

Затем настроим перехват GSM сигнала. Для этого перейдем на вкладку BTS Configuration чуть ниже найдем вкладку Tapping. Выставим галочку напротив GSM и нажмем Submit.

Эта настройка позволяет захватывать GSM сигнал через GSMTAP. На этом минимальная настройка GSM сети закончена.

Запускаем BTS:
Запускаем GMS станцию командой
sudo yate -s. Если все настроено правильно вы должны увидеть много текста среди которого будет:

Release 6.1.1 formal build date Jun 6 2019 rev671
2019-06-06_10:27:05.242232 <mbts:NOTE> proc 27570 GSMConfig.cpp:80:regenerateBeacon: thread 139826990253888: regenerating system information messages, changemark 1
Starting MBTS...

Также определить работает ли станция можно посмотрев на плату первый и последний светодиод должен гореть стабильно а центральный мигать. Включив поиск на телефоне доступных сетей мы должны увидеть Test PLMN 1 - 1 2G это и есть наша тестовая сеть.

Зарегистрировавшись в сети мы получим стандартное сообщение его можно изменить в файле /usr/local/share/yate/scripts/nib.js на строчки 379.

В Web интерфейсе на вкладке Subscribers чуть ниже перейдя кликнув по ссылки Online Subscribers мы видим зарегистрированных пользователей которые были онлайн за последних 10 дней (частоту обновлений можно изменить в настройках).

Установка модуля SMSSend:
Из коробки отправить произвольное сообщение клиенту нельзя но это можно сделать через сторонний модуль YateBTS_smssend. Давайте его установим (если у вас запущен yate остановить его перед начал установки модуля).

git clone https://github.com/Ark444/YateBTS_smssend.git
cd YateBTS_smssend
sudo make
sudo make install

Если нет ошибок установка прошла успешна. Запустим Yate затем в новом окне терминала подключаемся к удаленному интерфейсу: rlwrap nc localhost 5038.
Выводим список зарегистрированы пользователи командой
nipc list registered:

IMSI MSISDN
--------------- ---------------
00101001100110 55124323

И по шаблону составляем команду для отправки сообщения smssend <MSISDN> <CALLER> <message> - smssend 5569413 911 Hello CODEBY.NET после отправки наблюдаем результат

На этом пожалуй закончу.