Автор материала: MaFrance351

Приветствую всех!
Ранее я уже делился опытом по настройке домашней GSM-сети с использованием простых компонентов. В той статье я вскользь упомянул, что наиболее производительным решением является применение программно-определяемого радио (SDR), а не смартфонов. Сегодня мы детально разберем этот подход.
В этом руководстве я подробно расскажу владельцам SDR-устройств, как развернуть свою полноценную сотовую сеть. Вы потратите всего около пяти минут на изучение необходимого ПО, после чего сеть буквально заработает. Мы также активируем GPRS и совершим небольшое путешествие в прошлое, в 2007 год. Впереди много интересного.
❯ В чем суть метода?

Многие помнят знаменитый пост о сборке базовой станции из двух телефонов и компьютера. Однако у той конфигурации было множество недостатков, которых лишена станция на основе SDR. Главный и, пожалуй, единственный минус обсуждаемого сегодня метода — относительно высокая стоимость оборудования.
На просторах интернета можно найти руководства по запуску Osmocom в Docker-контейнерах, но за десятилетие это ПО серьезно устарело. Сейчас доступны новые версии с улучшенным функционалом и повышенной стабильностью.
Появление у меня полнодуплексного SDR стало сигналом: пора запускать с его помощью сеть и исследовать все возможности.
❯ Преимущества сети на базе SDR
Использование SDR позволяет избежать целого ряда проблем, характерных для решения на телефонах:
Диапазон частот. В обычном телефоне стоят фильтры, блокирующие прослушивание входящего трафика. Мои старые базовые станции на телефонах работали лишь потому, что эти фильтры были неисправны. Для их замены нужны оборудование и навыки пайки, что доступно не каждому. SDR такой проблемы не имеет.
Генератор тактовой частоты. Встроенный генератор SDR обладает достаточной точностью для стабильной работы сети. Телефону же приходилось синхронизироваться по сигналу от коммерческих вышек.
Подключение к ПК. С SDR не нужно паять провода или следить за зарядом батареи. Достаточно подключить устройство к компьютеру, и можно не беспокоиться о проблемах на физическом уровне.
Производительность. В отличие от телефона, на SDR можно гибко настраивать конфигурации, обеспечивая одновременную работу звонков, SMS и интернета.
Стабильность. Правильно настроенная сеть на SDR не будет неожиданно «падать» или зависать.
Совместимость с устройствами. При запуске сети на телефонах некоторые устройства (например, Nokia) подключались с трудом или вообще не находили сеть. С SDR все протестированные телефоны подключались без проблем. Коллега предположил, что дело в форме сигнала: телефон пытается синхронизироваться с сетью оператора, а самодельная «лабораторная» сеть его не распознает. В моем случае проблему иногда решал простой перезапуск телефона.
Таким образом, если вы хотите глубоко изучить архитектуру и принципы работы сотовых сетей, покупка полнодуплексного SDR — ваш первый и необходимый шаг.
❯ Необходимое оборудование

Ключевой компонент — сам SDR. Для подобных экспериментов отлично подойдет, например, USRP B200mini-i. Естественно, потребуется и компьютер для управления. Виртуальные машины или маломощные одноплатные компьютеры вроде Raspberry Pi для этой задачи не годятся.

Также понадобится телефон для подключения к вашей сети. Нужна SIM-карта, но подойдет абсолютно любая, даже неактивная. На фото — Samsung Galaxy M12, который уже участвовал в экспериментах с LTE.

Три легендарных кнопочных телефона: Nokia 3310, Siemens CX75, Sony Ericsson K750i.

Nokia E90 — уникальный гибрид кнопочного телефона, коммуникатора на Symbian и КПК с клавиатурой.
❯ Программное обеспечение
Как и в предыдущих экспериментах с SDR, мы будем использовать дистрибутив DragonOS. Все необходимые для запуска сети компоненты уже в него включены, поэтому останется лишь немного подкорректировать конфигурационные файлы. Не придется компилировать ПО из исходников или искать рабочие примеры конфигов. Все нужные ссылки я, как обычно, оставлю в конце статьи.
❯ Настройка сети
После загрузки ОС можно приступать к конфигурации.
Откройте папку Osmo-nitb-scripts (ее ярлык есть в меню «Пуск» в разделе «Дополнительно»), а внутри нее — папку configs. Нам нужен файл openbsc.cfg.

Сеть в целом заработает и с настройками по умолчанию, но SMS могут не проходить из-за некорректных параметров тайм-слота и протокола SMPP. Поэтому сократим файл до следующего вида:
!
! Конфигурация OpenBSC, сохраненная из режима vty
gprs нет
phys_chan_config SDCCH8
!
!
password foo
!
line vty
no login
!
e1_input 0
e1_line 0 driver ipa
network
network country code 250
mobile network code 10
short name MaFrance
long name MaFrance
accept all auth policies
location updating reject cause 13
encryption a5 0
neci 1
no rrlp mode
mm info 1
absorb 0
handover rxlev averaging window 10
handover rxqual averaging window 1
handover neighbour rxlev averaging window 10
handover power budget interval 6
handover power budget hysteresis 3
handover maximum distance 9999
subscriber ram storage 0
bant ban 0
type mobile
gsm band 900
cell id 1087
location area code 13415
training sequence code 7
base station identity code 56
ms max power 30
rxlev access min 0
periodic location update 1000
cell reselection hysteresis 14
cell reselection offset 120
time offset 0
penalty time 20
channel allocator ascending
rac 9
max transmission rack 7
ip.access device-id 1801 0
oml ip.access stream-id 255 line 0
no gprs mode
trx 0
rf_lock 0
arfcn 25
nominal power 34
max power reduction 20
rssi e1 te 0
timeslot 0
phys_chan_config CCCH+SDCCH4
handover enabled 0
timeslot 1
phys_chan_config TCH/H
handover enabled 0
timeslot 2
phys_chan_config TCH/H
handover enabled 0
timeslot 3
phys_chan_config TCH/H
handover enabled 0
timeslot 4
phys_chan_config TCH/H
handover enabled 0
timeslot 5
phys_chan_config TCH/H
handover enabled 0
timeslot 6
phys_chan_config TCH/H
handover enabled 0
timeslot 7
phys_chan_config TCH/H
handover enabled 0
pg
assign-tmsi
subscriber create-on-demand random 100 199
smpp
local-tcp-port 2775
system-id OSMO-SMPP
accept all rules
esme osmocom
password 1234
osmocom extension
Кратко разберем ключевые параметры:
ARFCN — самый важный параметр. Это номер радиочастотного канала, на котором будет работать ваша базовая станция. С помощью приложения вроде Net Monitor нужно узнать, какие каналы заняты операторами в вашей местности, и выбрать свободный.
LAC (Location Area Code) — код местоположения. На работу сети напрямую не влияет, но некоторые телефоны могут не подключиться, если значение равно 0 или 1.
CID (Cell ID) — идентификатор соты. Подбирается аналогично LAC.
MCC (Mobile Country Code) — код страны. Для России это 250. Можно указать и другой, но учтите, что не все телефоны смогут подключиться к «иностранной» сети.
MNC (Mobile Network Code) — код сети. Нужно свериться со списком операторов (например, на специализированных сайтах).
long name и short name — имя сети, которое будет отображаться на экране телефона. Можете задать любое.
Обратите внимание: Признаки, указывающие на то, что ваш партнер следит за вами при помощи вашего же мобильника.
Далее идут настройки тайм-слотов (timeslots). Каждый из них конфигурируется под определенный тип канала. Подробнее об этом можно почитать в документации.
После внесения изменений запускаем сеть командой:
sudo ./main.py
Если у вас не LimeSDR, а USRP, команда будет такой:
sudo ./main.py -d uhd
Если все сделано верно, на экране появится примерно следующее:

А через несколько секунд:

Это означает, что сеть запущена. Весь процесс, не считая загрузки ОС, занял менее пяти минут. Теперь можно пробовать подключаться.
В этом окне отображаются IMSI подключенных абонентов и их количество.

В моих тестах все телефоны подключались к сети без каких-либо проблем.


В игру вступили две новые легенды. Теперь можно совершать звонки и отправлять SMS — всё как в настоящей сети.
❯ А как насчет интернета?
Конечно, с Osmocom можно настроить и GPRS. Более того, с SDR вы получаете полноценную сеть со всеми работающими сервисами: голосовые вызовы, SMS, USSD и пакетная передача данных. В решении на телефонах для звонков требовалась дополнительная Motorola, иначе функционал был ограничен.
Теперь давайте запустим GPRS.
❯ Принцип работы GPRS
Прежде чем переходить к практике, кратко разберемся, как пакетный трафик в сети 2G попадает во внешний мир.
GPRS — это надстройка над GSM, добавляющая возможность обмена данными в пакетном режиме.
Соответственно, сеть с поддержкой GPRS включает дополнительные компоненты:
PCU (Packet Control Unit) — блок управления пакетами, обычно интегрированный с контроллером базовых станций (BSC).
SGSN (Serving GPRS Support Node) — обслуживающий узел, отвечающий за коммутацию пакетов, биллинг, проверку APN (имени точки доступа) и распределение ресурсов между абонентами.
GGSN (Gateway GPRS Support Node) — шлюзовой узел, соединяющий мобильную сеть с внешними сетями передачи данных (например, интернетом).
Для работы GPRS на телефоне должна быть создана точка доступа (APN) с соответствующими настройками. Обычно операторы делают это автоматически при регистрации в сети.
❯ Настройка GPRS
Как и в предыдущем случае, начинаем с конфигурации сети.

Сначала нужно узнать имя сетевого интерфейса, через который ваш компьютер выходит в интернет. Для этого используйте команды ifconfig или iwconfig.
Затем откройте файл opengts_egprs.cfg из папки configs и приведите его к следующему виду:
!
! Настройки OpenBSC, сохраненные из vty
!
!
password foo
!
line vty
no login
!
e1_input 0
e1_line 0 driver ipa
e1_line 0 port 0
e1_line 0 no keepalive
network
network country code 250
mobile network code 10
short name MaFrance
long name MaFrance
accept all auth policies
allowed regexp .*
location updating reject cause 13
encryption a5 0
neci 1
no rrlp mode
mm info 1
absorb 0
handover rxlev averaging window 10
handover rxqual averaging window 1
handover neighbour rxlev averaging window 10
handover power budget interval 6
handover power budget hysteresis 3
handover maximum distance 9999
subscriber ram storage 0
bant ban 0
type mobile
gsm band 900
cell id 7229
location area code 7619
training sequence code 7
base station identity code 63
codec support fr efr amr
ms max power 15
rxlev access min 0
periodic location update 1000
cell reselection hysteresis 14
cell reselection offset 120
time offset 0
penalty time 20
radio link timeout 32
channel allocator ascending
rac 9
max transmission rack 7
channel description attach 1
channel description bs-pa-mfrms 5
channel description bs-ag-blks-res 1
ip.access device-id 1801 0
oml ip.access stream-id 255 line 0
gprs mode
gprs routing area 1
gprs cell bvci 1234
gprs nsei 1234
gprs nsvc 0 nsvci 1234
gprs nsvc 0 local udp port 23001
gprs nsvc 0 remote udp port 23000
gprs nsvc 0 remote ip 127.0.0.1
no force attach
trx 0
rf_lock 0
arfcn 100
nominal power 34
max power reduction 20
rssi e1 te 0
timeslot 0
phys_chan_config CCCH+SDCCH4
handover enabled 0
timeslot 1
phys_chan_config SDCCH8
handover enabled 0
timeslot 2
phys_chan_config TCH/H
handover enabled 0
timeslot 3
phys_chan_config TCH/H
handover enabled 0
timeslot 4
phys_chan_config TCH/H
handover enabled 0
timeslot 5
phys_chan_config TCH/H
handover enabled 0
timeslot 6
phys_chan_config PDCH
handover enabled 0
timeslot 7
phys_chan_config PDCH
handover enabled 0
pg
assign-tmsi
subscriber create-on-demand random 100 199
smpp
local-tcp-port 2775
system-id OSMO-SMPP
accept all rules
esme osmocom
password 1234
osmocom extension
Здесь активирован режим GPRS, а также изменена конфигурация двух тайм-слотов под передачу пакетных данных (PDCH). Параметры сети (имя, канал, коды) нужно изменить, как и в предыдущем разделе.
На телефоне необходимо вручную создать точку доступа (APN). В случае с srsRAN имя APN может быть любым, так как оно не проверяется сервером и нужно лишь для инициации соединения самим телефоном.
Теперь запускаем сеть с поддержкой GPRS. Команда будет выглядеть так:
sudo ./main.py -d uhd --gprs -i [имя_сетевого_интерфейса]
В отличие от старых руководств, где требовалось редактировать iptables и другие конфиги, здесь достаточно просто указать интерфейс, связывающий вашу машину с внешней сетью.

Для теста использовался тот же Samsung-смартфон. После подключения к сети и включения мобильных данных в строке состояния появилась надпись «EDGE». Отлично, это работает!

Стоит отметить, что пользоваться интернетом было не всегда просто. Во-первых, многие приложения настойчиво пытаются получить доступ к сети. Во-вторых, скорость на узких каналах далека от современных стандартов, и «тяжелые» сайты грузятся медленно. Однако легковесные ресурсы вроде old-dos.ru открываются вполне приемлемо.

Затем я подключил к сети кнопочный телефон. Он также успешно зарегистрировался в сети и обнаружил GPRS.
❯ Возвращение в 2007 год
Мобильный интернет — пожалуй, один из немногих аспектов «тех времен», по которому я не испытываю ностальгии.
За совершенно заоблачные по тем временам деньги (несколько рублей за мегабайт) мы получали очень медленное соединение. Мобильные версии сайтов тоже сильно отличались от современных. Было два основных протокола: WAP (специально созданный для GSM и работающий через шлюз по GPRS или даже SMS), который использовал страницы в формате WML, и обычный HTTP, но с префиксом «wap.». Многие сайты имели мобильные версии.
Эти сайты были особенными. На типичной странице можно было найти всё: от новостей и софта (с обязательными разделами под J2ME, Windows Mobile и Symbian) до знакомств и дешевого контента для взрослых. Многие телефоны того времени до сих пор хранят на картах памяти картинки, скачанные по 5 рублей за штуку.
Тогда же появилось и понятие «сайтов премиум-класса». Их суть была в том, что посещение, казалось бы, обычной страницы могло не только опустошить баланс, но и увести его в серьезный минус. Тарифы на них были завышены (до сотен рублей за мегабайт), а доступ — платным при любых условиях. Использовались и грязные SEO-приемы вроде «невидимых» изображений, нагружающих трафик.
Кстати...
Нечто подобное существует и сегодня, но в меньших масштабах (например, страницы с ошибкой 404 у некоторых операторов).
Случайный клик по рекламе (иногда стилизованной под видеоплеер) может привести к списанию 20-30 рублей в день. Отписаться от такой услуги бывает очень сложно.
Для полноценной работы WAP потребуется WAP-шлюз, поэтому в рамках этой статьи ограничимся HTTP.

К сожалению, Siemens не смог загрузить ни один сайт. Возможно, проблема в настройках точки доступа, или его браузер поддерживает только WML. Максимум, что удалось получить — сообщение «Подключение...».

Поэтому на помощь пришла Nokia E90, которая успешно загрузила old-dos.ru…

...и другие старые мобильные сайты.

А это экран Nokia N95.

Интересно, эта лента новостей обновлялась? Или «что нового сегодня» было таким же и десять лет назад?

Поищем в Google список старых сайтов, которые еще живы. И вот еще один пример…

Любопытно: это программа для Windows Mobile, а иконка — из Windows 8/Windows Phone…

lankost.net — один из крупнейших сохранившихся сайтов той эпохи.
> Продолжение материалов, связанных с Habr. К сожалению, все фотографии не уместились (их было очень много), но я постарался выбрать самые показательные и интересные. :)

Материал подготовлен специально для читателей Timeweb Cloud и Pikabu. Подписывайтесь на наш блог, чтобы не пропустить новые интересные статьи.
Также подписывайтесь на наш эксклюзивный Telegram-канал, посвященный техническим, познавательным и юмористическим материалам об IT, технологиях и электронике. Будет интересно!
Timeweb Cloud — это реферальная ссылка на облачный сервис, которая помогает поддерживать проект.
Больше интересных статей здесь: Гаджеты.
Источник статьи: Как запустить собственную GSM-сеть за пять минут при помощи SDR.