25

Ответ на пост «Сам себе VoLTE. Запускаем сотовую сеть 4G LTE с поддержкой звонков и SMS»

Уважаемая аудитория пикабы, хочу спросить: почему пост на техническую тематику, где рассказывается, как в одного поднять GSM сеть, можно сказать стратегически важные знания в случае большого пиздеца, который не за горами, не набирает даже пол тыщи лайков?

А какой-то тухлый унылый видос с посредственными актёрами почти 3к лайков?

Неужели эти знания никому не нужны?

693

Сам себе VoLTE. Запускаем сотовую сеть 4G LTE с поддержкой звонков и SMS

Приветствую всех!

Два года назад я уже рассказывал о том, как запустить у себя дома базовую станцию 4G LTE. Тем не менее, в той сети работал только мобильный интернет, тогда как при попытке позвонить или отправить SMS связь немедленно обрывалась.

Самое время восполнить это упущение. Сегодня мы поднимем сеть, в которой будут работать все эти функции. Заодно разберёмся, как работают звонки в LTE-сетях, как запустить такую сеть при помощи SDR и как заставить это всё работать. Как водится, будет много интересного.

❯ Суть такова

Когда-то давно мне уже доводилось запускать сеть 4G LTE в минимальной работоспособной конфигурации. Телефон успешно подключался и выходил в интернет, но мне, конечно, хотелось ещё большего.

Уверен, сейчас все (ну, или почти все) примерно представляют себе, что такое VoLTE и то, для чего он нужен. Если вы читаете этот текст с телефона, то звонит он наверняка благодаря поддержке этой функции.

Тем не менее, по сравнению с обычными сетями типа GSM устроено это совершенно иначе. Как оно работает и как запустить это в «домашней» сети, сейчас и узнаем.

❯ Как работает VoLTE

Начнём с самого начала: с того, как вообще совершаются звонки в 4G-сетях. Вариантов тут всего два.

Первый из них — откат на сеть предыдущего поколения (Circuit Switched Fallback). Он поддерживается и поныне, дабы трубки, где VoLTE выключен или не поддерживается, в принципе могли звонить.

Момент переключения на более старую сеть вы можете пронаблюдать лично, если выключите VoLTE на телефоне, включите мобильный интернет, а затем попробуете кому-то позвонить. При начале вызова значок «4G» в строке состояния пропадёт. Такую систему тоже можно воссоздать в домашних условиях, если поднять 2G-сеть с тем же PLMN (то есть с теми же кодами MCC и MNC) и настроить в ней SIP.

Но, думаю, даже непосвящённым понятно, что пробрасывать звонки через более старые сети - это костыль не самое оптимальное решение. Перед началом соединения происходит задержка, поскольку телефон должен «соскочить» на более старую сеть, а сетевое соединение при этом прерывается. Конечно, полностью избавиться от такой системы нельзя, так как тогда более старые телефоны больше не смогут звонить, но было бы странно не придумать что-то оптимизированное именно с учётом архитектуры LTE-сетей.

Так появился второй вариант — тот самый VoLTE. Это протокол передачи голоса в сотовых сетях через каналы пакетной передачи данных, проще говоря, через обычные сети TCP/IP. Чем-то он напоминает привычный VoIP, но всё же отличается от него другим форматом пакета, обеспечивающим чуть меньший его размер. Эти пакеты обрабатывает специальный модуль в ядре сети — IMS (IP Multimedia Subsystem). Таким образом, в выигрыше оказываются и операторы (VoLTE обеспечивает чуть ли не шестикратный прирост пропускной способности в сравнении с обычными сетями GSM, а, значит, положить сеть становится значительно труднее), и пользователи (качество звука в VoLTE значительно лучше , если, конечно, связь LTE вообще есть).

❯ Что такое SRVCC?

Так уж вышло, что стабильное соединение LTE есть далеко не везде. Если в момент вызова по VoLTE уровень сигнала просядет, то звонок прервётся. Поэтому существует специальная процедура переключения на сеть более старого поколения на тот случай, если её сигнал в это время лучше. Называется она SRVCC (Single Radio Voice Call Continuity).

Когда уровень сигнала от телефона начинает проседать и падает ниже некоего значения, которое БС считает критическим, отправляется запрос на резервирование голосового канала. MME связывается с MSC, находит ближайшую доступную вышку и выделяет на ней канал. После этого телефон переключается на эту вышку, а разговор продолжается. Для пользователя это выглядит как кратковременное заикание или некоторое ухудшение качества связи. Само собой, если в этот момент производилась передача данных, соединение либо (в случае с 2G) сбрасывается, либо (в случае с 3G) продолжается на более низкой скорости.
Также существует и обратный вариант: при возвращении абонента обратно в зону покрытия 4G звонок можно перевести на VoLTE. Впрочем, распространено это меньше из-за сложностей реализации: пока абонент находится в сети 2G/3G, ядро сети LTE не может получать информацию о состоянии соединения.

❯ SMS в LTE-сетях

Как и в случае со звонками, вариантов тут два.

Первый — SMS over SGs. В этом случае помимо LTE-сети телефон регистрируется и в «старом» центре коммутации (MSC) GSM. После этого он становится доступен как MME (для передачи данных в LTE-сети), так и MSC (для SMS). При отправке сообщения телефон формирует специальный пакет, а MME передаёт его MSC, который его обрабатывает абсолютно так же, как если бы абонент находился в обычной сети 2G. Аналогичным образом происходит и приём. Сообщение приходит в SMS-центр GSM-сети и передаётся в MSC. Тот передаёт его MME, который и производит отправку на абонентское устройство. На этот раз при отправке или приёме SMS сброса соединения LTE не происходит.

Второй — SMS over IMS. Как нетрудно понять, предыдущее решение хоть и работает, но всё же реализован был исключительно для совместимости. В «нативной» реализации сообщения упаковываются в обычные пакеты данных, передаваемые по TCP/IP. Обработкой этих пакетов занимается всё тот же IMS.

❯ Обзор оборудования

Как и в случае с «простой» 4G-сетью, для того, чтобы запустить такое дома, требуется SDR с комплектом антенн, программируемые симки и сами телефоны, которые будем подключать к сети. Поэтому комплект оборудования остаётся неизменным.

Это SDR, самый важный компонент, он же и самый дорогой.

В моём случае это USRP B200mini-i. Другого экземпляра за столько лет у меня пока не появилось.

Телефон Samsung Galaxy M12.

Телефон Samsung Galaxy S5.

С этой моделью надо быть внимательным: некоторые прошивки не поддерживают VoLTE. Перед тем, как пытаться использовать его для наших целей, этот момент обязательно надо уточнить.

Также надо учесть, что некоторые аппараты не поддерживают работу в частных VoLTE-сетях.

Обычно этим грешат айфоны и трубки некоторых китайских вендоров. Иногда помогает установить MCC 001 и MNC 01, но работает это далеко не всегда. Со всем этим тоже надо ознакомиться перед началом опытов.

И, наконец, программируемые SIM-карты. Что это такое, для чего они нужны и как их записывать, я уже рассказывал в посте про 4G.

Выбор их всё так же невелик, но с недавних пор появился ещё один вариант от китайской фирмы PISWORDS.

Записываются они стандартным ПО GRSIMWrite, ищутся в продаже на российском Али и, по отзывам, работают в таких частных сетях. Так что при отсутствии возможности купить Sysmocom или Gialer стоит обратить внимание на них.

❯ Ставим софт

В прошлый раз мы использовали софт srsRAN. Но есть один нюанс: компонентов, необходимых для работы VoLTE, там нет. Поэтому ставить будем следующее:

  • Сам srsRAN. В этот раз из всего комплекта понадобится только srsENB — софт базовой станции.

  • Open5GS. Это новое ядро сети. Сейчас оно будет использоваться как ядро 4G-сети, про 5G поговорим как-нибудь позже.

  • Kamailio. Тут всё просто — это SIP-сервер.

В этот раз ставить всё по отдельности не будем. К нашем счастью, существует уже установленный и настроенный софт, запиханный в Docker. Именно его-то мы и будем ставить.
В качестве ОС я использовал Ubuntu 22.04.5 LTS. Но никто не мешает использовать и другой дистрибутив: здесь это не так критично.

Для начала необходимо поставить Docker, поскольку штатно в Ubuntu он не стоит. Для этого выполним следующие команды:

sudo apt update

sudo apt install ca-certificates curl

sudo install -m 0755 -d /etc/apt/keyrings

sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc

sudo chmod a+r /etc/apt/keyrings/docker.asc

sudo tee /etc/apt/sources.list.d/docker.sources <<EOF

Types: deb

URIs: https://download.docker.com/linux/ubuntu

Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")

Components: stable

Signed-By: /etc/apt/keyrings/docker.asc

EOF

sudo apt update

sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Теперь очередь самих контейнеров. Клонируем репозиторий и собираем их:

git clone https://github.com/herlesupreeth/docker_open5gs

cd docker_open5gs/base

sudo docker build --no-cache --force-rm -t docker_open5gs .

cd ../ims_base

sudo docker build --no-cache --force-rm -t docker_kamailio .

cd ..

sudo docker compose -f 4g-volte-deploy.yaml build

cd ../srslte

sudo docker build --no-cache --force-rm -t docker_srslte .

Вообще, сам автор репозитория разместил ссылки на уже готовые контейнеры. Но всё же я предпочёл собрать их самому. Итак, выполняем команды, после чего в консоли должно будет появиться примерно следующее:

Да, если что, конкретно этот контейнер предназначен совсем для другого и в рамках данной статьи собирать его не требуется. Но нетрудно догадаться, что визуально процесс ничем не отличается. Занимает всё это порядочно времени, у меня на весь софт ушло чуть больше полутора часов. Так что запаситесь терпением.

Далее редактируем файл .env.

Поменять нужно следующие параметры:

  • MCC - код страны. В данном случае у меня стоит 460, то есть код Китая. Никакого подтекста тут нет, просто симка так и осталась прошитой под опыты с китайским железом.

  • MNC - код сети.

  • DOCKER_HOST_IP - IP-адрес машины, на которой работает ядро сети.

  • SGWU_ADVERTISE_IP - тот же самый адрес.

  • UE_IPV4_INTERNET - диапазон IP-адресов, выделяемых телефонам для мобильной сети.

  • UE_IPV4_IMS - диапазон IP-адресов, выделяемых телефонам для VoLTE.

Теперь запускаем контейнер с ядром сети:

cd docker_open5gs

source .env

sudo ufw disable

sudo sysctl -w net.ipv4.ip_forward=1

sudo docker compose -f 4g-volte-deploy.yaml up

Запуск начался.

Вскоре в консоли должны будут быстро посыпаться логи.

❯ Абоненты

Как и в случае с srsEPC, необходимо занести данные SIM-карт.

Итак, открываем браузер и переходим по адресу http://localhost:9999 (либо по адресу ПК, на котором работает сеть).

Авторизуемся с учётными данными admin@1423. Нас встречает вот такой экран, где располагается список абонентов. На свежераскатанной системе он будет пуст.

В углу жмякаем плюсик. Открывается окно добавления нового абонента. Заполняем поля IMSI, K, OPc, AMF. Нажимаем на жирный голубой плюс и вводим номер телефона (MSISDN).

Теперь очередь точек доступа. Проматываем окно чуть ниже и заполняем параметры.

Для добавления новых полей жмякаем голубой плюс.

После ввода данных нижняя таблица в свойствах абонента должна выглядеть как на этом скриншоте.

Аналогичным образом надо создать профиль для второго телефона. Больше в этом интерфейсе делать нам нечего, можно его закрыть.

Теперь надо занести данные в OsmoHLR для работы SMS, для чего подключаемся к его консоли:

telnet 172.22.0.32 4258

Теперь заносим данные следующей командой:

enable

subscriber imsi [IMSI-1] create

subscriber imsi [IMSI-1] update msisdn [MSISDN-1]

subscriber imsi [IMSI-2] create

subscriber imsi [IMSI-2] update msisdn [MSISDN-2]

Само собой, IMSI и номера телефонов надо забить свои.

Вот так всё это выглядит.

❯ Пуск!

Ну что же, настал самый ответственный момент.

Открываем файл rr_enb.conf, выбираем нужный канал, на котором будет работать БС. Более подробно про это всё описывается тут. Подключаем к компьютеру SDR с накрученными антеннами. Выполняем команду:

sudo uhd_usrp_probe

В SDR загрузится ПО, и он станет готов к работе.

Аналогичным образом редактируем файл .env (если запуск производится на той же машине, что и ядро сети, то создаём копию):

  • MCC — код страны, должен совпадать с тем, что в ядре сети.

  • MNC — код сети, должен совпадать с тем, что в ядре сети.

  • DOCKER_HOST_IP — IP-адрес машины, на которой работает БС.

  • MME_IP — IP-адрес машины, на которой работает ядро сети.

  • SRS_ENB_IP — IP-адрес машины, на которой работает БС.

И теперь запускаем контейнер:

cd docker_open5gs

source .env

sudo cpupower frequency-set -g performance

sudo docker compose -f srsenb.yaml up -d && docker container attach srsenb

Секунд через десять на SDR загорится зелёный светодиод активной передачи, а в консоли ядра сети промелькнёт сообщение, что теперь число подключенных БС равно 1.

Всё, можно пробовать.

❯ Подключаем телефоны

Для начала произведём некоторую настройку.

На телефоне создаём точку доступа ims с типом ims. Так же создаём обычную точку доступа internet.

Вот так всё это выглядит.

Аналогичные действия производим на втором телефоне.

Если БС в этот момент уже запущена, то, скорее всего, телефон сходу увидит сеть и зацепит её.

Можно даже выйти в интернет и убедиться, что сетевое соединение есть.

Всё! Можно звонить!

SMS между двумя трубками тоже летают.

❯ Завершение работы

Выключить эту сеть после опытов тоже довольно просто:

В консоли с ядром сети нажимаем Ctrl+C и ждём, пока все контейнеры завершат работу. После этого вводим команду:

sudo docker stop srsenb

Через несколько секунд индикатор на SDR погаснет. В следующий раз развернуть сеть можно будет всё теми же командами.

❯ Что же у нас получилось?

Вот так вот, с помощью нехитрых приспособлений буханку белого (или чёрного) хлеба можно превратить в троллейбус. Но зачем?
Итак, теперь наша домашняя сеть теперь поддерживает не только мобильный интернет, но и привычные звонки и SMS, причём запускается всё это ненамного сложнее, чем вариант просто с Open5GS.

Я прекрасно понимаю, что повторить это всё смогут очень немногие, поскольку стоимость радиооборудования весьма высока. Тем не менее, просто сама возможность поднять в домашних условиях сотовую сеть на базе полностью открытого железа и софта — это безумно круто.

Такие дела.


Автор текста: MaFrance351. Больше фото и авторских комментариев — тут.

Написано при поддержке Timeweb Cloud

Больше интересных статей и новостей в нашем блоге на Хабре и телеграм-канале


Реклама ООО «ТАЙМВЭБ.КЛАУД», ИНН: 7810945525

Показать полностью 25
Отличная работа, все прочитано!

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества