Итак, в сегодняшней статье поговорим о том, как быть владельцам SDR, желающим запустить свою GSM-сеть. Узнаем, какой софт нужен, чтобы заставить её работать в прямом смысле слова за пять минут. Попутно запустим GPRS и ненадолго побываем в 2007 году. Традиционно будет много интересного.
❯ Суть такова
Многие помнят тот поистине легендарный пост про то, как из двух телефонов и обычного компьютера собрать базовую станцию. Но всё же у той конфигурации был целый ряд недостатков, которых лишена БС на базе SDR. В свою очередь, единственным минусом того, что будет рассмотрено в данной статье, является высокая стоимость оборудования.
Также на просторах Хабра был найден пост про Osmocom в Docker-контейнере, однако за десять лет софт порядком устарел, теперь есть куда новые версии с большими возможностями и более стабильной работой.
И вот в мои руки попал полнодуплексный SDR, а это значит, что самое время попробовать запустить сеть при помощи него и узнать, что же из этого выйдет.
❯ В чём преимущества сети на базе SDR?
В отличие от телефонов, мы будем избавлены от целого ряда проблем, неминуемо возникающих при попытке использовать подобное железо:
- Диапазон частот. В телефонах используются фильтры, не позволяющие прослушивать входящий трафик. Моя БС работала исключительно из-за их неидеальности, лучшим же решением было бы заменить их, что доступно не каждому ввиду необходимости наличия оборудования и хороших навыков пайки, дабы не запороть плату телефона. SDR лишён этой особенности.
- Генератор. Точности внутреннего генератора SDR с лихвой хватит, чтобы обеспечить корректную работу сети. В телефонах такого устройства нет, поэтому нам приходилось ловить тактовый сигнал от других коммерческих вышек.
- Подключение к компьютеру. В случае с SDR не придётся заниматься ерундой типа пайки проводов, проверки заряда аккумулятора и тому подобными вещами, достаточно просто подключить его к ПК и больше не думать о том, что причины неработоспособности сети кроются где-то здесь.
- Производительность. В отличие от телефонов, можно создать конфигурацию, где будут доступны сразу и звонки, и SMS, и интернет.
- Стабильность. Сеть на базе SDR при правильной настройке не падает.
- Поддерживаемые устройства. При запуске сети на базе телефонов я смог подключить к ней далеко не все устройства, какие у меня были. В частности, телефон от Nokia смог поймать её только один раз. В случае же с SDR все имевшиеся у меня телефоны, которые участвовали в испытаниях, подключались без проблем. Товарищ axilirator подсказал, что связано это с частотной характеристикой сигнала, так как телефон после попытки подключения к операторской сети ориентируется на неё, а лабораторную не видит. В моём случае эта проблема если и возникала, то устранялась банальной перезагрузкой трубки.
Таким образом, если у вас есть желание серьёзно заниматься исследованием устройства и работы сотовых сетей, приобретение полнодуплексного SDR должно стать вашим первым шагом.
❯ Обзор оборудования
А вот и SDR. Это USRP B200mini-i, которого для данных опытов хватает с избытком. Само собой, к нему понадобится и компьютер, который будет им управлять. Виртуалка или Raspberry не подойдёт.
Далее понадобятся телефоны, которые будут ловить сеть. В них должны быть симки, какие именно — неважно, лишь бы были. Вот, например, Samsung Galaxy M12, уже фигурировавший в опытах с LTE.
Три легенды кнопочных телефонов — Nokia 3310, Siemens CX75, Sony Ericsson K750i.
Nokia E90, крутейший девайс, совмещающий в себе кнопочный телефон, коммуникатор на Symbian и клавиатурный КПК.
❯ Софт
Как и в прошлых опытах с SDR, использовать будем дистрибутив DragonOS. Там уже есть все необходимые компоненты для запуска сети, достаточно лишь слегка поменять настройки. Уже не придётся ни собирать софт из исходников, ни искать примеры файлов конфигурации.
Как и в прошлых статьях, ссылки на всё необходимое я оставлю в конце.
❯ Конфигурация
Теперь, когда ОС загружена, можно приступать к настройке.
Открываем папку osmo-nitb-scripts (ярлык на неё есть в меню «Пуск» в разделе «Other»), а в ней — папку configs. Нас интересует файл openbsc.cfg.
Вообще, сеть будет работать и с тем файлом, что есть по умолчанию, однако 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
Если всё было сделано правильно, то на экране должно будет появиться примерно следующее:
А через несколько секунд — вот это:
Всё, сеть работает. На всё ушло меньше пяти минут не считая времени загрузки ОС. Можно пробовать подключаться.
В этом окне отображаются IMSI абонентов, подключившихся к сети, а также их номера.
Как показали опыты, все имевшиеся у меня телефоны без проблем подключались к созданной сети.
Запустились и две более новые легенды. Всё, можно звонить и отправлять 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, логи и пароль. Обычно она создаётся сразу при регистрации в сети оператора и участие пользователя в этом не требуется.
❯ Конфигурация
Как и в прошлом случае, для начала необходимо настроить сеть.
Необходимо узнать имя подключения, через которое компьютер получает доступ в интернет. Сделать это можно, открыв 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, а также изменены два таймслота — теперь им выделены пакетные данные. Настройки, касающиеся сети (имя, канал, код...) остались те же самые, их также нужно изменить, как в прошлый раз.
На телефоне необходимо создать точку доступа. APN её может быть любым, как и в случае с srsRAN он не проверяется, нужна она лишь для того, чтобы телефон сам начал подключение.
Итак, время запускать сеть. На этот раз делается это так:
sudo ./main.py -d uhd --gprs -i (тут ваше имя подключения)
Если в более старых руководствах надо было править файлы конфигурации, менять iptables, то тут достаточно просто указать подключение, которое связывает машину с внешним миром.
Для проверки был взят всё тот же смартфон от Samsung. Подключаемся к сети, включаем сотовые данные, и в строке состояние появляется «EDGE». Отлично, работает.
У меня было много опасений, что интернет работать не будет. Во-первых, куча приложений, стремящихся дорваться до сети во что бы то ни стало, во-вторых, сам размер сайтов, не позволяющий пропихнуть их через канал, по скорости недалеко ушедший от модемного. Но легковесные сайты по типу old-dos.ru вполне открылись.
Далее я подключил и свой основной телефон. Он тоже отлично заработал и подхватил созданную сеть.
❯ Возвращаем свой две тысячи седьмой
Пожалуй, одна из немногих составляющих старого железа и «тех» времён в принципе, к которой я не испытываю ностальгии, — мобильный интернет.
По поистине конским тарифам (единицы рублей за мегабайт) предоставлялось весьма слабенькое соединение. Мобильные версии сайтов тогда тоже сильно отличались от привычных нам. Существовало два протокола — WAP (созданный специально для GSM-сетей, работающий через шлюз поверх GPRS или SMS), в котором передавалиись страницы в формате WML, и обычный HTTP. Позднее префикс «wap.» получили вообще почти все сайты, адаптированные под сотовые телефоны.
Сайты эти тоже были весьма своеобразными — на типичной страничке было в наличии практически всё, от новостей и мобильного софта (с непременными разделами для J2ME, WM и Symbian) до знакомств и дешёвой эротики. Многие телефоны из использовавшихся в те времена до сих пор хранят на своих картах памяти картинки с котиками, скачанные по пять рублей за мегабайт.
Также существовал такой бич для баланса как «premium-rate сайты». Суть их заключалась в том, что при заходе на с виду обычный сайт абонент мог не только просадить весь свой баланс, но и уйти в глубокий минус — тарификация по ним была повышенной (вплоть до сотен рублей за мегабайт), отчего заход на такие страницы обходился во всех смыслах дорого (на безлимитных тарифах они всё равно списывали деньги). Не обходилось и без грязного SEO (в духе тех времён) в виде размещения на страницах элементов с вот таких вот сайтов по типу «невидимых» картинок и тому подобного материала.
Случайный жмяк по рекламе (которую ещё иногда делают картинкой в виде видеоплеера, чтобы кто-то намеренно нажал), и пользователь немедленно получает подписку за двадцать-тридцать рублей в сутки, отказаться от которой очень сложно.
Для работы полноценного WAP сейчас понадобится WAP-шлюз, поэтому в данной статье ограничимся только HTTP.
Увы, Siemens так и не смог загрузить ни один сайт. То ли что-то с настройкой точек доступа, то ли его браузер поддерживает только WML, но ничего больше унылой надписи «Соединение...» из него выжать не удалось.
Поэтому на помощь был призван Nokia E90, который смог загрузить вначале old-dos.ru…
… а потом и какой-то древний мобильный сайт.
А вот он же на экране Nokia N95.
Интересно, обновляются ли они? Или эти «обновления дня» остаются такими уже лет десять?
Отправляемся гуглить и находим список из всё ещё живых старых сайтов. А вот и ещё один экземпляр…
Забавно — программы для WM, а значок от Win8/WP…
lankost.net, один из крупнейших ныне живых.
wap.polifonia.ru.
А вот и WML-версия. Так выглядели сайты на заре мобильного интернета — просто белый фон, чёрный текст и синие ссылки.
Далее я попробовал открыть что-то из этих сайтов на Sony Ericsson. old-dos.ru открыть он не смог — после десяти минут напряжённой загрузки крякнул и выдал ошибку. А вот ранее показанные открылись без проблем.
Всё успешно работает.
Да, атмосферу «тех» годов удалось воссоздать практически полностью. Единственное отличие — платить за эти похождения уже не придётся, ведь работает всё через безлимитный домашний интернет.
❯ Вот как-то так
Такие дела.
Автор: Лев