- PVSM.RU - https://www.pvsm.ru -
Я уже не раз рассказывал про то, как в домашних условиях поднять сотовые сети разных стандартов. Но всё же все они были уже весьма древними. Самое время замахнуться на кое-что поинтереснее — LTE.

Итак, в сегодняшней статье поговорим о том, что детально в нашем сообществе не описывал практически никто — о том, как запустить базовую станцию самого нового из поддерживаемых большинством телефонов этой страны стандартов. Поговорим об особенностях её работы и о трудностях, с которыми, возможно, придётся столкнуться при запуске. Традиционно будет много интересного.
Запустив GSM-сеть, я решил не останавливаться на достигнутом и продолжить свои эксперименты. На этот раз выбор мой пал на 4G LTE. Эта технология до сих пор активно эксплуатируется и развивается. Уверен, многие из нас прямо сейчас читают этот текст именно на телефоне, работающем в сети этого стандарта. В России это, пожалуй, самый новый из широко распространившихся стандартов связи — CDMA умер ещё в незапамятные годы и в нашей стране более не развивается, а 5G на момент написания статьи всё так же находится в зачаточном состоянии. Самое время для того, чтобы попробовать развернуть домашнюю сеть.
Давным-давно небезызвестный в узких кругах Фабрис Беллар создал ПО [1], позволяющее запустить базовую станцию данного стандарта, о чём тут даже был пост [2]. Но предоставлялся этот софт только компаниям по запросу, а позже и вовсе был снесён [3] по причине его продажи какой-то фирме. Но за эти годы многое поменялось, и теперь запустить БС может каждый при наличии соответствующего железа.
Сама по себе концепция Private LTE не нова. Существуют готовые решения, позволяющие арендовать спектр частот и развернуть такую сеть у себя на предприятии. Но, понятное дело, для разового опыта всё это оборудование не подходит. Так что будем запускать сеть на базе SDR.
Если в мире open-source GSM всем правит Osmocom, то тут несомненным лидером является, безусловно, srsRAN. Это полностью открытое ПО, реализующее минимальную конфигурацию для запуска такой сети. Именно его мы и будем рассматривать. Обитает оно тут [4]. Его можно собрать из исходников, но я рекомендую использовать уже не раз упоминавшийся DragonOS, где этот софт уже есть в составе дистрибутива.
Также существует такой проект как LibreCellular [5], использующий несколько другое железо, но работает он на базе всё того же решения от srsRAN.
Вообще, открытых реализаций LTE помимо srsRAN не сказать, что прямо мало, например, OpenLTE [6], Open Air Interface [7] или софт для декодирования сигналов данного стандарта gr-lte [8]. Но всё же пока остановимся на srsRAN.
По традиции разберёмся, как же устроена данная сеть (RAN, Radio Access Network). Эта сеть нового поколения, более эффективно использующая частоты и обеспечивающая куда большее быстродействие. Состоит она из трёх ключевых компонентов.
EPC (Evolved Packet Core) — опорная сеть оператора. Главным её компонентом является MME (Mobility Management Unit), через который проходит весь трафик от абонентских устройств (UE, User Equipment). Этот узел отвечает за передачу обслуживания, вызов, аутентификацию и многие другие операции. Другими её частями являются служба биллинга, а также шлюзы (обслуживающий и пакетный), обеспечивающие обмен данными между частями сети и другими сетями. К опорной сети подключается HSS (Home Subscriber Server), защищённая база данных, где хранятся ключи шифрования и информация об абонентах. В GSM-сети роль этого узла выполняет домашний регистр (HLR).
Другим компонентом являются eNB (eNodeB). Это базовые станции. LTE работает в широком диапазоне частот, от 450 до 2600 МГц. Их использование отличается в зависимости от страны, так как некоторые из этих частот уже зарезервированы для чего-то ещё. Как и в GSM, тут тоже есть номера каналов — E-UTRA Absolute Radio Frequency Channel Number (EARFCN). Существуют формулы для перевода номера в частоту, но на практике куда проще воспользоваться специальным софтом. Весь спектр частот поделён на широкие участки (LTE bands), выбор которых отличается от страны к стране.
И, наконец, третий компонент — UE (User Equipment). Это сами девайсы, которые подключаются к сети — телефоны, модемы и прочее оборудование.
srsRAN реализует все три составляющие. Но остановимся сейчас только на первых двух — эмулировать LTE-модем при помощи SDR нам пока не понадобится.
Теперь немного о сложности. Вообще, порог вхождения для этой статьи — азы работы с консолью в линуксе и некоторое представление о том, как работает SDR. А вот для того, чтобы воспроизвести всё, что будет описано далее, требуется ряд железок, стоимость которых весьма высока. Это сильно ограничивает возможности для запуска сети. Кроме того, даже с SDR запуск оказался не слишком простым занятием. Если посмотреть видео на тему, то кажется, что всё просто: скачал софт, воткнул в компьютер SDR, и погнали. На деле же в этом процессе было полно нюансов, которые я тоже постараюсь тут описать.
Итак, для данного опыта нам понадобится примерно следующее:
Ну что же, будем считать, что все эти комплектующие у нас есть. Переходим к экспериментам.
Разберёмся с тем, что же будем использовать.

В качестве SDR возьмём USRP B200mini-i, уже фигурировавший в нескольких постах. В идеале, конечно, использовать в дополнение к нему ещё и внешний генератор тактового сигнала, но его у меня нет.

Телефон. Это Samsung Galaxy S5, повидавший многое на своём веку, но рабочий и ловящий сеть. В начале экспериментов он мне очень сильно помог.

Другой Samsung, на этот раз куда более новый — Galaxy M12.

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

А вот Sony Xperia L2 в экспериментах не участвовал — я пользовался им много лет и знаю, что LTE всю свою жизнь он ловил крайне посредственно. Доходило до того, что, находясь в институте, я принудительно в настройках переключал его на 3G, так как LTE ловил на одну-две палки, а интернета по сути не было. Возможно, это косяк только моего экземпляра, но факт остаётся фактом.

А вот ещё один интересный девайс — это Yotaphone, первый телефон с поддержкой LTE в России.

Обратная сторона с киллер-фичей в виде E-Ink экрана.

Мой экземпляр вдвойне интересен — это ещё и прототип. Достался он мне от товарища the_matrix [9], за что ему отдельная благодарность.
Итак, загружаемся в DragonOS и подключаем SDR. Теперь переходим в папку /etc/srsran. Там лежат файлы конфигурации. В файле enb.conf находим секцию [enb] и приводим её к следующему виду:
[enb]
enb_id = 0x19B
mcc = 250
mnc = 10
mme_addr = 127.0.1.100
gtp_bind_addr = 127.0.1.1
s1c_bind_addr = 127.0.1.1
s1c_bind_port = 0
n_prb = 50
#tm = 4
#nof_ports = 2
Самое важное тут — MCC и MNC. Эти параметры идентичны тем, что используются в GSM-сетях — это код страны и код сети. По-хорошему, надо использовать какие-то произвольные значения, но проблема в том, что большинство телефонов отказываются работать при виде столь странной сети. Поэтому я указал в качестве кода страны Россию, а в качестве кода сети тот, который не принадлежит какому-либо оператору, работающему в моём городе.
Аналогично модифицируем epc.conf:
[mme]
mme_code = 0x1a
mme_group = 0x0001
tac = 0x0007
mcc = 250
mnc = 10
mme_bind_addr = 127.0.1.100
apn = srsapn
dns_addr = 8.8.8.8
encryption_algo = EEA0
integrity_algo = EIA1
paging_timer = 2
request_imeisv = false
lac = 0x0006
full_net_name = MaFrance
short_net_name = MaFrance
Как показали опыты, LAC и TAC даже с такими значениями мало на что влияют. А вот коды сети тоже надо поменять. Также можно прописать своё имя сети.
Теперь открываем терминал и пишем примерно следующее:
sudo srsepc
Далее открываем второй терминал и пишем там:
sudo srsenb
SDR при этом должен быть подключен к компьютеру.
Теперь на телефоне открываем поиск сетей и ждём чуда. И, если нам повезло, в списке появится наша сеть:

Не стоит обращать внимание на сеть 25011. Так мой «рабочий» телефон воспринимает сеть Yota.
Если не повезло, то выключаем всё нажатием Ctrl+C и снова приступаем к правке конфигов. На этот раз нас интересует rr.conf. Находим в нём следующую секцию:
cell_list =
(
{
// rf_port = 0;
cell_id = 0x01;
tac = 0x0007;
pci = 1;
// root_seq_idx = 204;
dl_earfcn = 3500;
//ul_earfcn = 21400;
ho_active = false;
//meas_gap_period = 0; // 0 (inactive), 40 or 80
//meas_gap_offset_subframe = [6, 12, 18, 24, 30];
// target_pusch_sinr = -1;
// target_pucch_sinr = -1;
// enable_phr_handling = false;
// min_phr_thres = 0;
// allowed_meas_bw = 6;
// t304 = 2000; // in msec. possible values: 50, 100, 150, 200, 500, 1000, 2000
.....
}
}
Необходимо поменять значение EARFCN. Серьёзно, чаще всего проблема именно в этом. Если у вас запустились оба компонента сети, индикатор на SDR ровно горит и не мигает, компьютер не завис и больше ничего не случилось, то проблема либо в антеннах, либо в канале.
У меня идеальным значением оказалось 3500. На нём сеть устойчиво ловилась всеми телефонами и не падала. Какое именно значение выставлять, выяснить можно лишь опытным путём, увы. Но всё же ориентир есть — надо выбирать канал той частоты, под которую согласованы антенны. Посмотреть соответствие номера канала частоте можно тут [10]. Также в процессе поиска канала следует использовать приложение по типу Net Monitor, чтобы не начать вещание на занятом канале.

Тем не менее, попытавшись подключиться к этой сети, мы наверняка потерпим фиаско — телефон слегка потупит, а потом выдаст унылое «No service». Всё дело в аутентификации. Именно ею мы сейчас и займёмся.

В среде кардеров известен такой термин как «белый пластик» — магнитные карты, на которые записываются дампы. Именно его эквивалент нам сейчас и понадобится.
В отличие от GSM, LTE не работает без шифрования, так как там проверяется подлинность не только абонента, но и сети. Для этого каждая SIM содержит в себе два ключа OP и Ki (он же просто K). Первый из них — ключ оператора, единый для всех карт, им выпущенных. Второй — ключ для USIM.
Поскольку OP одинаков для тысяч симок, его утечка приведёт к компрометации их всех. Поэтому существует OPc — аналогичный код, но зашифрованный ключом K. Таким образом, вскрытие одной симки не приведёт к необходимости замены всех существующих.
Итак, для возможности подключиться к нашей сети нужна «тестовая» карта, куда можно прописать эти и ещё ряд других параметров. Выбор их невелик.

Sysmocom. Это, пожалуй, самый популярный вариант у зарубежных экспериментаторов. Однако цена их весьма высока, а достать их в нашей стране нереально, к тому же есть ещё ряд ограничений типа неизменяемого IMSI (собственно, всё так, как в обычной симке, просто значения заданы тестовые). Однако стабильность работы при этом наилучшая. По своей сути они больше всего приближены к «продакшн»-симкам, даже ключи не прошиваются пользователем, а присылаются ему на почту при покупке.

Gialer. Программируется практически всё, что возможно и что невозможно. И цена тоже куда более молодёжная. Вообще, в документации к проекту о них не слова, но я проверил — они отлично работают. Так что, если честно, если ваши опыты будут ограничиваться лишь 4G, переплачивать за Sysmocom я не вижу особого смысла.

Всяческие другие производители, например, Oyeitimes, которыми завален Aliexpress. Это самый дешёвый вариант, однако я встречал упоминания, что с srsRAN они не работают. Не буду ручаться: таких карт у меня нет. Неизвестных производителей покупать точно не стоит, так как, во-первых, действительно есть немалые шансы, что они не заведутся, во-вторых, непонятно, чем и как их программировать. Тем не менее, для большинства из нас это, пожалуй, самый доступный вариант, так что, несмотря на все минусы, рекомендую не списывать его со счетов.
Для своих опытов я раздобыл карты Gialer. По сути это бескомпромиссный вариант между дорогими Sysmocom и неведомыми картами с Али. По идее, их тоже можно заказать из Китая, но на момент публикации статьи активных объявлений на Aliexpress я не видел. Не буду описывать все сложности, с которыми мне пришлось столкнуться, чтобы в нашей нисколько не простой реальности купить в иностранном интернет-магазине за валюту столь экзотический артефакт и потом переправить его в Россию, но заветная коробочка таки оказалась у меня в руках.

Как повествует наклейка на ней, внутри полный комплект для записи сим-карт.

Я решил не мелочиться и выбрал самую полную комплектацию: карты, считыватель, софт. Как позже выяснится — не зря.

А вот и сама карта. В коробке их пять штук. На деле это значение даже избыточно, для полноценных опытов хватит одной-двух. Но запас точно не помешает.

Обратная сторона.

Считыватель смарт-карт. Он очень простой, без единых опознавательных знаков. В комплекте также диск с драйверами.

Гугл подсказывает, что это некий Uthai X02.

Плата адаптера. Она позволяет вставить в считыватель симки меньшего размера. Также в пакетике с ней был OTG-переходник на USB-C (понятия не имею, зачем он тут).

Флешка на 128 мегабайт. На ней записан софт.

Теперь необходимо загрузить ключи. Для этого запускаем софт с флешки.

Теперь попробуем прочитать карту. Чистые пока оставим, разберёмся с ними чуть позже. Так как я увлекаюсь в том числе и старыми телефонами, у меня полно дохлых симок. Именно одна из них и отправилась первым делом в считыватель. Итак, выбираем из списка нужный считыватель смарт-карт и жмякаем «Read Card».

А вот и данные. Можно прочитать IMSI и ICCID, а также ряд других параметров. Ki и OPc неизвлекаемые, поэтому вместо них прописаны значения по умолчанию. Все такие поля помечены зелёным.

А вот, к примеру, параметры для VoLTE.

Ну что же, время запихнуть в считыватель чистую симку. Вставляем и жмякаем «Read card». Теперь необходимо заполнить поля. В моём примере данные оказались такие:
Но, конечно, никто не мешает вам использовать что-то иное. ICCID, как показали опыты, по сути мало на что влияет, но задать его надо, иначе телефон будет писать ошибку карты SIM. PLMN заполняется очень просто — вводим IMSI в соответствующее поле и напротив PLMN жмякаем «Auto».
Также можно записать ещё ряд параметров. Они не влияют на работу сети, но по желанию можно указать и их:
Введя все параметры, в разделе «GSM» жмякаем «Same with LTE». Нажимаем «Write Card». Всё, по окончании процесса карта готова к использованию. Самое время вставлять её в телефон и проверять.

Открываем диспетчер SIM и убеждаемся, что симка определяется и работает.
Заранее хочу предупредить тех, кто придёт сюда из поиска и воспримет этот комплект за чудо-устройство. Прочитать данные с симки и записать их на другую невозможно. Точнее, возможно, но работать при этом копия не будет. Всё дело в том, что Ki и OPc, как было сказано ранее, неизвлекаемы. Поэтому на копии окажутся не истинные их значения, а тестовые, заданные по умолчанию в проге.

В далёкие годы, когда симки были защищены уязвимым алгоритмом COMP128v1, была возможность с помощью специального софта добыть этот ключ. Принцип основывался на ряде грязных хаков, позволяющих добыть ключ за приемлемое число запросов к сим-карте. Увы, с сегодняшними экземплярами это не прокатывает.
У меня был USBшный считыватель Gemalto, и я подумал: а что, если тот комплектный был приобретён зря?

Ну что же, проверим. Увы, при попытке считывания карты вылезает ошибка. Таким образом, показанный тут экземпляр для работы с данным софтом не подходит.
Итак, выламываем свежепрошитую симку из своего ложемента и вставляем её в телефон.
По пути /etc/srsran лежит файл user_db.csv. Приводим его к следующему виду:
#
# .csv to store UE's information in HSS
# Kept in the following format: "Name,Auth,IMSI,Key,OP_Type,OP/OPc,AMF,SQN,QCI,IP_alloc"
#
# Name: Human readable name to help distinguish UE's. Ignored by the HSS
# Auth: Authentication algorithm used by the UE. Valid algorithms are XOR
# (xor) and MILENAGE (mil)
# IMSI: UE's IMSI value
# Key: UE's key, where other keys are derived from. Stored in hexadecimal
# OP_Type: Operator's code type, either OP or OPc
# OP/OPc: Operator Code/Cyphered Operator Code, stored in hexadecimal
# AMF: Authentication management field, stored in hexadecimal
# SQN: UE's Sequence number for freshness of the authentication
# QCI: QoS Class Identifier for the UE's default bearer.
# IP_alloc: IP allocation stratagy for the SPGW.
# With 'dynamic' the SPGW will automatically allocate IPs
# With a valid IPv4 (e.g. '172.16.0.2') the UE will have a statically assigned IP.
#
# Note: Lines starting by '#' are ignored and will be overwritten
ue2,mil,250100123456789,00112233445566778899aabbccddeeff,opc,63bfa50ee6523365ff14c1f45f88737d,8000,0000000012fa,7,dynamic
Нужно поменять IMSI в первой строчке на наш. K и OPc я оставил штатными (именно их я забил в симку). Вторую строчку, которая по умолчанию есть в этом файле, надо закомментировать или удалить.

Запускаем srsEPC, если всё сделано правильно, то он подтянет все файлы конфигурации и перейдёт в рабочий режим. При этом появится уведомление о новом сетевом подключении.

Теперь очередь srsENB.

На телефоне запускаем поиск сетей. После того, как она будет найдена, надо на неё жмякнуть. При этом в окне eNB появится сообщение о том, что подсоединён новый клиент.

В окне EPC также посыпятся логи об успешной авторизации.

Если всё это произошло — всё отлично, сеть работает!

Net monitor. Поскольку в моём городе нет оператора с таким кодом сети, он показывает одну-единственную вышку — мою.
srsRAN не поддерживает звонки и SMS, только интернет-соединение. Ну что же, сейчас мы его и поднимем.

На телефоне создаём точку доступа (этот раздел находится где-то там же, где и выбор сотовой сети).

В качестве имени и APN указываем любые значения, остальное не меняем. Далее сохраняем и выбираем её по умолчанию.

Где-то рядом может быть запрет на передачу мобильных данных в роуминге. Его необходимо отрубить.

Теперь на компьютере открываем ifconfig (или iwconfig).

Запускаем скрипт srsepc_if_masq.sh. В качестве аргумента необходимо подставить имя того подключения, через которое машина получает доступ к интернету. Если всё будет успешно, в консоли появится «Masquerading interface (тут имя подключения)».

И вот он, самый волнующий момент. На телефоне включаем передачу данных. Убедившись, что Wi-Fi выключен, открываем браузер, обновляем страницу, и… работает! Да, никогда ещё загрузка главной страницы гугла не вызывала столько эмоций.

Ну всё, можно пробовать заходить во все свои аккаунты и хвастаться товарищам, что у тебя работает сеть.

А вот и Speedtest. Скорость процентов на тридцать меньше той, что выдаёт мой домашний Wi-Fi. Работает оно весьма стабильно, за всё время опытов сеть так ни разу и не упала.

Чтобы проверить стабильность сети, я запустил на телефоне часовое видео на YouTube. Уронить им сеть не удалось.

Изначально я всё не мог понять, почему телефон упорно считает, что мы в роуминге.

Лишь потом до меня дошло, что PLMN указан неправильно. Именно по нему определяется код сети, IMSI же лишь дублирует его.

После исправления этих значений на корректные телефон стал успешно подключаться к сети даже из автопоиска.
На прощание покажу, как при помощи обычного HackRF поднять фейковую БС. Подключиться к ней, конечно, не выйдет, но увидеть её в списке сетей — запросто. Итак, идём по ссылке [11] и скачиваем там бинарник. Далее переходим в папку с ним и выполняем команду:
hackrf_transfer -t srslte.bin -f 2649800000 -a 0 -s 15360000 -R -x 45
После этого телефон должен будет отобразить в списке сеть «Test PLMN 1-1».
Разумеется, многие спросят: а зачем оно всё? Безусловно, если целью стоит раздача интернета с ПК на телефон, то решить её можно и без приобретения оборудования, стоящего как топовый игровой комп.
Данный проект — отличный вариант для освоения архитектуры LTE-сетей и их защищённости. Даже если у вас нет SDR, вы можете запустить эмулятор передатчика, который также входит в состав srsRAN.
Такие дела.
Автор: Лев
Источник [16]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/lte/389291
Ссылки в тексте:
[1] ПО: https://web.archive.org/web/20141206024449/http://bellard.org/lte/index.html
[2] пост: https://habr.com/ru/articles/150809/
[3] снесён: https://habr.com/ru/companies/dcmiran/articles/564478/
[4] тут: https://www.srsran.com/
[5] LibreCellular: https://librecellular.org/
[6] OpenLTE: https://sourceforge.net/projects/openlte/
[7] Open Air Interface: http://www.openairinterface.org/
[8] gr-lte: https://github.com/kit-cel/gr-lte
[9] the_matrix: https://habr.com/ru/users/the_matrix/
[10] тут: https://www.sqimway.com/lte_band.php
[11] ссылке: https://github.com/jhonnybonny/LTE_HACKRF
[12] Проект srsRAN: https://www.srslte.com/
[13] Проект LibreCellular: https://librecellular.org/introduction/index.html
[14] Dragon OS и уже готовый софт: https://mega.nz/folder/tNB1DQbQ#OQs--w-z-6JcSMvF3dghww
[15] srsRAN на Github: https://github.com/srsran/srsRAN_4G
[16] Источник: https://habr.com/ru/companies/timeweb/articles/776040/?utm_source=habrahabr&utm_medium=rss&utm_campaign=776040
Нажмите здесь для печати.