Pull to refresh
2027.36
Timeweb Cloud
То самое облако

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

Level of difficultyHard
Reading time13 min
Views81K
Приветствую всех!

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



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

О чём я?


Запустив GSM-сеть, я решил не останавливаться на достигнутом и продолжить свои эксперименты. На этот раз выбор мой пал на 4G LTE. Эта технология до сих пор активно эксплуатируется и развивается. Уверен, многие из нас прямо сейчас читают этот текст именно на телефоне, работающем в сети этого стандарта. В России это, пожалуй, самый новый из широко распространившихся стандартов связи — CDMA умер ещё в незапамятные годы и в нашей стране более не развивается, а 5G на момент написания статьи всё так же находится в зачаточном состоянии. Самое время для того, чтобы попробовать развернуть домашнюю сеть.

Давным-давно небезызвестный в узких кругах Фабрис Беллар создал ПО, позволяющее запустить базовую станцию данного стандарта, о чём тут даже был пост. Но предоставлялся этот софт только компаниям по запросу, а позже и вовсе был снесён по причине его продажи какой-то фирме. Но за эти годы многое поменялось, и теперь запустить БС может каждый при наличии соответствующего железа.

Софт


Сама по себе концепция Private LTE не нова. Существуют готовые решения, позволяющие арендовать спектр частот и развернуть такую сеть у себя на предприятии. Но, понятное дело, для разового опыта всё это оборудование не подходит. Так что будем запускать сеть на базе SDR.

Если в мире open-source GSM всем правит Osmocom, то тут несомненным лидером является, безусловно, srsRAN. Это полностью открытое ПО, реализующее минимальную конфигурацию для запуска такой сети. Именно его мы и будем рассматривать. Обитает оно тут. Его можно собрать из исходников, но я рекомендую использовать уже не раз упоминавшийся DragonOS, где этот софт уже есть в составе дистрибутива.

Также существует такой проект как LibreCellular, использующий несколько другое железо, но работает он на базе всё того же решения от srsRAN.

Вообще, открытых реализаций LTE помимо srsRAN не сказать, что прямо мало, например, OpenLTE, Open Air Interface или софт для декодирования сигналов данного стандарта gr-lte. Но всё же пока остановимся на srsRAN.

Как работает LTE


По традиции разберёмся, как же устроена данная сеть (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 нам пока не понадобится.

Что нужно, чтобы поднять у себя собственную сеть LTE?


Теперь немного о сложности. Вообще, порог вхождения для этой статьи — азы работы с консолью в линуксе и некоторое представление о том, как работает SDR. А вот для того, чтобы воспроизвести всё, что будет описано далее, требуется ряд железок, стоимость которых весьма высока. Это сильно ограничивает возможности для запуска сети. Кроме того, даже с SDR запуск оказался не слишком простым занятием. Если посмотреть видео на тему, то кажется, что всё просто: скачал софт, воткнул в компьютер SDR, и погнали. На деле же в этом процессе было полно нюансов, которые я тоже постараюсь тут описать.

Итак, для данного опыта нам понадобится примерно следующее:

  • Компьютер с Linux. Виртуалка или Raspberry не подойдёт. В первом случае будут проблемы с пробросом порта, второй вариант слишком слаб. Машина должна быть достаточно мощной, так как для запуска сети требуется немало ресурсов. Точные характеристики сказать не могу, так как они сильно отличаются в зависимости от пропускной способности сети, используемого SDR и ещё ряда параметров, но нужно нечто в районе Intel Core i5 и восьми-двенадцати гигов памяти.
  • SDR. Само собой, он должен быть полнодуплексным. Подойдёт USRP, BladeRF, различные модели LimeSDR. В основном используют Ettus USRP B205-mini или B210, а также LimeSDR. У меня есть USRP B200mini-i, я не видел, чтобы кто-то пытался его использовать для таких целей, но у меня получилось добиться с ним стабильной работы, так что его тоже можно рассматривать.
  • Антенны. Это тоже очень важная составляющая успеха. Они должны быть рассчитаны на ту частоту, которую мы будем выбирать. Антенны от роутера не подойдут (я проверял, с ними сеть не ловится). В идеале взять две специально предназначенных для сотовых сетей. Их можно скрутить с сигнализации, модема или иного подобного девайса.
  • SIM-карты, пригодные для записи. Что это такое, зачем оно нужно и что с этим делать — рассмотрим чуть позже.
  • GPS-DO. Для своей работы базовая станция требует тактирования. В опытах с CalypsoBTS мы получали синхроимпульсы от другой вышки, тут же используется специальный прибор, принимающий по GPS сигналы точного времени. Точности внутреннего генератора SDR может оказаться недостаточно, поэтому может потребоваться такой источник. Тем не менее, его использование необязательно, я успешно запускал сеть и без него. Но для повышения стабильности работы подключить его однозначно стоит.

Ну что же, будем считать, что все эти комплектующие у нас есть. Переходим к экспериментам.

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


Разберёмся с тем, что же будем использовать.

image

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



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



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



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



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



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



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



Мой экземпляр вдвойне интересен — это ещё и прототип. Достался он мне от товарища the_matrix, за что ему отдельная благодарность.

Первый запуск


Итак, загружаемся в 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. На нём сеть устойчиво ловилась всеми телефонами и не падала. Какое именно значение выставлять, выяснить можно лишь опытным путём, увы. Но всё же ориентир есть — надо выбирать канал той частоты, под которую согласованы антенны. Посмотреть соответствие номера канала частоте можно тут. Также в процессе поиска канала следует использовать приложение по типу 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 мегабайт. На ней записан софт.

Персонализация SIM




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



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



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



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



Ну что же, время запихнуть в считыватель чистую симку. Вставляем и жмякаем «Read card». Теперь необходимо заполнить поля. В моём примере данные оказались такие:

  • ICCID: 01234567890123456789
  • IMSI: 250100123456789
  • K: 00112233445566778899AABBCCDDEEFF
  • OPC: 63BFA50EE6523365FF14C1F45F88737D
  • PLMN: 25010
  • Алгоритм шифрования: Milenage

Но, конечно, никто не мешает вам использовать что-то иное. ICCID, как показали опыты, по сути мало на что влияет, но задать его надо, иначе телефон будет писать ошибку карты SIM. PLMN заполняется очень просто — вводим IMSI в соответствующее поле и напротив PLMN жмякаем «Auto».

Также можно записать ещё ряд параметров. Они не влияют на работу сети, но по желанию можно указать и их:

  • SPN (Service provider name) — имя сети, отображаемое в диспетчере SIM
  • ECC (Emergency call codes) — список номеров, которые телефон будет считать экстренными.
  • SMSP — номер SMS-центра.
  • MSISDN — отображаемый номер абонента.

Введя все параметры, в разделе «GSM» жмякаем «Same with LTE». Нажимаем «Write Card». Всё, по окончании процесса карта готова к использованию. Самое время вставлять её в телефон и проверять.



Открываем диспетчер SIM и убеждаемся, что симка определяется и работает.

Немного про клонирование 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 поднять фейковую БС. Подключиться к ней, конечно, не выйдет, но увидеть её в списке сетей — запросто. Итак, идём по ссылке и скачиваем там бинарник. Далее переходим в папку с ним и выполняем команду:

hackrf_transfer -t srslte.bin -f 2649800000 -a 0 -s 15360000 -R -x 45

После этого телефон должен будет отобразить в списке сеть «Test PLMN 1-1».

Вот как-то так


Разумеется, многие спросят: а зачем оно всё? Безусловно, если целью стоит раздача интернета с ПК на телефон, то решить её можно и без приобретения оборудования, стоящего как топовый игровой комп.

Данный проект — отличный вариант для освоения архитектуры LTE-сетей и их защищённости. Даже если у вас нет SDR, вы можете запустить эмулятор передатчика, который также входит в состав srsRAN.

Такие дела.

Ссылки





Возможно, захочется почитать и это:


Tags:
Hubs:
Total votes 370: ↑369 and ↓1+368
Comments156

Articles

Information

Website
timeweb.cloud
Registered
Founded
Employees
201–500 employees
Location
Россия
Representative
Timeweb Cloud