Skip to content

Latest commit

 

History

11 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 

Repository files navigation

Implementação Open5GS + UERANSIM com Namespaces

Implementação de Core 5G e RAN (Open5GS/UERANSIM) usando namespaces Linux. Cada NF corre no seu próprio namespace, o que garante isolamento e organização.


1. Instalação e Dependências

Pré-requisitos

Instalação de ferramentas de compilação, bibliotecas de rede e utilitários básicos.

sudo apt update
sudo apt install -y build-essential cmake libsctp-dev libssl-dev libyaml-dev \
iproute2 iptables net-tools curl iputils-ping git

Base de Dados (MongoDB)

O Open5GS utiliza o MongoDB para armazenar os dados dos subscritores.

sudo apt install -y mongodb-org
sudo systemctl start mongod
sudo systemctl enable mongod

Open5GS (5G Core)

Instalação a partir do repositório oficial.

Nota: Os serviços do systemd são desativados para permitir a execução manual controlada pelos scripts de gestão.

sudo add-apt-repository ppa:open5gs/latest
sudo apt update
sudo apt install -y open5gs
sudo systemctl stop open5gs-*
sudo systemctl disable open5gs-*

UERANSIM (Simulador RAN/UE)

Compilação do simulador de rádio.

cd ~
git clone https://github.com/aligungr/UERANSIM
cd UERANSIM
make
# Os executáveis (nr-gnb, nr-ue) ficarão localizados em ~/UERANSIM/build/

2. Estrutura do Projeto

Scripts de Automação

Scripts localizados na raiz do projeto para gestão do ciclo de vida da rede.

Ficheiro Função
setup_network.sh Cria a bridge br-5g, namespaces (ns-gnb1, ns-gnb2), IPs e rotas estáticas.
start_open5gs.sh Inicia os processos do Core (AMF, SMF, UPF, etc.) dentro dos namespaces apropriados.
stop_open5gs.sh Termina todos os processos e liberta recursos do sistema.
reset_network.sh Limpa as configurações de rede (remove bridge, interfaces virtuais e rotas).
add_subscribers.sh Regista os utilizadores (UE1 e UE2) na base de dados MongoDB.
diagnose.sh Ferramenta de diagnóstico para verificar o estado dos processos e interfaces.

Ficheiros de Configuração

Devem ser copiados para /etc/open5gs/ antes de iniciar.

  • Core Network: amf.yaml, smf.yaml, nssf.yaml, pcf.yaml, upf.yaml, upf2.yaml
  • Radio Access Network (UERANSIM): gnb1.yaml, gnb2.yaml, ue1.yaml, ue2.yaml

3. Guia de Execução

Passo 1: Inicializar o Core Network

Execute o script de reinício para preparar o ambiente limpo e iniciar os serviços centrais.

sudo bash stop_open5gs.sh
sudo bash reset_network.sh
sudo bash setup_network.sh
sudo bash start_open5gs.sh

Após iniciar, registe os subscritores e verifique o estado:

sudo bash add_subscribers.sh
sudo bash diagnose.sh

Passo 2: Iniciar as Estações Base (gNodeB)

Abra terminais separados para visualizar os logs de cada componente.

Terminal 2 (gNodeB 1):

sudo ip netns exec ns-gnb1 /home/$USER/UERANSIM/build/nr-gnb -c /etc/open5gs/gnb1.yaml

Terminal 3 (gNodeB 2):

sudo ip netns exec ns-gnb2 /home/$USER/UERANSIM/build/nr-gnb -c /etc/open5gs/gnb2.yaml

Passo 3: Iniciar os Equipamentos de Utilizador (UE)

Terminal 4 (UE 1 - Conecta ao gNB1):

sudo ip netns exec ns-gnb1 /home/$USER/UERANSIM/build/nr-ue -c /etc/open5gs/ue1.yaml

Terminal 5 (UE 2 - Conecta ao gNB2):

sudo ip netns exec ns-gnb2 /home/$USER/UERANSIM/build/nr-ue -c /etc/open5gs/ue2.yaml

4. Validação e Testes

Para testar a conectividade de dados (Internet) através da rede 5G simulada, utilize a interface de túnel uesimtun0 criada dentro dos namespaces.

Teste de Ping (UE1):

sudo ip netns exec ns-gnb1 ping -I uesimtun0 -c 4 8.8.8.8

Teste de Ping (UE2):

sudo ip netns exec ns-gnb2 ping -I uesimtun0 -c 4 8.8.8.8

Topologia de Rede e Endereçamento IP

Abaixo encontra-se o mapa de IPs configurados dentro dos Namespaces Linux. Todos os componentes estão ligados à bridge central br-5g (Gateway: 10.100.0.1).

Componente Namespace Interface IP Fixo (Core) Rede/Subnet
MongoDB (Host) br-5g 10.100.0.1 Core Network
NRF ns-nrf eth0 10.100.0.10 Core Network
AMF ns-amf eth0 10.100.0.5 Core Network
SMF ns-smf eth0 10.100.0.4 Core Network
UPF 1 ns-upf1 eth0 10.100.0.7 Core Network
UPF 2 ns-upf2 eth0 10.100.0.8 Core Network
AUSF ns-ausf eth0 10.100.0.11 Core Network
UDM ns-udm eth0 10.100.0.12 Core Network
PCF ns-pcf eth0 10.100.0.13 Core Network
NSSF ns-nssf eth0 10.100.0.14 Core Network
BSF ns-bsf eth0 10.100.0.15 Core Network
UDR ns-udr eth0 10.100.0.20 Core Network
SCP ns-scp eth0 10.100.0.200 Core Network
gNB 1 ns-gnb1 eth0 10.100.0.30 RAN (Rádio)
gNB 2 ns-gnb2 eth0 10.100.0.31 RAN (Rádio)

Endereçamento dos Utilizadores (Slicing)

UE (User Equipment) Ligado a Slice ID IP Atribuído (Tun) Gateway (UPF)
UE 1 gNB 1 SST: 1 (Internet) 10.45.x.x 10.45.0.1 (UPF1)
UE 2 gNB 2 SST: 2 (Serviços) 10.46.x.x 10.46.0.1 (UPF2)

5. Arquitetura do Sistema

flowchart TB
    subgraph Host ["Host Linux (127.0.0.1)"]
        
        subgraph Bridge ["Rede de Gestão (Bridge br-5g: 10.100.0.0/24)"]
            direction TB
            
            subgraph Control_Plane ["Control Plane (Sinalização)"]
                direction TB
                NRF("<b>NRF</b><br/>10.100.0.10"):::cp
                SCP("<b>SCP</b><br/>10.100.0.200"):::cp
                
                subgraph Auth_Data ["Dados & Auth"]
                    direction LR
                    UDM("<b>UDM</b><br/>10.100.0.12"):::cp
                    AUSF("<b>AUSF</b><br/>10.100.0.11"):::cp
                    UDR("<b>UDR</b><br/>10.100.0.20"):::cp
                    Mongo[("<b>MongoDB</b><br/>10.100.0.1")]:::db
                end

                subgraph Policy_Slice ["Políticas & Slicing"]
                    direction LR
                    PCF("<b>PCF</b><br/>10.100.0.13"):::cp
                    NSSF("<b>NSSF</b><br/>10.100.0.14"):::cp
                    BSF("<b>BSF</b><br/>10.100.0.15"):::cp
                end

                subgraph Main_Control ["Gestão de Sessão & Mobilidade"]
                    direction LR
                    AMF("<b>AMF</b><br/>10.100.0.5"):::main_cp
                    SMF("<b>SMF</b><br/>10.100.0.4"):::main_cp
                end
            end
            
            subgraph User_Plane ["User Plane (Dados)"]
                direction LR
                UPF1("<b>UPF 1</b> (Internet)<br/>IP: 10.100.0.7<br/>(Subnet UE: 10.45.0.1)"):::up
                UPF2("<b>UPF 2</b> (Slice2)<br/>IP: 10.100.0.8<br/>(Subnet UE: 10.46.0.1)"):::up
            end
        end

        subgraph RAN ["Radio Access Network (UERANSIM)"]
            direction LR
            GNB1("<b>gNB 1</b><br/>IP: 10.100.0.30"):::ran
            UE1("<b>UE 1</b><br/>Tun: 10.45.x.x"):::ue

            GNB2("<b>gNB 2</b><br/>IP: 10.100.0.31"):::ran
            UE2("<b>UE 2</b><br/>Tun: 10.46.x.x"):::ue
        end

    end

    subgraph Internet ["External Network"]
        WWW((Internet)):::ext
    end

    %% Ligações RAN -> Core
    GNB1 -- "N2 (SCTP)" --> AMF
    GNB2 -- "N2 (SCTP)" --> AMF
    GNB1 -- "N3 (GTP)" --> UPF1
    GNB2 -- "N3 (GTP)" --> UPF2
    
    %% Ligações Internas Core
    AMF <--> SMF
    SMF <--> UPF1
    SMF <--> UPF2
    
    %% Saída para Internet (NAT)
    UPF1 -- NAT --> WWW
    UPF2 -- NAT --> WWW

    %% Ligações Rádio (Simuladas)
    UE1 -.-> GNB1
    UE2 -.-> GNB2

    %% Ligações de Dados
    UDR -.-> Mongo
    UDM <--> UDR
    AUSF <--> UDM
    AMF <--> AUSF

    %% Estilos
    classDef cp fill:#e1f5fe,stroke:#01579b,color:black;
    classDef main_cp fill:#81d4fa,stroke:#01579b,stroke-width:2px,color:black;
    classDef db fill:#c8e6c9,stroke:#2e7d32,color:black;
    classDef up fill:#ffccbc,stroke:#bf360c,stroke-width:2px,color:black;
    classDef ran fill:#ffe0b2,stroke:#e65100,stroke-width:2px,color:black;
    classDef ue fill:#d1c4e9,stroke:#4527a0,color:black;
    classDef ext fill:#b2ebf2,stroke:#006064,color:black;
Loading

Legenda da Arquitetura

  • AMF (Access and Mobility Management Function): Gestão de acessos e mobilidade
  • SMF (Session Management Function): Gestão de sessões de dados
  • UPF (User Plane Function): Encaminhamento de tráfego de utilizador
  • NRF (Network Repository Function): Registo e descoberta de serviços
  • PCF (Policy Control Function): Controlo de políticas
  • AUSF (Authentication Server Function): Autenticação de utilizadores
  • UDM (Unified Data Management): Gestão de dados de subscritores
  • gNodeB: Estação base 5G
  • UE (User Equipment): Equipamento do utilizador (smartphone, tablet, etc.)

Network Slicing no Open5GS

1. Definição das Slices

Slice 1 (Padrão)

  • SST (Slice/Service Type): 1
  • SD (Slice Differentiator): Não definido (padrão)
  • Serviço: Acesso à internet geral
  • APN/DNN: internet

Slice 2 (Dedicada)

  • SST: 2
  • SD: 112233
  • Serviço: Rede isolada ou específica
  • APN/DNN: slice2

2. Arquitetura de Acesso (RAN)

A rede de acesso é composta por dois gNBs, cada um situado em uma área de rastreamento (TAC) distinta, simulando cobertura geográfica ou lógica separada.

gNB 1 (gnb1.yaml)

  • Identificação: TAC 1
  • Endereçamento IP: 10.100.0.30
  • Suporte a Slices: Configurado para transmitir (broadcast) suporte tanto à Slice 1 quanto à Slice 2
  • Função: Atuar como ponto de acesso primário para usuários de tráfego geral

gNB 2 (gnb2.yaml)

  • Identificação: TAC 2
  • Endereçamento IP: 10.100.0.31
  • Suporte a Slices: Também suporta Slice 1 e Slice 2
  • Função: Atuar como ponto de acesso secundário ou dedicado para testes de mobilidade e segregação

3. Perfil dos Usuários (UEs)

UE 1 (ue1.yaml)

  • Identificador: imsi-999700000000001
  • Ponto de Acesso: Forçado a conectar-se via gNB 1 (10.100.0.30)
  • Requisição de Serviço: Solicita estabelecimento de sessão PDU na Slice 1 (SST 1)
  • Comportamento: O tráfego deste usuário é roteado para a APN internet, seguindo o fluxo padrão de banda larga

UE 2 (ue2.yaml)

  • Identificador: imsi-999700000000002
  • Ponto de Acesso: Forçado a conectar-se via gNB 2 (10.100.0.31)
  • Requisição de Serviço: Solicita explicitamente a Slice 2 (SST 2, SD 112233)
  • Comportamento: O tráfego é isolado na APN slice2. O Core Network valida o par SST/SD e, se autorizado, estabelece o túnel GTP correspondente

Notas Importantes

  • A interface uesimtun0 é criada automaticamente pelo UERANSIM quando o UE se conecta com sucesso

About

Project for the course "Mobile Communications"

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages