20d - Grabación de USIM, preparación de UE y attach

Volver ó índice

Comprobación de RAN y UE

Comprobar core, RAN y UE 5G SA (Conexiones de gNB y UE):

sudo tail -f /var/log/open5gs/amf.log

Comprobar core, RAN y UE 2G-4G y 5G NSA (conexiones de gNB/eNB y UE):

sudo tail -f /var/log/open5gs/mme.log

El comando tail -f muestra las 20 últimas líneas de un fichero de texto y lo refresca automáticamente.

Inicio de sesión fallido (claves Ki y OPC incorrectas):

Intento de inicio de UE
Intento de inicio de UE

Preparación de SIM

Descarga e instala PySIM: https://github.com/osmocom/pysim | Instrucciones para Windows: https://doc.pysim.org/installing_pysim.html

Datos de ejemplo:

Si en core pones el OPc, en la SIM debes grabar el OP, y viceversa.

Instalación de PySIM (Windows)

Versión “capada” (sólo lector, pero lista para usar): https://www.ladyada.net/make/simreader/download.html

Descarga Python 3 (latest, windows installer 64 bit): https://www.python.org/downloads/windows/ (add python.exe to PATH). Abre una terminal cmd y comprueba que esté instalado con:

python --version

Antes de instalar PySIM, instalaremos las librerías de las que depende:

python -m pip install --upgrade pip
pip install construct gsm0338 bidict cmd2 colorlog jsonpath-ng packaging pycryptodomex smartcard pyscard pyserial pytlv pyyaml termcolor

Hay problemas con al menos dos: smartcard y pyscard

Descarga e instala git (64 bit for Windows Setup): https://git-scm.com/downloads

Cierra el cmd y vuelve a abrirlo. Comprueba que está instalado con:

git --version

Descarga PySIM:

git clone https://gitea.osmocom.org/sim-card/pysim.git

Entra en su carpeta:

cd pysim

Pyscard

C:\Users\daniel\AppData\Local\Programs\Python\Python312\Scripts

Descargamos la librería ya compilada:

curl -o pyscard-2.0.7-cp312-cp312-win_amd64.whl https://files.pythonhosted.org/packages/73/f8/0fc859daf7d6328fbe0c6ed0441cadcead584c8acf124ed180acc9531d74/pyscard-2.0.7-cp311-cp311-win_amd64.whl

Hemos cambiado el nombre del fichero al guardarlo 311 a 312 para acomodarlo a nuestra versión de python (3.12).

Y la instalamos:

python -m pip install pyscard-2.0.7-cp312-cp312-win_amd64.whl

Smartcard

Y la instalamos:

python -m pip install pyscard-2.0.7-cp311-cp311-win_amd64.whl

Instalación de PySIM (Linux)

Información: https://gitea.osmocom.org/sim-card/pysim

Instalamos Python 3 (no es necesario, ya suele venir instalado): https://www.python.org/downloads/

Instalamos módulo de lectura de smartcard y otras dependencias:

sudo apt-get install --no-install-recommends \
        git \
        pcsc-tools \
        pcscd libpcsclite-dev \
        python3 \
        python3-setuptools \
        python3-pyscard \
        python3-pip

Bajamos el listado de requisitos del programa PySIM:

wget https://raw.githubusercontent.com/osmocom/pysim/master/requirements.txt

Descargamos las librerías indicadas en los requerimientos:

pip3 install --user -r requirements.txt

Descargamos el código del programa PySIM:

git clone https://gitea.osmocom.org/sim-card/pysim

Entramos en la carpeta donde se ha descargado el programa PySIM (habitualmente ~/pysim):

Sitúate en la carpeta del programa pySim:

cd pysim

Comprueba qué archivos hay en esa carpeta:

ls
Archivos en carpeta pysim
Archivos en carpeta pysim

Vamos a usar pySim-read.py para leer los IMSI de las tarjetas y comprobar que no están conectadas del revés. Después usaremos pySim-prog.py para modificar los Ki y OPc.

Instalación de PySIM en Windows (NO recomendado): https://github.com/aldebjer/pysim/blob/master/doc/building_on_windows.rst

Uso de pySim

Sitúate en la carpeta del programa pySim:

cd pysim

Empieza por hacer una lectura de prueba:

python3 pySim-read.py -p0

Puedes teclear pcsc_scan para ver

Lectura de SIM
Lectura de SIM

Si falla en lectura o escritura, comprueba que el servicio pcscd esté activo: sudo systemctl start pcscd.service

Antes de lanzarte a grabar la SIM, descarga el fichero XLS para generar el comando de grabación.

Las Sysmocom se bloquean y no pueden volver a ser grabadas tras tres intentos de grabación con el pin-adm erróneo.

Usa el .XLSX anterior para generar la orden correcta con los parámetros adecuados. Ejemplo de programación para MCC=999 MNC=70 y los OP y Ki de clase:

python3 pySim-prog.py --pcsc-device=0 --type="sysmoISIM-SJA2" --mcc=999 --mnc=70 --imsi=99970XXXXXXXXXX --op=11112233445566778899aabbccddeeff --ki=11112233445566778899aabbccddeeff --iccid=XXXXXXXXXXXXXXX --pin-adm=XXXXXXXXX --acc=XXXX
Grabación de SIM
Grabación de SIM
Outra gravación, esta vez para 001 01
Outra gravación, esta vez para 001 01

Autenticación CORE - SIM

Ambos equipos (SIM y CORE) tienen que ser conocer el Ki del suscriptor, pero este dato no se transmite. Tampoco es legible en la SIM, sólo se puede grabar.

Uno de los equipos posee el OP (operator code) y el otro el OPc. Vamos a usar la opción A (más habitual): OPc en core, OP en SIM:

Los datos se transmiten en ambos sentidos: El OPc se genera mediante una combinación de Ki y OP a través de un algoritmo de cifrado:

$$OPc=Encrypt\_Algo\_AES128\ (OP,Key) + OP $$

Más info:

Conexión de UE (móvil)

Previo a este paso, tienes que haber hecho el registro de subscriptores con los datos de las SIM que vas a usar: http://10.207.0.xxx:3000/

Claves predeterminadas:

Este subscriptor que en el CORE registramos con OPc, en el lado de la SIM se ha grabado con OP: python3 pySim-prog.py --pcsc-device=0 --type="sysmoISIM-SJA2" --mcc=001 --mnc=01 --imsi=001010000068774 --op=11112233445566778899aabbccddeeff --ki=11112233445566778899aabbccddeeff --iccid= 0123456701234567 --pin-adm=01234567 --acc=0123
Este subscriptor que en el CORE registramos con OPc, en el lado de la SIM se ha grabado con OP: python3 pySim-prog.py --pcsc-device=0 --type="sysmoISIM-SJA2" --mcc=001 --mnc=01 --imsi=001010000068774 --op=11112233445566778899aabbccddeeff --ki=11112233445566778899aabbccddeeff --iccid= 0123456701234567 --pin-adm=01234567 --acc=0123

Con solo conectar la SIM a un móvil encendido, éste se intentará registrar automáticamente a la red (he fallado usando 99970, éxito probando 00101):

Conexión manual (sólo si falla la automática)
Conexión manual (sólo si falla la automática)

Ya sea eligiendo manual o automáticamente, deberá aparecer el registro en Open5GS:

Y también en el móvil:

Red “Open5GS”. El mismo UE está haciendo dual-SIM con O2.
Red “Open5GS”. El mismo UE está haciendo dual-SIM con O2.

Deberás ingresar el APN (access point name), ya que este modelo de SIM no lo permite pregrabar. El predeterminado en Open5GS es internet:

Y con esto ya deberías poder hacer ping al servidor Open5GS y, si está correctamente configurada la NAT, a navegar!

Conexión de UE (módem)

Modem 5G SIMCOM
Modem 5G SIMCOM

Los modem se pueden usar con las aplicaciones y drivers del fabricante, o bien, en Linux, con el software genérico wvdial. Tutorial.

Procedemos a marcar con el comando:

sudo wvdial &

Vemos que la interfaz ppp0 se le asocia la IP 10.45.0.2. Tiene sentido ya que el servidor Open5GS tiene en su interfaz de túnel ogstun la dirección 10.45.0.1/16. Más parámetros de ppp0:

Ping a Internet forzando la Interfaz ppp0 (para que salga por el módem, y no por ethernet ni Wi-Fi):

ping -I ppp0 8.8.8.8

El modificador -I fuerza que los paquetes salgan por una interfaz determinada.

¿El ping falla? Puede que haya un problema con la ruta predeterminada 0.0.0.0 (puerta de enlace a Internet). Comprueba las rutas:

ip route show

Elimina otras rutas predeterminadas que interfieran en nuestra configuración. Bórralas con:

sudo ip route del default

Y añada la ruta correcta a Internet a través de la red móvil ppp0:

sudo ip route add default via 10.64.64.64 dev ppp0

En el lado del servidor Open5GS, podemos confirmar el ATTACH (conexión correcta) visualizando los logs:

Por su parte, esta eNB también notifica las conexiones en su interfaz web:

La eNB tiene una extraña función que mapea por NAT las IP de la red móvil a IP de la red local a la cual está conectada la eNB:

Esta función provoca fallos por problemas de MTU:

Pruebas de ancho de banda

Usa iperf al servidor Open5GS

Parámetros eNB

Agradecimientos

Agradecimientos a Alberto Estévez Caldas (GTI, UVigo)


Volver ao curso

Volver ao curso