Как запустить собственную GSM-сеть за пять минут при помощи SDR

Приветствую всех!
Давным-давно я уже рассказывал про то, как в домашних условиях поднять GSM-сеть при помощи комплектующих, доступных любому школьнику. И в той статье я мельком упомянул, что идеальным в плане производительности вариантом будет запускать сети при помощи SDR, а не телефонов.

8ey4i1uohwssaav1cleog4ot2t8.jpeg

Итак, в сегодняшней статье поговорим о том, как быть владельцам SDR, желающим запустить свою GSM-сеть. Узнаем, какой софт нужен, чтобы заставить её работать в прямом смысле слова за пять минут. Попутно запустим GPRS и ненадолго побываем в 2007 году. Традиционно будет много интересного.

Суть такова


image

Многие помнят тот поистине легендарный пост про то, как из двух телефонов и обычного компьютера собрать базовую станцию. Но всё же у той конфигурации был целый ряд недостатков, которых лишена БС на базе SDR. В свою очередь, единственным минусом того, что будет рассмотрено в данной статье, является высокая стоимость оборудования.

Также на просторах Хабра был найден пост про Osmocom в Docker-контейнере, однако за десять лет софт порядком устарел, теперь есть куда новые версии с большими возможностями и более стабильной работой.
И вот в мои руки попал полнодуплексный SDR, а это значит, что самое время попробовать запустить сеть при помощи него и узнать, что же из этого выйдет.

В чём преимущества сети на базе SDR?


В отличие от телефонов, мы будем избавлены от целого ряда проблем, неминуемо возникающих при попытке использовать подобное железо:

  • Диапазон частот. В телефонах используются фильтры, не позволяющие прослушивать входящий трафик. Моя БС работала исключительно из-за их неидеальности, лучшим же решением было бы заменить их, что доступно не каждому ввиду необходимости наличия оборудования и хороших навыков пайки, дабы не запороть плату телефона. SDR лишён этой особенности.
  • Генератор. Точности внутреннего генератора SDR с лихвой хватит, чтобы обеспечить корректную работу сети. В телефонах такого устройства нет, поэтому нам приходилось ловить тактовый сигнал от других коммерческих вышек.
  • Подключение к компьютеру. В случае с SDR не придётся заниматься ерундой типа пайки проводов, проверки заряда аккумулятора и тому подобными вещами, достаточно просто подключить его к ПК и больше не думать о том, что причины неработоспособности сети кроются где-то здесь.
  • Производительность. В отличие от телефонов, можно создать конфигурацию, где будут доступны сразу и звонки, и SMS, и интернет.
  • Стабильность. Сеть на базе SDR при правильной настройке не падает.
  • Поддерживаемые устройства. При запуске сети на базе телефонов я смог подключить к ней далеко не все устройства, какие у меня были. В частности, телефон от Nokia смог поймать её только один раз. В случае же с SDR все имевшиеся у меня телефоны, которые участвовали в испытаниях, подключались без проблем. Товарищ axilirator подсказал, что связано это с частотной характеристикой сигнала, так как телефон после попытки подключения к операторской сети ориентируется на неё, а лабораторную не видит. В моём случае эта проблема если и возникала, то устранялась банальной перезагрузкой трубки.


Таким образом, если у вас есть желание серьёзно заниматься исследованием устройства и работы сотовых сетей, приобретение полнодуплексного SDR должно стать вашим первым шагом.

Обзор оборудования


image

А вот и SDR. Это USRP B200mini-i, которого для данных опытов хватает с избытком. Само собой, к нему понадобится и компьютер, который будет им управлять. Виртуалка или Raspberry не подойдёт.

khyd1cb3yecg45qedwdkbi3-olu.jpeg

Далее понадобятся телефоны, которые будут ловить сеть. В них должны быть симки, какие именно — неважно, лишь бы были. Вот, например, Samsung Galaxy M12, уже фигурировавший в опытах с LTE.

qkqtii6evs-qruprmicnmrrgtda.jpeg

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

hy-hm2ilaa6fqtxql6_netqszfq.jpeg

Nokia E90, крутейший девайс, совмещающий в себе кнопочный телефон, коммуникатор на Symbian и клавиатурный КПК.

Софт


Как и в прошлых опытах с SDR, использовать будем дистрибутив DragonOS. Там уже есть все необходимые компоненты для запуска сети, достаточно лишь слегка поменять настройки. Уже не придётся ни собирать софт из исходников, ни искать примеры файлов конфигурации.
Как и в прошлых статьях, ссылки на всё необходимое я оставлю в конце.

Конфигурация


Теперь, когда ОС загружена, можно приступать к настройке.
Открываем папку osmo-nitb-scripts (ярлык на неё есть в меню «Пуск» в разделе «Other»), а в ней — папку configs. Нас интересует файл openbsc.cfg.

injhjaxn1jn_cbv8p5e3tdkyauk.jpeg

Вообще, сеть будет работать и с тем файлом, что есть по умолчанию, однако SMS не будут ходить из-за неправильной настройки таймслотов и протокола SMPP. Так что приводим файл к следующему виду:

!
! OpenBSC configuration saved from vty gprs mode none |  phys_chan_config SDCCH8
!   !
password foo
!
line vty
 no login
!
e1_input
 e1_line 0 driver ipa
network
 network country code 250
 mobile network code 10
 short name MaFrance
 long name MaFrance
 auth policy accept-all
 location updating reject cause 13
 encryption a5 0
 neci 1
 rrlp mode none
 mm info 1
 handover 0
 handover window rxlev averaging 10
 handover window rxqual averaging 1
 handover window rxlev neighbor averaging 10
 handover power budget interval 6
 handover power budget hysteresis 3
 handover maximum distance 9999
 subscriber-keep-in-ram 0
 bts 0
  type sysmobts
  band GSM900
  cell_identity 1087
  location_area_code 13415
  training_sequence_code 7
  base_station_id_code 56
  ms max power 30
  rxlev access min 0
  periodic location update 1000
  cell reselection hysteresis 14
  cell reselection offset 120
  temporary offset 0
  penalty time 20
  channel allocator ascending
  rach tx integer 9
  rach max transmission 7
  ip.access unit_id 1801 0
  oml ip.access stream_id 255 line 0
  gprs mode none
  trx 0
   rf_locked 0
   arfcn 25
   nominal power 34
   max_power_red 20
   rsl e1 tei 0
   timeslot 0
    phys_chan_config CCCH+SDCCH4
    hopping enabled 0
   timeslot 1
    phys_chan_config TCH/H
    hopping enabled 0
   timeslot 2
    phys_chan_config TCH/H
    hopping enabled 0
   timeslot 3
    phys_chan_config TCH/H
    hopping enabled 0
   timeslot 4
    phys_chan_config TCH/H
    hopping enabled 0
   timeslot 5
    phys_chan_config TCH/H
    hopping enabled 0
   timeslot 6
    phys_chan_config TCH/H
    hopping enabled 0
   timeslot 7
    phys_chan_config TCH/H
    hopping enabled 0
nitb
 assign-tmsi
 subscriber-create-on-demand random 100 199
smpp
 local-tcp-port 2775
 system-id OSMO-SMPP
 policy accept-all
 esme OSMPP
  password 1234
  osmocom-extensions


Коротко пройдёмся по параметрам.

  • ARFCN — самый важный. Это номер канала, на котором будет работать наша вышка. Необходимо воспользоваться приложением по типу Net Monitor, чтобы узнать, на каких каналах работают вышки в округе и выбрать незанятый.
  • LAC. Код зоны, использующийся для определения местоположения. Вообще, он не влияет на работу, но некоторые телефоны могут не подключаться, если он равен 0 или 1.
  • CID. Код соты. Выбирается аналогично LAC.
  • MCC — код страны. Для России это 250. Можно выбрать другой, но стоит учитывать, что не все телефоны смогут подключиться к такой сети.
  • MNC — код сети. Нужно открыть список сотовых операторов (он есть, например, тут или тут)
  • Long name и Short name. Это, как нетрудно догадаться, имя сети, отображаемое в строке состояния на телефоне. Устанавливается любое желаемое.


Теперь разберёмся с таймслотами. Каждый из них конфигурируется на определённый тип канала. Подробнее о них можно почитать тут.

Теперь, когда параметры изменены, запускаем нашу сеть:

sudo ./main.py


Если у вас не LimeSDR, а USRP, то запускать надо следующим образом:

sudo ./main.py -d uhd


Если всё было сделано правильно, то на экране должно будет появиться примерно следующее:

rdir9ppnyvy-p64lgn_ucaz-x8w.jpeg

А через несколько секунд — вот это:

fryfgfib6wv0zwons3llbwajhqk.jpeg

Всё, сеть работает. На всё ушло меньше пяти минут не считая времени загрузки ОС. Можно пробовать подключаться.
В этом окне отображаются IMSI абонентов, подключившихся к сети, а также их номера.

vvysyvwe9vs7qiez0myuklwlnxa.jpeg

Как показали опыты, все имевшиеся у меня телефоны без проблем подключались к созданной сети.

gtsv9gt9rn9ivvfsqbeceds3lf4.jpeg

artug-qdipgscp5_xbbn811eubu.jpeg

Запустились и две более новые легенды. Всё, можно звонить и отправлять SMS. Точно так же, как мы делали это при помощи телефонов.

А что насчёт интернета?


Но, конечно, при помощи Osmocom можно поднять и GPRS. Причём в случае использования SDR можно получить полноценную сеть, где будут работать все составляющие: звонки, SMS, USSD и пакетные данные. В случае использования телефонов нам пришлось бы либо подключать дополнительные моторолы, либо потерять возможность звонить.
Ну что же, самое время попробовать запустить GPRS.

GPRS и как он работает


И перед началом экспериментов традиционно разберёмся с тем, как пакетный трафик в 2G-сети перенаправляется во внешний мир.

GPRS имеет свою опорную сеть. Она представляет собой расширение для сети GSM, добавляющее в неё возможность обмена пакетными данными.

Итак, сеть с поддержкой GPRS дополнительно включает в себя следующие компоненты:

  • PCU (Packet Control Unit). Это устройство управления пакетами, позволяющее в паре с контроллером БС отправлять и принимать те самые данные.
  • SGSN (Serving GPRS Support Node). Этот узел отвечает за обслуживание абонентов — обмен пакетами, тарификацию, проверку APN (Access Point Name) точки доступа, распределение ресурсов.
  • GGSN (Gateway GPRS Support Node). Шлюз, соединяющий сотовую сеть с другими сетями передачи данных.


Для работы GPRS на телефоне должна быть создана точка доступа, включающая в себя APN, логи и пароль. Обычно она создаётся сразу при регистрации в сети оператора и участие пользователя в этом не требуется.

Конфигурация


Как и в прошлом случае, для начала необходимо настроить сеть.

image

Необходимо узнать имя подключения, через которое компьютер получает доступ в интернет. Сделать это можно, открыв ifconfig или iwconfig.

Теперь открываем opengts_egprs.cfg из папки configs. И приводим его к следующему виду:

!
! OpenBSC configuration saved from vty
!   !
password foo
!
line vty
 no login
!
e1_input
 e1_line 0 driver ipa
 e1_line 0 port 0
 no e1_line 0 keepalive
network
 network country code 250
 mobile network code 10
 short name MaFrance
 long name MaFrance
 auth policy accept-all
 authorized-regexp .*
 location updating reject cause 13
 encryption a5 0
 neci 1
 rrlp mode none
 mm info 1
 handover 0
 handover window rxlev averaging 10
 handover window rxqual averaging 1
 handover window rxlev neighbor averaging 10
 handover power budget interval 6
 handover power budget hysteresis 3
 handover maximum distance 9999
 subscriber-keep-in-ram 0
 bts 0
  type sysmobts
  band GSM900
  cell_identity 7229
  location_area_code 7619
  training_sequence_code 7
  base_station_id_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
  temporary offset 0
  penalty time 20
  radio-link-timeout 32
  channel allocator ascending
  rach tx integer 9
  rach max transmission 7
  channel-descrption attach 1
  channel-descrption bs-pa-mfrms 5
  channel-descrption bs-ag-blks-res 1
  ip.access unit_id 1801 0
  oml ip.access stream_id 255 line 0
  gprs mode egprs
  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-combined-si
  trx 0
   rf_locked 0
   arfcn 100
   nominal power 34
   max_power_red 20
   rsl e1 tei 0
   timeslot 0
    phys_chan_config CCCH+SDCCH4
    hopping enabled 0
   timeslot 1
    phys_chan_config SDCCH8
    hopping enabled 0
   timeslot 2
    phys_chan_config TCH/H
    hopping enabled 0
   timeslot 3
    phys_chan_config TCH/H
    hopping enabled 0
   timeslot 4
    phys_chan_config TCH/H
    hopping enabled 0
   timeslot 5
    phys_chan_config TCH/H
    hopping enabled 0
   timeslot 6
    phys_chan_config PDCH
    hopping enabled 0
   timeslot 7
    phys_chan_config PDCH
    hopping enabled 0
nitb
 assign-tmsi
 subscriber-create-on-demand random 100 199
smpp
 local-tcp-port 2775
 system-id OSMO-SMPP
 policy accept-all
 esme OSMPP
  password 1234
  osmocom-extensions


Здесь активирован GPRS, а также изменены два таймслота — теперь им выделены пакетные данные. Настройки, касающиеся сети (имя, канал, код…) остались те же самые, их также нужно изменить, как в прошлый раз.

l435fm-mthjjd0arnuiezntbkn4.jpeg

На телефоне необходимо создать точку доступа. APN её может быть любым, как и в случае с srsRAN он не проверяется, нужна она лишь для того, чтобы телефон сам начал подключение.
Итак, время запускать сеть. На этот раз делается это так:

sudo ./main.py -d uhd --gprs -i (тут ваше имя подключения)


Если в более старых руководствах надо было править файлы конфигурации, менять iptables, то тут достаточно просто указать подключение, которое связывает машину с внешним миром.

wo0sbaropsvdav3q9imh4fqfrj4.jpeg

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

t5q813xgq75olyb7tdpg5r4ibbo.jpeg

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

ruqhgssrm_p-ugzilfvv4okymzu.jpeg

Далее я подключил и свой основной телефон. Он тоже отлично заработал и подхватил созданную сеть.

Возвращаем свой две тысячи седьмой


Пожалуй, одна из немногих составляющих старого железа и «тех» времён в принципе, к которой я не испытываю ностальгии, — мобильный интернет.

По поистине конским тарифам (единицы рублей за мегабайт) предоставлялось весьма слабенькое соединение. Мобильные версии сайтов тогда тоже сильно отличались от привычных нам. Существовало два протокола — WAP (созданный специально для GSM-сетей, работающий через шлюз поверх GPRS или SMS), в котором передавалиись страницы в формате WML, и обычный HTTP. Позднее префикс «wap.» получили вообще почти все сайты, адаптированные под сотовые телефоны.

Сайты эти тоже были весьма своеобразными — на типичной страничке было в наличии практически всё, от новостей и мобильного софта (с непременными разделами для J2ME, WM и Symbian) до знакомств и дешёвой эротики. Многие телефоны из использовавшихся в те времена до сих пор хранят на своих картах памяти картинки с котиками, скачанные по пять рублей за мегабайт.

Также существовал такой бич для баланса как «premium-rate сайты». Суть их заключалась в том, что при заходе на с виду обычный сайт абонент мог не только просадить весь свой баланс, но и уйти в глубокий минус — тарификация по ним была повышенной (вплоть до сотен рублей за мегабайт), отчего заход на такие страницы обходился во всех смыслах дорого (на безлимитных тарифах они всё равно списывали деньги). Не обходилось и без грязного SEO (в духе тех времён) в виде размещения на страницах элементов с вот таких вот сайтов по типу «невидимых» картинок и тому подобного материала.

К слову говоря…

Нечто подобное сейчас тоже существует, правда, в куда меньших масштабах (например, у Tele2 — на страницах ошибок по типу 404).
Случайный жмяк по рекламе (которую ещё иногда делают картинкой в виде видеоплеера, чтобы кто-то намеренно нажал), и пользователь немедленно получает подписку за двадцать-тридцать рублей в сутки, отказаться от которой очень сложно.


Для работы полноценного WAP сейчас понадобится WAP-шлюз, поэтому в данной статье ограничимся только HTTP.

cm4o9xmjmqxqz5kynoit_1jejfq.jpeg

Увы, Siemens так и не смог загрузить ни один сайт. То ли что-то с настройкой точек доступа, то ли его браузер поддерживает только WML, но ничего больше унылой надписи «Соединение…» из него выжать не удалось.

0ktryfakakrfiyevmqrhxaimzr4.jpeg

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

qdnt6-62efjzckgmtwajglwq7xy.jpeg

…, а потом и какой-то древний мобильный сайт.

xej4cswu1vmd_0dj9alvlje_wb8.jpeg

А вот он же на экране Nokia N95.

jstwe7pkg3loac9am1ipqwauug0.jpeg

Интересно, обновляются ли они? Или эти «обновления дня» остаются такими уже лет десять?

qhpwhasqva62gfq9jgjbkwpcog8.jpeg

Отправляемся гуглить и находим список из всё ещё живых старых сайтов. А вот и ещё один экземпляр…

rg7fpdhnxxfu8btuzbagvrg6ibm.jpeg

Забавно — программы для WM, а значок от Win8/WP…

fdfs7liookwge6ycrqmcogexzze.jpeg

lankost.net, один из крупнейших ныне живых.

dyibthpc_rj1ikvwounujrankna.jpeg

wap.polifonia.ru.

gab1uujjserb0bmnwyr-9orbyio.jpeg

А вот и WML-версия. Так выглядели сайты на заре мобильного интернета — просто белый фон, чёрный текст и синие ссылки.

j1f_itmjlqoofmfhu_a2hf0u6wu.jpeg

Далее я попробовал открыть что-то из этих сайтов на Sony Ericsson. old-dos.ru открыть он не смог — после десяти минут напряжённой загрузки крякнул и выдал ошибку. А вот ранее показанные открылись без проблем.

fe049b8n0u07mzxvntxgxkesz2g.jpeg

Всё успешно работает.

0anq2urat0-tutd9erqgbqaihre.jpeg

Да, атмосферу «тех» годов удалось воссоздать практически полностью. Единственное отличие — платить за эти похождения уже не придётся, ведь работает всё через безлимитный домашний интернет.

Вот как-то так


Как можно видеть, при помощи SDR сеть запускается буквально в несколько щелчков мышью.
Увы, GPRS сейчас практически умер, как я верно заметил в посте про модемы, если сейчас на телефоне горит «E», то, по сути, интернета нет — ни один сайт не грузится, а приложения по типу Telegram выдают вечное «Waiting for network…». Сейчас GPRS используется по большей части для околопромышленного использования — через него работают кассовые аппараты и терминалы и передают телеметрию. Впрочем, даже в этих областях он вытесняется куда более новыми стандартами связи.

Такие дела.


Возможно, захочется почитать и это:
b5pjofdoxth14ro-rjsrn7sbmiy.png

© Habrahabr.ru