- PVSM.RU - https://www.pvsm.ru -
Разработка под веб: HTTP, HTML, CSS, JavaScript, Python… Ох. Всё одно и то же. Так хочется отвлечься на что-нибудь радикально другое. Я же обитаю в московском хакспейсе Нейрон! Почему бы не поспрашивать вокруг?
Например, в Нейроне сидят ребята из компании Fairwaves [1], разрабатывающие GSM-оборудование для недорогих сотовых сетей. Весь стек — от железа до софта — доступен под open source лицензией. Да, да, включая железо [2]. Поэтому совсем не обязательно работать в Fairwaves, чтобы познакомиться с этой технологией. И результат копания можно выложить на GitHub или сделать вклад в существующий [3] проект [2]. Как минимум, будет чем похвастаться на собеседованиях.
Пара дней чтения документации, пролистывания кода, десятки навязчивых вопросов и экспериментов (спасибо Александру Чемерису и Ивану Ключникову за помощь). И вот результат — собственная GSM-сеть под контролем моего Макбука:
Тестировать сеть пришли постояльцы хакспейса:
О чём они разговаривают?
Как это работает? Вот так:
+----------------------------------------+ | Макбук | | | | +-------------------------------+ | | | VirtualBox виртуалка | | | | | | | | +----------------------+ | | | | | | Docker контейнер | | | | / | | | | (Ubuntu 12.04) | | | | / | | | | | | | | / | | | | +-------------+ | | | +----+----+ +-------+ | | | | OpenBSC | | | | | | | | | | | | (osmo-nitb) |<-------------------------+ базовая | | GSM | | | | | | | | | | станция | | теле- | | | | +-------------+ | | | | | | фон | | | | | | | | | | | | | +----------------------+ | | +---------+ +-------+ | | | | | +-------------------------------+ | | | +----------------------------------------+
На компьютере работаёт VirtualBox c Ubuntu, на котором запущен Docker [4] контейнер c Ubuntu 12.04 и open source контроллером базовых станций OpenBSC [5] (Base Station Controller, BSC). В моём случае OpenBSC работает в режиме network-in-the box [6] и включает в себя не только BSC, но и простую реализацию всех остальных компонентов, нужных для небольшой GSM-сети (MSC, HLR, VLR, AuC [7] и SMSC [8]).
К контроллеру по локальной сети подключается базовая станция Fairwaves UmSITE, на котором крутится OsmoBTS [9] — open source реализация базовой станции GSM (Base Transceiver Station, BTS):
Для запуска 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
(Нет Докера? Установите [4] его. У вас не Ubuntu и Докер не ставится? Тогда cмотрите ниже.)
10.0.0.10
нужно заменить на сетевой адрес Docker хоста (ifconfig). А 10
и 20
на используемые номера каналов, ARFCN [10]. Какие каналы указывать, спросите вы? Это сложный вопрос. На частотах GSM нельзя ничего излучать без лицензии, не зависимо от мощности. А простым смертным лицензию получить невозможно. Остаются следующие варианты:
Информацию о других параметрах контейнера и команды start-nitb
смотрите в моём репозитарии [12].
А если у меня не Ubuntu?
Если у вас нет Ubuntu 12.04+, установите Vagrant [13] и VirtualBox [14] и запустите виртуалку Ubuntu + Docker с помощью этих команд:
git clone https://github.com/shamrin/osmonitb-docker cd osmonitb-docker vagrant up vagrant ssh
Почему Docker?
Да, Docker использовать не обязательно. Можно и руками всё поставить [15] и настроить [16]. Но, во-первых, мне хотелось поэкспериментировать с Docker. Во-вторых, с ним можно надёжно завернуть, а потом повторить конфигурацию всей машины (debian-пакеты, вручную установленные программы, файлы конфигурации). В-третьих, список из десятков команд и манипуляций заменяется на одну — docker run …
.
Почему не OpenBTS?
Кроме описанных проектов Osmocom (OpenBSC, OsmoBTS, OsmoTRX [17]) есть другая open source реализация GSM протоколов — OpenBTS [18]. Возраст обоих проектов примерно одинаков, но OpenBTS более известен в интернете благодаря чуть большей дружелюбности к новичкам. Если не вникать в технические различия, то в реальных условиях Osmocom работает лучше [19]:
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.
Где взять оборудование?
Самый простой вариант для жителей Москвы — пользоваться оборудованием в хакспейсе Нейрон [20] :)
Если вы живёте не в Москве или просто хотите иметь оборудование, чтобы поиграть с GSM у себя дома, есть две сравнительно недорогих альтернативы для лабораторного применения:
По возможностям они приблизительно близки, но у UmTRX есть преимущества:
Если хочется немного сэкономить и не страшны проблемы с опорным генератором, то можно использовать USRP B200. У неё всего один канал, но для домашних экспериментов это не принципиально. Опорный генератор у USRP B200 не соответствует по точности стандарту GSM, но в большинстве случаях его хватает для простой работы «на столе». С USRP B200 могут возникнут проблемы при хэндовере [24] от одной вашей базовой станции к другой, но вы же не планируете строить подноценную сеть на коленке, правда?
Но я могу быть необъективным, проверяйте сами.
Спасибо Андрею Бахмату, Ивану Ключникову, Павлу Труханову, Александру Чемерису и другим участникам хакспейса за комментарии к черновикам этого текста.
Автор: shamrin
Источник [25]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/news/56059
Ссылки в тексте:
[1] Fairwaves: http://www.fairwaves.ru/
[2] железо: http://umtrx.org/
[3] существующий: http://osmocom.org
[4] Docker: https://docker.io/
[5] OpenBSC: http://openbsc.osmocom.org/
[6] network-in-the box: http://openbsc.osmocom.org/trac/wiki/osmo-nitb
[7] MSC, HLR, VLR, AuC: https://ru.wikipedia.org/wiki/GSM_core_network
[8] SMSC: https://ru.wikipedia.org/wiki/SMS-%D1%86%D0%B5%D0%BD%D1%82%D1%80
[9] OsmoBTS: http://openbsc.osmocom.org/trac/wiki/OsmoBTS
[10] ARFCN: https://en.wikipedia.org/wiki/Absolute_radio-frequency_channel_number
[11] клетке Фарадея: https://ru.wikipedia.org/wiki/%D0%9A%D0%BB%D0%B5%D1%82%D0%BA%D0%B0_%D0%A4%D0%B0%D1%80%D0%B0%D0%B4%D0%B5%D1%8F
[12] моём репозитарии: https://github.com/shamrin/osmonitb-docker
[13] Vagrant: http://www.vagrantup.com/
[14] VirtualBox: https://www.virtualbox.org/
[15] поставить: http://openbsc.osmocom.org/trac/wiki/network_from_scratch
[16] настроить: http://umtrx.org/applications/osmocom/
[17] OsmoTRX: http://openbsc.osmocom.org/trac/wiki/OsmoTRX
[18] OpenBTS: http://openbts.org/
[19] работает лучше: https://fairwaves.ru/wp/telecom-revolution-starts-in-yaviche-mexico/
[20] хакспейсе Нейрон: http://neuronspace.ru/
[21] USRP: https://www.ettus.com/product/category/USRP-Bus-Series
[22] UmTRX: http://shop.fairwaves.ru/accessories-and-diy/UmTRX-transceiver-for-OpenBTS-and-Osmocom-OpenBSC
[23] неожиданным проблемам: https://wush.net/trac/rangepublic/wiki/Clocks
[24] хэндовере: https://ru.wikipedia.org/wiki/%D0%A5%D1%8D%D0%BD%D0%B4%D0%BE%D0%B2%D0%B5%D1%80
[25] Источник: http://habrahabr.ru/post/213845/
Нажмите здесь для печати.