Приветствую всех!
Многие из вас наверняка слышали про OsmocomBB. Однако каких-то исчерпывающих мануалов по запуску почему-то крайне мало. Итак, в ходе данной статьи постараемся максимально простым образом запустить собственную базовую станцию из доступных комплектующих. Постараемся разобраться, как сделать так, чтобы оно точно заработало.
❯ Суть такова
Давным-давно появился такой проект как Osmocom NITB (Network in the box) — открытая реализация опорной GSM-сети. А также CalypsoBTS — базовая станция на базе телефона с чипсетом TI Calypso. Но инструкций по запуску, установке и настройке было не так уж и много (и все они сводились к сборке всего и вся из исходников), да и на данный момент многие из них устарели. Ну что же, время исправить это упущение. Расскажу, так скажем, про быстрый старт.
❯ Что такое Osmocom?
Если вы никогда не сталкивались с Osmocom, сейчас я по-быстрому расскажу, что это. Osmocom — это Open Source Mobile Communications, то есть открытая реализация программного обеспечения для сетей мобильной связи. Проект имеет целый ряд направлений, помимо GSM также существует, например, Osmocom DECT (для радиотелефонов) или Osmocom TETRA (для аппаратов транкинговой связи).
В данной статье будет рассмотрена самая известная его часть — Network in the box, а также сопутствующие программы и компоненты.
❯ Как это работает
Итак, сначала немного поговорим об устройстве GSM-сети. Основными её компонентами являются базовые станции (BTS, в простонародье «вышки». Ну, это ясно, что такое), контроллер базовых станций (BSC), центр коммутации (MSC, который осуществляет связь между абонентами, взаимодействие с телефонными и прочими сетями, коммутацию каналов), домашний и гостевой регистры (HLR и VLR. Это две базы данных, в первой находятся сведения об абонентах сети (такие как IMSI, номер абонента, он же MSISDN, данные об услугах, предоставляемых абоненту...), во второй же — временные данные об абонентах, приписанных к другой сети, но в данный момент находящиеся в нашей), SMS-центр. Разумеется, это далеко не всё, сети имеют куда больше компонентов, например, биллинг, MMS-центр, система идентификации оборудования (именно она проверяет IMEI вашего телефона на наличие в «чёрных» списках) и многое другое. Но для запуска минимальной конфигурации достаточно ранее указанного.
Итак, наша сеть будет состоять из следующих компонентов: OsmoBTS (базовая станция), OpenBSC (контроллер БС), OsmoNITB (HLR, MSC, SMS-центр).
Остановимся поподробнее на первом пункте. Как же получается запустить БС без специфического оборудования? В этом нам помогут телефоны на чипсете TI Calypso. Вообще, спецификации на baseband-процессоры держатся в секрете, но нам очень повезло, так как именно на TI Calypso они утекли. Желающие могут ознакомиться с частью из них, например, тут (а заодно посмотреть на строгие предупреждения Strictly Private, UNDER NON DISCLOSURE AGREEMENT, DO NOT COPY, которые, правда, не спасли материалы от слива). Чипсет этот достаточно старый, так что в поисках телефонов на нём придётся отправиться на вторичку.
Итак, в ОЗУ телефона загружается специальный софт — CalypsoBTS. Именно он и осуществляет работу базовой станции и взаимодействие с компьютером, на котором запущено всё остальное ПО.
Увы, но CalypsoBTS — это не панацея от отключения коммерческих 2G-сетей (которое, впрочем, случится не так уж скоро). Дело в том, что GSM использует технологию временного разделения доступа (TDMA), где для каждого устройства в сети выделен отдельный временной интервал (таймслот). От этого появляется требование наличия точного источника опорной частоты, иначе система не будет работать. В данном проекте поступили просто — синхросигнал берётся с работающей коммерческой БС, канал которой придётся указать при конфигурации. В этих самых коммерческих сетях для обеспечения такой синхронизации БС обычно оснащаются GPS-приёмниками, принимающими сигналы точного времени со спутника.
Зато этот проект позволит без лишних затрат вернуть к жизни какой-нибудь ретро-телефон стандарта GSM, если в вашей стране действует регистрация телефонов по IMEI.
❯ Обзор оборудования
Ну что же, время пробовать запустить свою собственную GSM-сеть. Главным её компонентом будут телефоны Motorola. Идеальным вариантом будут модели C118 или C115. Подойдут также C113 (официально на сайте не указан, но тоже можно использовать), C123, C155. Полный список можно посмотреть тут. Увы, это по сути единственный вариант для создания GSM-сети без SDR. Другие вендоры, безусловно, есть, но это либо нисколько не более распространённые аппараты Sony Ericsson или же вообще всякая редкая экзотика типа OpenMoko. Также ведутся изыскания в области устройств на платформе Mediatek, но на момент написания статьи ни один из чипсетов не поддерживается.
Поэтому идём на вторичку, где приобретаем всё это добро. Благо стоят такие аппараты немного, в районе трёхсот рублей за экземпляр.
Телефоны оснащены фильтрами, не позволяющими прослушивать весь входящий трафик. Это сильно ограничивает возможности по использованию девайсов в качестве базовой станции. Есть инструкции по перепайке фильтров, но в наших опытах все эти ограничения несущественны. Единственное, БС будет иметь крайне малый радиус действия. В моих опытах уже за пределами комнаты телефоны ничего не ловили. Впрочем, для нас это несущественно.
Мне очень крупно повезло: в моём городе обнаружился лот за полторы тысячи рублей, где помимо трёх осмофонов были ещё две раритетные трубки (вначале показалось, что они CDMA, но нет, это тоже GSM). Неплохое пополнение коллекции, что тут сказать. Девайсы были выкуплены без промедления, последующая проверка показала, что телефоны работают и ловят сеть.
Теперь очередь кабелей. Изначально планировал собрать небольшую платку на MAX232 для подключения к COM-портам компьютера, но в итоге остановился на USB2TTL-конвертерах ради универсальности (а вдруг на стационарном компьютере не заработает (спойлер: не заработало), и что тогда, таки идти и всё равно брать USB2TTL?). На переходниках не экономим! Покупать следует экземпляры на базе FTDI FT232 или Silicon Labs CP2102. Именно второй вариант я и прикупил. Всякий шлак (в основном на базе CH340G, часто вообще в виде «китайской капли» на плате) работает, но крайне плохо, так что советую обзавестись нормальными переходниками, чтобы в дальнейшем не разбираться, почему сеть постоянно отваливается. Ну а экземпляры, имеющие на другом конце разъём DB9M и старательно косящие под полноценный RS-232 с его уровнями (но на деле являющиеся обычными USB2TTL) не стоит покупать вообще — это не заслуживающий ни малейшего внимания отстой.
Ещё понадобятся два аудиоджека типа 2,5. Выбирать надо стерео-вариант, то есть штекер должен иметь ровно три контакта.
Ну и как же тут без телефонов, которые будут подключаться к нашей сети. В них также должны стоять SIM-карты, подойдут любые, даже нерабочие просроченные. Главное, чтобы они в принципе были. А вот в осмофонах их наличие или отсутствие ни на что не влияет, можно и не ставить.
❯ Как он в использовании?
Разумеется, до опытов с CalypsoBTS я немного поигрался и с самим телефоном.
Понравился он мне не особо: маленький экран, немного бестолковое после Nokia тех же годов управление. Впрочем, такие аппараты до сих пор работают и всё так же хорошо выполняют свою основную функцию в виде звонков и сообщений.
По коду **16379# можно зайти в сервисное меню, впрочем, ничего особо примечательного в нём нет.
Разумеется, один C118 я разобрал. Не знаю, что я ожидал там увидеть, но внутри он ничем не отличается от других. Препарированный экземпляр отличался проблемой в виде плохо срабатывающих кнопок, пришлось полностью разобрать его, оторвать от платы плёнку с приклеенными к ней мембранами и протереть всё изопропанолом. Стало гораздо лучше. Телефон очень долгое время был в эксплуатации, из корпуса при разборке вытряхнул кучу пыли и какого-то мелкого мусора.
❯ После сборки доработать напильником
Нет, это не фигура речи. «Джеки», которые мне удалось купить, наотрез отказались влезать в разъём телефона: мешал слишком широкий корпус разъёма. Ох уж эти китайцы, у которых что 2,5, что 3,5, что вообще разъём питания 5,5*2,5 — корпус везде одинаковый. Поэтому зажимаем штекер в тиски, берём в руки напильник и срезаем лишнее (к слову говоря, поддавался напильнику он не так охотно, как я предполагал).
Если пилить разъём неохота (или нет под рукой напильника), а корпус телефона ковырять жалко, можно нарыть кабель типа того, что на фото, а другой его конец воткнуть в гнездо 3,5. Как можно видеть, корпус штекера у него имеет нормальный диаметр, так что в телефон входить он будет как влитой.
Теперь берём слегка побитые жизнью, но всё ещё исправно выполняющие свои функции разъёмы и припаиваем провода. Изначально хотел припаять МГТФ, но внезапно наткнулся на какой-то кабель с разъёмами BLS на концах. Разрезаем его пополам и получаем две части, как раз подходящие по длине для наших целей. Паяем по такой схеме: наконечник — RX (TX преобразователя), промежуточный контакт — TX (RX преобразователя), основание — земля. Штатные пластмассовые корпуса на разъёмы не налезали, так что просто зафиксировал провода каплей «горячих соплей» и замотал изолентой.
Теперь втыкаем джек в телефон, а преобразователь — в компьютер. Запускаем какую-нибудь терминалку (подойдёт PUTTY или даже «Монитор» из Arduino IDE. Я использовал Advanced Serial Port Terminal).
Коротко жмём «красную трубочку». В порт должны прийти несколько байт и сообщение ftmtool, а через пару секунд — error. Это штатный бутлоадер телефона, при помощи которого мы и будем запускать на нём свой софт. При коротком нажатии кнопки он ожидает загрузки прошивки и, не получив ответа, показывает error. Если же ничего не выводится — прозваниваем контакты и проверяем, правильно ли мы всё припаяли.
Если же всё работает, можно приступать непосредственно к запуску сети.
❯ Ставим софт
Времена, когда единственным способом запустить Osmocom была сборка из исходников, уже прошли. Есть такой проект как Dragon OS. Его можно сравнить с Kali Linux, только если последний является инструментом хакера, Dragon OS содержит в себе целый ряд средств для работы с SDR. Помимо всего прочего, есть также и Osmocom с CalypsoBTS. То есть всё, что нам надо сделать, так это скачать дистрибутив, накатить его и запустить сеть. А товарищем jhonnybonny был написан простенький (но сильно облегчающий работу) GUI для данной системы. К слову говоря, он уже включён в дистрибутив, так что ставить его отдельно не придётся.
Итак, идём и качаем DragonOS_Focal_R26.iso Именно эту версию, на более новой сеть у меня почему-то не завелась. Ссылку на неё дам в конце статьи. Также на момент публикации статьи она была на SourceForge.
Также нам понадобится VMWare, на неё будем ставить нашу ось. В идеале, конечно, запустить её на отдельном ПК, но у меня под рукой свободного компьютера, способного потянуть такой дистрибутив, не нашлось. Поэтому будем на виртуальной машине.
Итак, загружаемся. Проблем с этим возникнуть не должно. Далее ставим систему на диск. Вообще, всё прекрасно работает и в Live-режиме (я проверял, более того, большая часть скриншотов были сделаны именно в нём), так что если у вас нет свободных гигабайт тридцати на диске, то можно и не ставить. Но лучше всё-таки установить, потом будет меньше проблем с выявлением неведомых глюков. Ну и, конечно, это позволит вам не терять всю конфигурацию при каждой перезагрузке.
Ну что же, будем надеяться, что система встала. Теперь запускаем софт для управления сетью. Открываем терминал и выполняем там примерно следующее:
cd /usr/src/AutoCalypsoBTS/autocalypsobts
sudo python3 autobts.py
После этого появится панель управления.
❯ Конфигурация
Сразу после установки ПО сеть не готова к работе. Необходимо провести конфигурацию. Собственно, по сути это самое главное, так как если задать неправильные значения параметров, то сеть либо упадёт сразу после запуска, либо заработает, но ловиться не будет.
Для начала поставим приложение Net Monitor.
Эта софтина позволяет отображать различные сведения о сотовых вышках, что в дальнейшем нам пригодится не раз. Далее идём в настройки, ищем там пункт «Сотовые сети», выбираем «Только 2G» для одной из SIM-карт.
(тот случай, когда можно в прямом смысле сказать «Простите меня за мой французский». Если что, это не переводная статья, у меня реально стоит такой язык интерфейса)
В некоторых телефонах придётся выбрать «Только GSM», работать тоже будет.
Открываем наше приложение, смотрим, к какой вышке мы подключены. Нас интересует её ARFCN — это номер канала. Возвращаемся к компьютеру, на панели управления жмём голубую шестерёнку, в открывшемся окне находим строчку sudo ./transceiver -a 606, где «606» меняем на выясненное нами число (лично у меня таковым оказалось 23). Это и есть канал той БС, откуда будет браться тактовый сигнал. Выбрать надо тот канал, на котором он хорошо ловится, именно для выяснения этого нам и нужен Net Monitor.
Теперь очередь файлов конфигурации. Нас интересует OpenBSC. Жмём на большую зелёную кнопку с этой надписью, в открывшемся окне удаляем весь текст и вставляем туда примерно следующее:
!
! 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 7229
location_area_code 7619
training_sequence_code 7
base_station_id_code 63
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
Footer
В этом файле есть несколько важных параметров. network country code, mobile network code — сведения о сети. Чтобы телефон автоматически подключился к нашей сети, эти значения должны совпадать с таковыми для SIM-карты, которая в нём стоит. Первые цифры IMSI — это как раз оно. Их также можно узнать в Net Monitor. Если вы решите установить именно такие значение, необходимо выставить auth-policy в closed, чтобы не конфликтовать с реальной сетью. Но делать этого я вам не советую, лучше указать другой код и выбрать сеть в ручном режиме. Список этих кодов можно увидеть, например, тут. Если под рукой есть MultiSIM или старенький Siemens с соответствующим патчем — прекрасно, забиваем туда IMSI с таковыми значениями вроде 255/99 и радуемся результату (а ещё можно забить и свой собственный Ki, чтобы получить возможность активировать шифрование!). long name и short name — имя сети, которое будет отображаться на экране телефона. Указывать в качестве этих значений названия реальных сетей категорически запрещено.
Также имеют значение cell_identity, location_area_code, base_station_id_code, arfcn. Это сведения о БС. Пожалуй, самый важный параметр тут — arfcn, канал, на котором будет производиться передача. Если телефон не видит сеть, играться надо в первую очередь именно с этим параметром. К примеру, тёмно-синяя Motorola M3788 в упор не подключалась к вышке с двадцать пятым каналом, а вот на десятом «брала» сеть сразу после включения. А вот оба ведроида (Sony Xperia L2 и Samsung Galaxy S21 FE) подключались без всяких проблем на любом опробованном канале. Можно предположить, что для ретро-телефонов вроде тех двух моторол с антеннами, что были на одной из ранее представленных фотографий, лучше выбрать номер канала поменьше, но, сдаётся мне, тут много различных причин, начиная от особенностей конкретного телефона и заканчивая тем, на каких каналах вещают вышки в округе. Так что в любом случае придётся экспериментировать. Очень интересно обстоят дела с аппаратами от Nokia: там, где даже старые Motorola заводятся моментально, эти в упор не видели мою БС, показывая после пары минут поиска в ручном режиме лишь коммерческие сети. Ту же Nokia 3310 мне удалось подключить только один раз.
Разумеется, не следует занимать канал, на котором работает коммерческие «вышка». Во-первых, ваша же сеть будет плохо работать, во-вторых, вы будете конфликтовать с БС оператора. Оно вам надо?
❯ Запуск
Итак, для начала инициализируем передатчик.
Для проверки подключаем один телефон. Жмём «TRX1», должно появиться окно с надписью «PRESS POWER BUTTON». Один раз коротко нажимаем красную трубочку, после чего внизу экрана должны появиться бегущие проценты, а на переходнике загорится светодиод.
По окончании загрузки на экране телефона появится «TRX». Окно не закрываем, иначе придётся делать всё заново. Если не получилось, надо жмякнуть кнопку ещё раз. Благо загружается прошивка в ОЗУ, а не в ПЗУ, так что окирпичить телефон таким образом не получится. Также не забываем, что телефоны должны быть заряжены, желательно «под завязку». Пробовать запускать БС с подключённым зарядником не стоит, могут быть глюки.
Если вообще не работает, значит, скорее всего, неправильно выбрана аппаратная платформа (по умолчанию стоит Motorola C118 (Compal E88)) или протокол (по умолчанию C123XOR). Надо отредактировать настройки каждого TRXa в соответствии с моделью телефона.
Теперь очередь тактового генератора (вместе с ним запустится и приёмопередатчик). Жмём голубую кнопку «Clock», телефон должен поймать сигнал БС, а в окне посыпятся голубые строчки «TRX CLK». Если вместо этого идут фиолетовые «Sync failed», значит, надо закрыть это окно, указать другой канал и пробовать снова до победного конца. Если есть и «TRX CLK», и «Sync failed», тоже плохо, закрываем и пробуем снова. Сигнал должен быть устойчивым, иначе сеть упадёт.
Далее жмём большую серую кнопочку «DB», запускающую HLR. Должно будет появиться окно, где внизу будет написано «DB initialized». Если что-то иное — перезагружаем компьютер и пробуем снова. Если всё равно не хочет — переустанавливаем ОС, возможно, что-то накосячено на этом этапе.
Теперь, убедившись, что всё нормально работает, пробуем запускать. Жмём красную кнопку, выскочит очередное окно. И, если всё было сделано правильно (и ни одно из предыдущих окон вы не закрыли), в нём поползут голубые логи. На USB2TTL по очереди начнут часто мигать индикаторы. Если же ничего не происходит или появилось «Shutdown timer expired», значит, сеть упала. Произойти это может по разным причинам, но чаще всего для восстановления работоспособности достаточно закрыть это окно и жмякнуть красную кнопку ещё раз.
Если же сеть не запускается вообще (особенно, если сыпятся строки типа CRITICAL), значит, что-то накосячено в конфигурации. Если запускается, но через пару секунд падает — скорее всего, та же проблема. Бывает и так, что сеть поднялась, но ни один из телефонов её не видит. В таком случае надо поиграться с параметрами.
❯ Испытания
Итак, сеть запущена, можно пробовать. Если вы оказались рисковой личностью и указали данные реальной сети (как я вначале и делал, впрочем, делать так я вам нисколько не советую), располагаем наш телефон поближе к осмофону, включаем на нём авиарежим, тут же его выключаем, открываем Net Monitor и ждём чуда.
Телефон должен подхватить нашу сеть и подключиться к ней. При этом обратите внимание на значения LAC, CID, BSIC и ARFCN: они должны быть теми же, что мы указывали. Если не подключается, снова повторяем эти действия. Или просто даём телефону полежать рядом, обычно, если всё настроено правильно, спустя пару минут он поймает сеть.
Если же сеть наша, всё проще: переключаем режим поиска сети на ручной (благо такая возможность есть на большинстве телефонов) и выбираем нашу сеть. Если она не появилась, пробуем включать авиарежим, чтобы телефон произвёл повторный поиск сети.
При этом в том окне, где мы запустили HLR, пойдут соответствующие логи.
Ну и убедимся снова, что сеть подхвачена. Обратите внимание на «R» рядом с индикатором уровнем сигнала наверху экрана: поскольку сеть не «родная» для этой SIM, телефон считает, что мы в роуминге.
Ну что же, теперь откроем вкладку «Subscribers» на панели управления. Зелёная кнопка — консоль OpenBTS, позволяет подключиться по Telnet к нашему контроллеру БС, жёлтая — проверяет отправку SMS. Жмём её, после чего на телефон должна прийти эсэмэска «SMSTestSMS» с номера 111 (первое нажатие создаёт запись с номером 111 и IMSI из строки девяток в HLR). Если не пришла, значит, скорее всего, он потерял сеть. Чёрно-красная кнопка обнуляет базу HLR, а фиолетовая — позволяет просмотреть список абонентов. Первая строчка — это IMSI, вторая — номер телефона.
❯ Возьми трубку
Убедившись, что сеть работает, можно подключить и второй телефон (впрочем, если вас не интересуют голосовые вызовы, можно и не подключать). Для этого выключаем Clock и BTS, затем опять жмём маленькую голубую кнопку. Добавляем к строке запуска трансивера ключ -2. Далее нажимаем «TRX2», проделываем всё те же манипуляции со вторым осмофоном. Теперь опять запускаем Clock, убеждаемся, что сигнал идёт, а лампочки на переходниках мигают. Запускаем БС.
Чтобы узнать номер, совершаем звонок по номеру *#100#. В ответ придёт сообщение типа Your extension is XXX.
Всё, теперь можно звонить.
.
Ну, или отправлять SMS (MTS RUS тут — имя SIM-карты, забитое по умолчанию в настройках, а не имя сети). К слову говоря, делать это можно и с компьютера, для чего открываем консоль OpenBTS, где вводим:
subscriber imsi 111111111111111 sms sender extension 111 send Test SMS...
Строку единиц надо заменить на IMSI того абонента, кому придёт это SMS. Три единицы — номер, который будет указан как номер отправителя. Для того, чтобы отправлять SMS под видом других номеров, необходимо забить их в HLR:
en
subscriber create imsi 123456789012345
subscriber imsi 123456789012345 extension 999
Если реальный выход в сеть абонента с таким номером не планируется, IMSI можно забить любой. Extension же — это и есть номер. К слову говоря, именно так добавляются абоненты, когда отключено автоматическое их занесение при подключении (auth-policy closed).
А ещё можно запустить аппаратный SMS-бомбер. Для этого поднимаем сеть, а затем запускаем уже имеющийся для этого скрипт, для чего выполняем в терминале примерно следующее:
cd /usr/src/osmo-nitb-scripts/auxiliary
sudo python2 sms_spam.py [номер] [число сообщений] [само сообщение]
Теперь этому абоненту, если он подключён к нашей сети, будут сыпаться SMS заданного содержания.
❯ Вот как-то так
Как можно видеть, сеть успешно работает. Можно пробовать отправлять SMS, звонить или даже подключать SIP. В общем, делать всё, для чего предназначен CalypsoBTS.
Такие дела.
❯ Ссылки
Материалы и софт:
- Тот самый дистрибутив. Вообще, на момент написания статьи он есть на SourceForge, но, сдаётся мне, через этак полгода его снесут.
- DragonOS на SourceForge
- Даташит на TI Calypso
- Список осмофонов
- Как запустить шифрование в своей сети
- Github jhonnybonny
- Net Monitor
- Mobile Network Codes
Другие статьи по теме:
Автор: Лев