20 - Simulación CORE, RAN y UE con Open5GS y UERANSIM

Volver ó índice

Esquema de bloques de core

Protocolos típicos: IP, TCP, UDP. Protocolos que quizáis non coñezas: SCTP: Stream Control Transport Protocol. GPT: General Packet Radio Service Tunneling Protocol.

A rede de core fai de intermediaria entre a RAN e Internet. Consta de:

Core 5G. Plano de usuario (verde) e plano de control (amarelo). O AMF fai de interface entre RAN e control plane. Pola súa banda, o UPF fai de interface entre RAN e user plane
Core 5G. Plano de usuario (verde) e plano de control (amarelo). O AMF fai de interface entre RAN e control plane. Pola súa banda, o UPF fai de interface entre RAN e user plane

Temos un plano de usuario, que é onde circula o tráfico propio UE (Whatsapp, webs, YouTube… e todo o que conecte con Internet) e un plano de control, que revisa o número de abonado da SIM, claves de acceso, estado de alta do cliente, etc. O acceso a Internet dos UE se fai a través do user plane, pero só cando o permite o control plane.

AMF e UPF son servizos propios do core 5G. En xeracións anteriores estes bloques usan outros nomes.

Core 5G (5GC, NGC):

Bloques 5G SA:

Core 4G (4GC) e 5G Non-standalone:

Aquí o MME fai a labor do AMF e o SGWU fai a labor do UPF. Este core é compatible coas xeracións anteriores.

Outros esquemas (non mirar, só referencia)

Red móvil completamente virtual

Los bloques funcionales de esta práctica son:

Vamos a utilizar dos máquinas virtuales: una para Open5GS y otra para UERANSIM. Usaremos Ubuntu 22.04 en ambas. La versión Desktop para Open5GS y la versión Server para UERANSIM.

Esta práctica está basada en los tutoriales oficiales y, específicamente, en dos tutoriales que combinan Open5GS y UERANSIM:

Descrición de Open5GS

Consiste nunha implementación software de core 4G/5G ou, o que é o mesmo: NSA/SA.

Imaxe de Open5GS: https://open5gs.org/open5gs/docs/guide/01-quickstart/
Imaxe de Open5GS: https://open5gs.org/open5gs/docs/guide/01-quickstart/

Na figura, os bloques verdes representan as partes do core 4G (e 5G NSA) e os vermellos, o core 5G (SA).

Só hai que configurar tres parámetros para activar a rede:

Bloques nos que se realizan configuracións para 4G e 5G NSA:

Bloques nos que se realizan configuracións para 5G SA:

Datos de RAN

O MME tamén regula a selección de APN (Access Point Name) que usará o cliente (por defecto: internet). Máis info:

Tamén regula o APN/DNN:

Importante: MME, PLMN e TAC deben coincidir en core (MME, AMF) e RAN.

Datos de usuario (UE)

O core tamén autentica ós usuarios. Os seus datos se almacenan nas tarxetas SIM (parte de cliente) e por parte do servidor, nun sistema xestor de bases de datos “MongoDB”. A base de datos é a mesma para 4G e 5G.

A base de datos é accesible mediante un servidor web:

WebUI para Open5GS. Dos IMSI registrados
WebUI para Open5GS. Dos IMSI registrados

Conexión de eNB/gNB

Quicksetting en eNB Baicells
Quicksetting en eNB Baicells

O únicos parámetros que necesita a estación base son:

Non confundir PCI con cell ID

E listo! Actualmente as eNB/gNB non teñen moita intelixencia. Parécense bastante a puntos de acceso Wi-Fi.

Preparación de clientes

As SIM se graban mediante lector de DNIe.

Normalmente a SIM leva Ki e OPc en texto plano, e o core só almacena o OP

Información detallada: https://danielrios.me/apuntes/cursos/2122mir5G/A12an4/index.html “Parámetros de configuración do UE”

Para axilizar, podes calcar os datos de todos os clientes simplemente cambiando o MSIN. A Ki debería ser única para cada usuario por motivos de seguridade, pero a rede funciona igual ainda que todos teñan a mesma.

O IMEI (International Mobile Equipment Identity) indica cal é o UE, non o abonado. Podes comprobalo marcando *#06# e pulsando descolgar.

Acceso mediante SSH

La versión desktop no lleva SSH. Debes instalarlo con:

sudo apt update && sudo apt install -y openssh-server

Instala Open5GS

Tutorial: https://open5gs.org/open5gs/docs/guide/01-quickstart/

Que no te confunda la red túnel 10.45.0.0/24. Donde pone 10.10.x.x o 10.11.x.x es la IP de tu VM Open5GS. No te compliques y mete en todo la IP estática de la VM.

sudo apt update
sudo apt install wget gnupg -y
wget -qO - yhttps://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list
sudo apt update
sudo apt install -y mongodb-org
wget http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2_amd64.deb
sudo dpkg -i libssl1.1_1.1.1f-1ubuntu2_amd64.deb
sudo apt install -y mongodb-org
sudo systemctl status mongod --no-pager
sudo systemctl start mongod
sudo systemctl enable mongod
sudo systemctl status mongod --no-pager
sudo add-apt-repository ppa:open5gs/latest
sudo apt update
sudo apt install -y open5gs
sudo reboot now
sudo apt update && sudo apt install curl -y
sudo systemctl status mongod --no-pager
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt-get install -y nodejs
curl -fsSL https://open5gs.org/open5gs/assets/webui/install | sudo -E bash -
sudo systemctl status mongod --no-pager
#history
sudo nano -l /etc/open5gs/mme.yaml
sudo nano -l /etc/open5gs/sgwu.yaml
sudo nano -l /etc/open5gs/amf.yaml
sudo nano -l /etc/open5gs/upf.yaml


### Enrutamiento
sudo sysctl -w net.ipv4.ip_forward=1
sudo sysctl -w net.ipv6.conf.all.forwarding=1

sudo ip addr add 10.45.0.1/16 dev ogstun
sudo ip addr add 2001:230:cafe::1/48 dev ogstun
sudo ip link set ogstun up


### Regla NAT para que el tráfico salga de la red móvil virtualizada a Internet
sudo iptables -t nat -A POSTROUTING -s 10.45.0.0/16 ! -o ogstun -j MASQUERADE
sudo ip6tables -t nat -A POSTROUTING -s 2001:db8:cafe::/48 ! -o ogstun -j MASQUERADE

sudo ufw status


sudo iptables -I INPUT -i ogstun -j ACCEPT

Cuando configures, aplica los cambios:

sudo systemctl restart open5gs-mmed
sudo systemctl restart open5gs-sgwud
sudo systemctl restart open5gs-amfd
sudo systemctl restart open5gs-upfd

Cuando quieras ver lo que ocurre en la red, usa Wireshark o mira el log:

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

Instala UERANSIM

#!/bin/bash

# https://github.com/aligungr/UERANSIM/wiki/Installation

sudo apt update
sudo apt install -y git make gcc g++ libsctp-dev lksctp-tools iproute2
# sudo apt install snap snapd -y
sudo snap install cmake --classic

cd ~
git clone https://github.com/aligungr/UERANSIM
cd UERANSIM
make

Crea los archivos de configuración:

cd ~/UERANSIM/config
cp open5gs-gnb.yaml virtualbox_open5gs-gnb.yaml
cp open5gs-ue.yaml virtualbox_open5gs-ue.yaml


nano virtualbox_open5gs-gnb.yaml
../build/nr-gnb -c virtualbox_open5gs-gnb.yaml


nano virtualbox_open5gs-ue.yaml
sudo ../build/nr-ue -c virtualbox_open5gs-ue.yaml
sudo ../build/nr-ue -c virtualbox_open5gs-ue2.yaml

Solución

Un cliente conectado. Arriba izquierda: Open5gs
Abajo izquierda: UERANSIM gNB
Abajo centro: UERANSIM UE (el cliente)
Derecha: interfaz web de open5gs con la información del cliente en el AMF
Un cliente conectado. Arriba izquierda: Open5gs
Abajo izquierda: UERANSIM gNB
Abajo centro: UERANSIM UE (el cliente)
Derecha: interfaz web de open5gs con la información del cliente en el AMF
Dos clientes conectados
Dos clientes conectados

Captura Wireshark


Volver ao curso