Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
86 changes: 86 additions & 0 deletions docs/DESPLIEGUES/INSTALAR open5gs CURSO2025_2026.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
***INSTALAR open5gs CURSO2025/2026***
\*\*Si la máquina la creamos en proxmox confirmar que Processor→Type→host
1-Instalamos docker y portainer
Accedemos a [https://github.com/Tknika/5g-kutxa-ansible/tree/portainer](https://github.com/Tknika/5g-kutxa-ansible/tree/portainer)
Ejecutamos los pasos indicados:
Instalamos ansible: sudo apt update && sudo apt install \-y ansible git
Instalamos docker y portainer:
sudo ansible-pull \-U https://github.com/Tknika/5g-kutxa-ansible.git \--checkout portainer \-i localhost,
reboot(para meterlo en el grupo)
Comprobamos que está correcto: docker ps o https://localhost:9443

2-Instalamos open5gs
Accedemos: [https://github.com/herlesupreeth/docker\_open5gs](https://github.com/herlesupreeth/docker_open5gs)

Descargamos su repositorio:
Instalar git: sudo apt install git
Clonamos repositorio: git clone [https://github.com/herlesupreeth/docker\_open5gs](https://github.com/herlesupreeth/docker_open5gs)

Descargamos las imágenes: (En este caso solamente open5gs, no descargamos IMS…)
docker pull ghcr.io/herlesupreeth/docker\_open5gs:master
docker tag ghcr.io/herlesupreeth/docker\_open5gs:master docker\_open5gs

docker pull ghcr.io/herlesupreeth/docker\_grafana:master
docker tag ghcr.io/herlesupreeth/docker\_grafana:master docker\_grafana

docker pull ghcr.io/herlesupreeth/docker\_metrics:master
docker tag ghcr.io/herlesupreeth/docker\_metrics:master docker\_metrics

Levantamos el docker compose que necesitemos:
1- Accedemos al .env para realizar los cambios necesarios:
MNC, MCC, TAC
DOCKER\_HOST\_IP: La IP del PC donde estamos realizando la instalación
Para aplicar los cambios: Guardar y ejecutar:
set \-a
source .env
2-Para levantar un 5G completo levantaremos el fichero sa-deploy.yaml:
docker compose \-f sa-deploy.yaml up \-d
Comprobamos que está correcto: Acceder a portainer y visualizar todos los contenedores levantados.

***ROAMING open5gs CURSO2025/2026***

Para poder trabajar con varias radios en la misma aula:
Trabajamos con el core y la radio en un PLMN(Ej. 00110\) pero nos conectamos con un movil en la 00101

1-Conectamos core y radio (PLMN:00110)
2-Agregamos en webui el usuario: 00101 …
3-Configuramos el nrf.yaml:
![][image1]

***SEPARAR UPF open5gs CURSO2025/2026***

PC dónde teníamos el UPF instalado:
1-Copiamos el fichero sa-deploy.yaml y le llamamos core-sinUPF.yaml
En el fichero core-sinUPF.yaml:

- Comentamos o borramos toda la parte de upf:
- Agregamos “ports” “"8805:8805/udp” en el SMF

EN el fichero .env:

- DOCKER\_HOST\_IP=IP del core
- UPF\_IP=IP del UPF
- UPF\_ADVERTISE\_IP=IP del UPF

Levantamos el docker compose que necesitemos:
docker compose \-f core-sinUPF.yaml up \-d

PC dónde tendremos el UPF instalado:
1-Copiamos el fichero sa-deploy.yaml y le llamamos UPF2.yaml
En el fichero UPF2.yaml:

- Comentamos o borramos todo menos la parte de upf:
- En network lo ponemos modo host
- Borramos la parte de sysctls:

En el fichero .env:

- DOCKER\_HOST\_IP=IP del UPF
- UPF\_IP=IP del UPF
- UPF\_ADVERTISE\_IP=IP del UPF
- SMF\_IP=IP del core

Levantamos el docker compose que necesitemos:
docker compose \-f UPF2.yaml up \-d

[image1]: img/open5gs_image1.png
102 changes: 102 additions & 0 deletions docs/DESPLIEGUES/Pasos a realizar_Comandos_NETWORK SLICING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
# NETWORK SLICING

SST= Qué es
SD= Quién es

| Valor SST | Nombre | Descripción |
| :---- | :---- | :---- |
| **1** | **eMBB** | Banda ancha móvil mejorada (lo que usas para **Internet**). |
| **2** | **URLLC** | Comunicaciones de ultra-baja latencia (coches autónomos, cirugía remota). |
| **3** | **MIoT** | Internet de las cosas masivo (sensores de ciudades inteligentes). |
| **4** | **V2X** | Vehículo con todo (comunicaciones viales). |
| **5** | **HMTC** | Comunicaciones tipo máquina de alto rendimiento. |

Vamos a utilizar 2 SSTs pero podríamos usar el mismo SST y cambiar el SD.
Vamos a realizar 3 prácticas:

1. **Velocidad y Ancho de Banda**
2. **Latencia (Tiempo de respuesta)**
3. **Seguridad**

**1\. Velocidad y Ancho de Banda**
Para lograr que cada "rodaja" tenga capacidades de rendimiento distintas, debes configurar los parámetros de QoS (Quality of Service) y AMBR (Aggregate Maximum Bit Rate) dentro del núcleo de Open5GS.

En el repositorio de herlesupreeth, los archivos YAML ya separan el tráfico por SMF/UPF, pero la "magia" de las velocidades se define en la base de datos del suscriptor (HSS/UDM) a través de la WebUI.

1\. Diferenciar Ancho de Banda (AMBR)

El AMBR limita la velocidad máxima total del usuario para esa sesión PDU. Para tu caso:

* Slice Internet: Configura un APN-AMBR alto en Downlink (ej. 100 Mbps) y moderado en Uplink (ej. 20 Mbps).
* Slice Private (Streaming): Configura un APN-AMBR con prioridad en el Uplink (ej. 50 Mbps de subida) para soportar el flujo de las cámaras.

Cómo hacerlo:

En la Open5GS WebUI, edita el suscriptor y en la sección de Slices, añade dos configuraciones de sesión distintas para cada S-NSSAI (SST/SD):

* Slice 1 (Internet): SST 1-\> AMBR DL: 100Mbps, UL: 20Mbps.
* Slice 2 (Private): SST 1-\> AMBR DL: 10Mbps, UL: 50Mbps.

**Al hacerlo desde webui no me funciona, entro en la consola de UPF y ejecuto:**

tc qdisc add dev ogstun root tbf rate 5mbit burst 32kbit lat 400ms

Consigo limitar: *Limitamos el tráfico que va hacia el móvil (Downlink) a 5Mbps para que se note el cambio*
*\# 'ogstun' es la interfaz de túnel de Open5GS*
**Si borro e inicializo el contenedor deja de tener efecto la limitación.**

**2\. Latencia (Tiempo de respuesta)**

**Diferenciar Latencia y Prioridad (5QI)**

La latencia se gestiona mediante el identificador 5QI (5G QoS Identifier). Cada valor de 5QI tiene estandarizados retardos máximos y prioridades:

* Internet: Usa 5QI 9 (Tráfico por defecto, retardo admisible de 300ms).
* Private/Streaming: Usa 5QI 4 (Garantizado, ideal para video streaming con retardo de 150ms) o incluso 5QI 1 si quieres simular servicios de misión crítica.

***Implementación:***
*Creamos dos casos el de APN internet (uso “normal”) y el de APN private (uso “Video Streaming”)*
Paso 1: Configuración de Señalización (WebUI)
Primero, definiremos los perfiles en el Core para que el móvil "sepa" qué tipo de tráfico está cursando.

1. Accede a la Open5GS WebUI.
2. En el suscriptor (IMSI) de tus móviles, busca la sección de Slices:
1. Slice Internet (SST:1): En la configuración de la sesión PDU, asegúrate de que el 5QI sea 9\. Este es el valor Non-GBR (prioridad baja) estándar para internet.
2. Slice Private (SST:2): Cambia el 5QI a 4\. Este valor indica a la red que es tráfico de Video Streaming (Buffered) con mayor prioridad y menores requisitos de retardo.

Paso 2: Implementación de Latencia Real (UPF)
Como vimos, la Baicells y los móviles podrían ignorar el 5QI a nivel físico. Para que el alumno vea la diferencia al hacer un ping, aplicaremos el retardo en el UPF.
Accedemos a la consola del contenedor del upf-internet:
tc qdisc add dev ogstun root netem delay 100ms 10ms
Accedemos a la consola del contenedor del upf-private:
tc qdisc add dev ogstun root netem delay 5ms

Paso 3: Verificación en el Curso (Móviles Reales)
***Prueba de Latencia (Ping):***

* Desde el móvil en Slice Internet: ping 8.8.8.8 -\> Deberían ver latencias de \>150ms.
* Desde el móvil en Slice Private: ping 8.8.8.8 -\> Deberían ver latencias mucho menores (la base de la radio \+ 5ms).

***Explicación:***

* En una red comercial, el 5QI 4 le diría a la Baicells que ese móvil tiene prioridad en la cola de radio frente al de 5QI 9\.
* Al no tener un "Scheduler" activo en la radio que respete esto, el UPF con tc netem es nuestra herramienta para emular ese comportamiento de red extremo a extremo.

**3\. Aislamiento de Red (Seguridad del Slice)**

El objetivo es que el Móvil 1 (Internet) navegue “por todo el mundo” o zona que definamos, mientras que el Móvil 2 (Private) esté "atrapado" en un entorno seguro donde solo puede ver la cámara de streaming.

En el repositorio de Herle, cada slice tiene su propio contenedor UPF. Esto nos permite aplicar reglas de firewall (iptables) de forma independiente.

| Slice | Política de Seguridad | Resultado esperado |
| :---- | :---- | :---- |
| **Internet** | Open Policy | Navegación libre (Google, YouTube, etc.) |
| **Private** | Walled Garden | **Solo** acceso a la IP de la Cámara / Servidor. |

En el contenedor upf-private, bloquea el acceso a una IP externa (ej. Google) pero permite el acceso a tu servidor local de cámaras:
bash
*\# Dentro del contenedor upf-private*
iptables \-A FORWARD \-d 8.8.8.8 \-j DROP

El alumno verá que el móvil en el slice de internet puede hacer ping 8.8.8.8, pero el móvil en el slice de cámaras no, aunque ambos estén conectados a la misma antena Baicells.

Binary file added docs/DESPLIEGUES/img/open5gs_image1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@


**Manual de instalación y configuración de la SDR Pluto y Soft Satsagen**

**Instalación de la SDR Pluto para uso con Windows:**

En primer lugar, antes de conectar la SDr al PC será necesario instalar los drivers:
Driver para windows:
[**PlutoSDR-M2k-USB-Drivers.exe**](https://github.com/analogdevicesinc/plutosdr-m2k-drivers-win/releases/download/v0.9/PlutoSDR-M2k-USB-Drivers.exe)

Una vez instalados los drivers, se conecta la SDR al PC y comprobamos que Windows reconoce el dispositivo y lo identifica.

**Instalación del sofware Satsagen para uso con Windows:**

Se procede a la descarga del software de la página:

[**http://www.albfer.com/satsagen-download-page/\#content**](http://www.albfer.com/satsagen-download-page/#content)

Y a continuación se ejecuta el instalador:

**![][image1]**

Se procede a su encendido (Pulsar “Power” y después “Spectrum”):

**![][image2]**

**![][image3]**

**Ampliación de frecuencias hasta 6GHz:**

1. Si aún no lo tiene, descargue el software de emulación de terminal PuTTY de [putty.org](http://putty.org/) .
2. Conecte su PlutoSDR en el puerto USB.
3. Abra el Administrador de dispositivos de Windows y expanda la entrada Puertos (COM y LPT). Tome nota de qué puerto COM está utilizando la consola serie PlutoSDR. En la captura de pantalla, el nuestro está usando COM7. Cierre el administrador de dispositivos después.

![][image4]

4. Abra PuTTY y seleccione el botón 'serie'.
5. En 'Línea serie', escriba el puerto COM que está utilizando PlutoSDR. En nuestro caso escribimos COM7.

![][image5]
6. Presiona Abrir y deberías ser recibido con una pantalla de inicio de sesión.

7. Inicie sesión con las credenciales de usuario: root, contraseña: analog.

![][image6]

**¿Cómo conocer la versión?.** Escribimos por comando:

**\#fw\_printenv attr\_name**

respuesta: attr\_name=compatible

**\# fw\_printenv attr\_val**

**respuesta: attr\_val=ad9364**

![][image7]

![][image8]
Para cambiarlo a otra opción (ad9361 por ejemplo):
\# **fw\_setenv attr\_name compatible**
\# **fw\_setenv attr\_val ad9361**

**BÚSQUEDA DE FRECUENCIAS EN EL ESPECTRO:**
Búsqueda de la radio o otra cosa:

Búsqueda de wifi en 2,4GHz:

![][image9]

Búsqueda de wifi en 5GHz:

![][image10]

[image1]: img/image1.png

[image2]: img/image2.png

[image3]: img/image3.png

[image4]: img/image4.png

[image5]: img/image5.png

[image6]: img/image6.png

[image7]: img/image7.png

[image8]: img/image8.png

[image9]: img/image9.png

[image10]: img/image10.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@

**CONFIGURACIÓN DE LAS SIMs DE OPEN-CELL**

Visitamos la web con el siguiente enlace:

[https://open-cells.com/](https://open-cells.com/)

[https://open-cells.com/index.php/sim-cards/](https://open-cells.com/index.php/sim-cards/)

Con el desarrollo de la siguiente aplicación se puede leer/escribir en la SIM:
![][image1]

Accedemos a la siguiente página web para buscar al final de ella el enlace para la descarga del programa (source code):

[https://open-cells.com/index.php/uiccsim-programing/](https://open-cells.com/index.php/uiccsim-programing/)

A continuación vamos a la carpeta de “descargas” y descomprimimos el fichero para tener el ejecutable.
![][image2]A continuación abrimos un “terminal”, nos movemos hasta la carpeta que contiene el fichero ejecutable y ponemos:

**sudo ./program\_uicc**

Se produce un error con la última versión de la aplicación (si instalamos la versión 2.5 no ocurre).

Seguimos con el tutorial. Insertamos el lector/grabador con una SIM y procedemos a leerla:
**sudo DEBUG=y ./program\_uicc**

Se puede consultar la ayuda en línea mediante el comando:
sudo ./program\_uicc \--help

Una configuración típica sería:

sudo ./program\_uicc \--adm 12345678 \--imsi 208920100001101 \--isdn 00000001 \--acc 0001 \--key 6874736969202073796d4b2079650a73 \--opc 504f20634f6320504f50206363500a4f \--spn "OpenCells01" \--authenticate \--noreadafter

Es importante el parámetro “adm” que es el valor de 8 dígitos que viene grabada en la propia SIM de forma visual:

P**ara corregir el error**: ./program\_uicc: /lib/x86\_64-linux-gnu/libstdc++.so.6: version \`GLIBCXX\_3.4.29' not found (required by ./program\_uicc)

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install gcc-4.9
sudo apt-get upgrade libstdc++6
After this is complete, make sure to run the following:
sudo apt-get dist-upgrade
Also, make sure to confirm the necessary dependencies are installed for the right GLIBCXX version.
strings /usr/lib/x86\_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX

[image1]: img/opencell_image1.png

[image2]: img/opencell_image2.png
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@

**CONFIGURACIÓN DE LAS SIMs DE SYSMOCOM**

Pasos para instalar el programa pySIM ([https://github.com/osmocom/pysim](https://github.com/osmocom/pysim)):

* Descargamos el código fuente a una carpeta local (en el ordenador en el que vayamos a conectar el lector de tarjetas SIM por USB):
* git clone [https://github.com/osmocom/pysim](https://github.com/osmocom/pysim)
* Nos movemos a la carpeta correspondiente:
* cd pysim
* Creamos un entorno virtual de Python (Virtual Environment) para aislar las dependencias y lo activamos:
* sudo apt-get install \--no-install-recommends pcscd libpcsclite-dev python3 python3-setuptools python3-pyscard python3-pip
* sudo apt install python3.8-venv
* python3 \-m venv venv
* source venv/bin/activate
* Nos aseguramos de que aparece el entorno activado (venv entre paréntesis) ![][image1]
* Instalamos las dependencias definidas por el proyecto en el fichero requirements.txt:
* pip install \-r requirements.txt
* Ejecutamos la shell del programa
* ./pySim-shell.py \-p 0 (el parámetro 0 es importante si se tiene más de un lector conectado en el ordenador)
* Antes de nada, vamos a verificar que el ADM de la SIM introducida es la correcta:
* verify\_adm 38235251
* Si el comando no devuelve a nada, es que el ADM es correcto


OPCIONES PARA PROGRAMAR:

[https://osmocom.org/projects/pysim/wiki/PySim-prog](https://osmocom.org/projects/pysim/wiki/PySim-prog)


apt install python3.12-venv






[image1]: img/sysmocom_image1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading