GSM на столе

в 16:15, , рубрики: Без рубрики

Разработка под веб: 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 могут возникнут проблемы при хэндовере от одной вашей базовой станции к другой, но вы же не планируете строить подноценную сеть на коленке, правда?

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

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

Автор: shamrin

Источник

Поделиться

* - обязательные к заполнению поля