GSM на столе

Разработка под веб: HTTP, HTML, CSS, JavaScript, Python… Ох. Всё одно и то же. Так хочется отвлечься на что-нибудь радикально другое. Я же обитаю в московском хакспейсе Нейрон! Почему бы не поспрашивать вокруг?

Например, в Нейроне сидят ребята из компании Fairwaves, разрабатывающие GSM-оборудование для недорогих сотовых сетей. Весь стек — от железа до софта — доступен под open source лицензией. Да, да, включая железо. Поэтому совсем не обязательно работать в Fairwaves, чтобы познакомиться с этой технологией. И результат копания можно выложить на GitHub или сделать вклад в существующий проект. Как минимум, будет чем похвастаться на собеседованиях.

Пара дней чтения документации, пролистывания кода, десятки навязчивых вопросов и экспериментов (спасибо Александру Чемерису и Ивану Ключникову за помощь). И вот результат — собственная GSM-сеть под контролем моего Макбука:

HabraFon

Тестировать сеть пришли постояльцы хакспейса:

Робот получает смс 'Привет, Хабра!'

О чём они разговаривают?

Роботы разговаривают у ноутбука

Как это работает? Вот так:

 +----------------------------------------+
 | Макбук                                 |
 |                                        |
 |  +-------------------------------+     |
 |  | VirtualBox виртуалка          |     |
 |  |                               |     |
 |  |  +----------------------+     |     |             |
 |  |  | Docker контейнер     |     |     |         \   |   /       |
 |  |  | (Ubuntu 12.04)       |     |     |          \  |  /        |
 |  |  |                      |     |     |           \ | /         |
 |  |  |  +-------------+     |     |     |        +----+----+     +-------+
 |  |  |  | OpenBSC     |     |     |     |        |         |     |       |
 |  |  |  | (osmo-nitb) |<-------------------------+ базовая |     | GSM   |
 |  |  |  |             |     |     |     |        | станция |     | теле- |
 |  |  |  +-------------+     |     |     |        |         |     | фон   |
 |  |  |                      |     |     |        |         |     |       |
 |  |  +----------------------+     |     |        +---------+     +-------+
 |  |                               |     |
 |  +-------------------------------+     |
 |                                        |
 +----------------------------------------+

На компьютере работаёт VirtualBox c Ubuntu, на котором запущен Docker контейнер c Ubuntu 12.04 и open source контроллером базовых станций OpenBSC (Base Station Controller, BSC). В моём случае OpenBSC работает в режиме network-in-the box и включает в себя не только BSC, но и простую реализацию всех остальных компонентов, нужных для небольшой GSM-сети (MSC, HLR, VLR, AuC и SMSC).

К контроллеру по локальной сети подключается базовая станция Fairwaves UmSITE, на котором крутится OsmoBTS — open source реализация базовой станции GSM (Base Transceiver Station, BTS):

фотка UmSITE

Для запуска GSM-сети достаточно одной (!) команды:

docker run -v $HOME/db:/var/db -i -t -p 3002:3002 -p 3003:3003 -p 30000:30000/udp -p 30001:30001/udp -p 30002:30002/udp -p 30003:30003/udp -p 30004:30004/udp -p 30005:30005/udp -p 30006:30006/udp -p 30007:30007/udp shamrin/osmonitb start-nitb -i 10.0.0.10 -n HabraFon GSM1800 10 20

(Нет Докера? Установите его. У вас не Ubuntu и Докер не ставится? Тогда cмотрите ниже.)

10.0.0.10 нужно заменить на сетевой адрес Docker хоста (ifconfig). А 10 и 20 на используемые номера каналов, ARFCN. Какие каналы указывать, спросите вы? Это сложный вопрос. На частотах GSM нельзя ничего излучать без лицензии, не зависимо от мощности. А простым смертным лицензию получить невозможно. Остаются следующие варианты:

  1. Тестировать в клетке Фарадея. Если нет клетки Фарадея подходящих размеров, сымитировать ее в глухом подвале, где не ловит сотовая сеть и где нет риска помешать сотовым операторам (и они не помешают вам). В этом случае весь радиочастотный спектр в вашем распоряжении и можно указать любую пару чисел в диапазоне от 512 до 885 с разницей не меньше чем в 2-3 канала (лучше в 10 каналов). Например, 600 и 700.
  2. Под присмотром квалифицированного специалиста найти пару неиспользуемых каналов и указать эти каналы при запуске. Например, с помощью телефона, умеющего сканировать эфир, такого как Sagem OT. Еще раз, под присмотром квалифицированного специалиста!

Информацию о других параметрах контейнера и команды start-nitb смотрите в моём репозитарии.

А если у меня не Ubuntu?

Если у вас нет Ubuntu 12.04+, установите Vagrant и VirtualBox и запустите виртуалку Ubuntu + Docker с помощью этих команд:

git clone https://github.com/shamrin/osmonitb-docker
cd osmonitb-docker
vagrant up
vagrant ssh

Почему Docker?

Да, Docker использовать не обязательно. Можно и руками всё поставить и настроить. Но, во-первых, мне хотелось поэкспериментировать с Docker. Во-вторых, с ним можно надёжно завернуть, а потом повторить конфигурацию всей машины (debian-пакеты, вручную установленные программы, файлы конфигурации). В-третьих, список из десятков команд и манипуляций заменяется на одну — docker run ….

Почему не OpenBTS?

Кроме описанных проектов Osmocom (OpenBSC, OsmoBTS, OsmoTRX) есть другая open source реализация GSM протоколов — OpenBTS. Возраст обоих проектов примерно одинаков, но OpenBTS более известен в интернете благодаря чуть большей дружелюбности к новичкам. Если не вникать в технические различия, то в реальных условиях Osmocom работает лучше:
We started using Osmocom software at the beginning of this year and found that it works much better in real life deployments than OpenBTS. It almost never crashes, has more features, scales better and is more flexible.

Где взять оборудование?

Самый простой вариант для жителей Москвы — пользоваться оборудованием в хакспейсе Нейрон :)

Если вы живёте не в Москве или просто хотите иметь оборудование, чтобы поиграть с GSM у себя дома, есть две сравнительно недорогих альтернативы для лабораторного применения:

  • Ettus Research USRP разных версий
  • Fairwaves UmTRX

По возможностям они приблизительно близки, но у UmTRX есть преимущества:

  • все схемы платы и исходные коды софта доступны под open source лицензией
  • дешевле, чем аналогичная конфигурация на USRP
  • плата может работать с двумя независимыми каналами, в то время как USRP имеют только один канал
  • GPS для точной подстройки опорного генератора частоты уже встроен, а не закупается отдельно, как в USRP (плавающая частота генератора приводит в GSM к неожиданным проблемам)
  • поддержка российского производителя (и не надо платить таможне)

Если хочется немного сэкономить и не страшны проблемы с опорным генератором, то можно использовать USRP B200. У неё всего один канал, но для домашних экспериментов это не принципиально. Опорный генератор у USRP B200 не соответствует по точности стандарту GSM, но в большинстве случаях его хватает для простой работы «на столе». С USRP B200 могут возникнут проблемы при хэндовере от одной вашей базовой станции к другой, но вы же не планируете строить подноценную сеть на коленке, правда?

Но я могу быть необъективным, проверяйте сами.

Спасибо Андрею Бахмату, Ивану Ключникову, Павлу Труханову, Александру Чемерису и другим участникам хакспейса за комментарии к черновикам этого текста.
Поделиться публикацией

Комментарии 55

    +6
    Это же мечта половины владельцев телефонов в России/СНГ последних лет — отвязать сотовые от опсосов!
    Установив такую БС, можно устроить нано-/фемто-соту и замыкать комнатные переговоры на своей БС. И только по выходу включаться в общие сети. Да, есть комменческие нано-фемто-соты, которые требуют договора с опсосом, а некоторые — лицензии, но такой подход (OpenBSC, OsmoBTS, ...) позволяет двигаться свободнее.

    Но у вас сейчас нет коммутации ни с городским номером, ни тем более с какой-либо сотовой сетью. Пробовали копать в этом направлении?
      +8
      К сожалению, в России (да и в большинстве других стран) нельзя излучать в диапазонах GSM без лицензии. Что касается связи с внешним миром (голос+смс), можно подключить всё вышеописанное к SIP-провайдеру. Сам я этого не пробовал, но у других вполне получалось. Ключевые слова: Linux Call Router (LCR), FreeSwitch. Некоторые подробности настройки на сайте Osmocom.
        +1
        Даже фемтосоты требуют лицензии? Ведь для излучающих устройств (пульты ДУ, воки-токи, любительские ДУ для квадрокоптеров) есть предел мощности, не требующий лицензии (что-то в пределах 50 мВт для FM-диапазона).

        Как вариант, возможны фемтосоты по договору с оператором, под их лицензией: www.mobile-networks.ru/news/mts_nachal_prodazhu_femtosot_fizliczam.html. Но там, наверное, все звонки будут тарифицироваться через оператора, т.е. никакого смысла в плане отвязки от оператора.
          +2
          Да, насколько я знаю, лицензия в GSM-частотах нужна вне зависимости от мощности. Перечисленные устройства (воки-токи, пулты) излучают в других диапазонах. А фемтосоты МТС привязаны к МТС, как вы и написали.
            –2
            на ваш сотовый телефон до 2х покажите лицензию
              +1
              «До 2х»? Что вы имеете в виду?
              0
              Новый краудфайндинг проект — собираем деньги на лицензию.
              С каким-то лицензиатом был такой казус — он закупал у «провайдера» лицензии разрешение и распространял их бесплатно. Только там про софт шла речь.
        0
        О да, затраты несомненно стоят этого. Не знаю где вы такую статистику про половину россиян брали, сейчас с операторами всё более менее, лучше сделать у отдельно взятых людей явно не получится :)
          +2
          Половина населения страны живет в стране Москва и её области. Остальная половина — за пределами. Вот и получается 50% :)
            +2
            Я живу в 350км от Москвы, проблем 0.
              +1
              Живу в Новосибирске, проблем почти ноль.
              Но страна-то огромная. Стоит отъехать за 20км за город, как связи нет. Или есть, но EDGE.
                +1
                И как вам там поможет собственная сота?
                  +2
                  Кейс: загородный дом, сотовой связи нет, но есть интернет.
                  +1
                  то есть EDGE — это уже не связь что ли? О_О
                  Зажрались…
            +1
            замыкать комнатные переговоры?
            Думаю, ОпСоСы так просто не отдадут лакомый кусочек, да и предчуствую, с интернет-провайдерами скоро станет грустно.
            • НЛО прилетело и опубликовало эту надпись здесь
            • НЛО прилетело и опубликовало эту надпись здесь
                0
                Спасибо, про YateBTS раньше не слышал. Lab Kit стоит $1600. Fairwaves UmTRX стоит чуть дешевле (но к нему нужно добавить компьютер с Линуксом). Ettus Research USRP ещё дешевле.

                Кстати, в YateBTS крутится MBTS, который форк OpenBTS, который работает хуже софта от Osmocom. Это по данным на год назад (также смотрите «Почему не OpenBTS?» в статье).
                  0
                  Дополнение про MBTS. Автор утверждает, что переписывание привело к улучшению стабильности (это было болезнью OpenBTS). Но проект свежий, надо проверять.
                    +1
                    Мы обсуждали это с Дэвидом, и он действительно устверждает, что YateBTS более стабилен, чем OpenBTS. Но это утверждение, которое ещё требует проверки тестированим в реальных условиях. OpenBTS тоже выглядел как отличная идея, пока не начались реальные деплойменты. И в итоге от него отказались сначала мы, а потом и сам Дэвид. Подождём результатов тестирования YateBTS в реальных условиях и тогда можно будет судить о том, насколько его архитектура удачна.
                      0
                      Я так понимаю openBSC более стабилен в реальных условиях эксплуатации?
                        0
                        Да.
                        +1
                        Немного оффтоп: а вы, как разработчики, которые сменили OpenBTS на OsmoBTS, можете вкратце сравнить качество архитектуры и кода этих 2х проектов? Игрался около года назад с OpenBTS, даже в домашних условиях стабильность не произвела впечатления, да и сам код на мой взгляд не самый лучший. Не в обиду разработчикам, проект сам по себе здоровский.
                        Этот пост напомнил об альтернативе — OsmoBTS, пока ещё не смотрел, но очень интересуют ваши комментарии.
                          +2
                          Про личной опыт сказать не могу (с OpenBTS не работал, только расспрашивал про него в Fairwaves). Но есть различия, лежащие на поверхности.

                          OpenBTS:
                          • Язык: C++
                          • Архитектура: монолитная
                          • Многозадачность: треды
                          • Стиль разработки: cathedral с периодической публикацией исходников (как Android)

                          Стек Osmocom (OsmoBTS, OpenBSC):
                          • Язык: C
                          • Архитектура: модульная, во многом в соответствии с архитектурой GSM
                          • Многозадачность: асинхронная
                          • Стиль разработки: bazaar, с открытым репозитарием (как Linux)

                            +1
                            На наш взгляд, код Osmocom намного стабильнее и чище. И продолжает быстро улучшаться.
                          +2
                          Lab Kit для YateBTS — это просто компьютер с BladeRF и одним RF фильтром. совсем самодельный вариант обойдётся вам дешевле.

                          Кстати, когда сравниваете стоимость — не забывайте, что у UmTRX есть 2 канала приёмопередачи и GPS. У всех остальных — всего один канал, и частоту нужно подстраивать вручную (если это вообще возможно).
                      +3
                      А как происходит регистрация в сети? SIM-карта не нужна?
                        +1
                        Я использовал настройку OpenBSC, которая пускает всех, с SIM-картой любого оператора:

                        auth policy accept-all

                          0
                          Надо только выбрать на телефоне «настольную» сеть и узнать выданный сетью номер, набрав *#100#.
                            0
                            Нужно сказать, что этот режим нужно использовать с большой осторожностью. А если вы не знаете что имено вы далаете, то лучше не использоваь вообще.

                            Суть в том, что используя режим accept-all, вы не контролируете, какие телефоны подключатся к вашей сети. Т.е. вы можете оставить кого-то без связи, если его телефон случайно подключится к вашей сети. А именно в этот момент человеку может быть нужно срочно позвонить в скорую помощь, или он будет ждать звонка от любимой девушки.
                              +4
                              С этой настройкой он переключится сам как в случае роуминга или только при ручном выборе сети? Можно ли таким образом изготовить imsi catcher?
                                0
                                С этой настройкой телефон подключается только при ручном выборе сети (или если телефон не был ни к чему подключен). IMSI catcher сделать можно, но подробностей не знаю.
                                  0
                                  Зависит от телефона. Может пытаться и сам приконектиться, без ручного выбора.
                            0
                            Мобильные телефоны сейчас вроде в основном quad-band, т.е. 850/900/1800/1900. В Европе используется 900/1800. Может можно брать каналы из 850/1900, по крайней мере не перекрывающиеся с опсосами?
                            • НЛО прилетело и опубликовало эту надпись здесь
                                0
                                850 — на Яндекс.Маркете почему-то нет выбора такой частоты.
                                  +1
                                  В восточном полушарии 850 вообще не используется, так что не удивительно. Телефоны под такой диапазон придется искать где-то в Латинской Америке.
                                    0
                                    В России продаётся масса tri-band и quad-band телефонов, которые поддерживают 850.
                                0
                                как обстоят дела с UMTS? EDGE?
                                  0
                                  Присоединяюсь к вопросу egorF. Еще вопрос — если использовать ваш девайс для развертывания сети с целью передачи видео для управления группой дронов в тех местах, где связи нет совсем — на какой радиус действия и скорость можно рассчитывать?
                                    0
                                    Радиус действия зависит от местности, от мощности усилителя и от антенны. Максимум по GSM-спецификации — 35 километров. В реальности километров 10 вполне реализуемы.

                                    Стек Osmocom поддерживает пока только GPRS скорости. Для дронов лучше WiFi сейчас, мне кажется.
                                    +2
                                    Готовой open source реализации UMTS-стека (3G) нет. И, скорее всего, не будет. Общее мнение хорошо описывает автор OpenBTS: «3G will come and go and will be replaced by LTE before 2G GSM disappears.»

                                    GPRS в проекте Osmocom реализован. EGPRS (более известен как EDGE) ещё нет.
                                  0
                                  А плата за 1500$ это самый дешевый вариант, еще дешевле развернуть лабараторию нельзя уже никак?
                                    0
                                    Вроде бы на базе каких-то SDR можно, они подешевле будут.
                                      0
                                      Ettus Research USRP дешевле, но смотрите про недостатки выше. С сайта Ettus почему-то убрали цены: было от $600 и выше. В России можно купить где-то за $1000, тоже в Fairwaves (но надо связываться и уточнять цену/наличие). Есть ещё BladeRF, но я ничего про них не знаю.
                                      0
                                      А были ли измерения характеристик того что получилось?
                                      Мощьность, уровни внеполосных излучений, чувствительность, многосигнальная избирательность и тд.
                                      Что бы понимать что получилось за железо, а не под чем управляется.
                                      Выкладывайте на все общее, желательно в сравнении с тем же Ettus Research USRP.

                                      Хорошо что это делают у нас.
                                      Довольно часто не хватает специалистов в областях проекта,
                                      где поверхностных знаний не достаточно.
                                      Хотя это компенсируется покупателями, которые
                                      делают расчет радиотрассы и электромагнитной совместимости словами «далеко ли берет».
                                        0
                                        А есть что-нибудь подобное для CDMA?
                                          0
                                          Насколько я знаю, нет.

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

                                        Самое читаемое