. Este trabalho contém o script sobre como criar uma rede free5gc subindo o serviço de NWDAF para que posso coletar dados de dispositivos móveis e gerar insights através de dashboards para análise de anomalias de comportamento do dispositivo.
. A NWDAF foi definido no 3GPP TS 29.520 que incorpora interfaces padrão da arquitetura baseada em serviço para coletar dados por assinatura ou modelo de solicitação de outras funções de rede e procedimentos semelhantes. O objetivo é fornecer funções analíticas na rede para automação ou geração de relatórios, resolvendo os principais desafios de interface ou formato personalizado.
. Num ambiente onde está se “ouvindo” uma rede 5G (Free5GC) coletando dados para serem imputados e gerados insights por meios de dashboards para que possam analisados e orientem na solução de possíveis anomalias geradas e identificadas em eventos de sinalização e comportamento de dispositivos. Assim, coletando diferente tipos de dados será possível ver a causa da anomalia e obtendo uma assertividade significativa na solução do problema.
Antes de iniciar a instalação e configuração, conforme documentação da free5gc é recomendado o seguinte ambiente: • Software ○ OS: Ubuntu 18.04 ○ gcc 7.3.0 ○ Go 1.14.4 linux/amd64 ○ kernel version 5.0.0-23-generic
• Minimum Hardware ○ CPU: Intel i5 processor ○ RAM: 4GB ○ Hard drive: 160GB ○ NIC: Any 1Gbps Ethernet card supported in the Linux kernel • Recommended Hardware ○ CPU: Intel i7 processor ○ RAM: 8GB ○ Hard drive: 160GB ○ NIC: Any 10Gbps Ethernet card supported in the Linux kernel
1) Instalar as ferramentas: Visual Studio Code, NodeJS, GoLand, GO, Curl, NPM, Net-tools, MongoDB, Java, OpenSSH, Python, Yarn. Executar primeiro "sudo apt-get update" para atualização de pacotes
. Para verificar a versão de instalação do Nodejs, digitar: nodejs --version
. Para verificar a versão de instalação do Visual Studio Code, digitar: code --version
. Visual Studio Code:
sudo apt install software-properties-common apt-transport-https wget
wget -q https://packages.microsoft.com/keys/microsoft.asc -O- | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main"
sudo apt install code
. Nodejs:
sudo snap install nodejs
- As vezes é necessário instala o npm, que é o pacote gerenciador do Nodejs
sudo apt install npm
§ Caso tenha algum problema com a versão do NodeJs os comandos abaixo utilizando a versão estável para o free5gc
sudo apt-get remove nodejs
sudo apt install wget
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.34.0/install.sh | bash
source ~/.profile
nvm install 14.17.5
§ Verifique se a instalação ocorreu com sucesso checando a versão do Node.js:
node --version
. Goland:
sudo apt-get install snapd
sudo snap install goland --classic
. Go:
sudo snap install go --channel=1.14/stable --classic
go version
. NetTools:
sudo apt-get install net-tools
. Curl:
sudo apt install curl
. NPM:
sudo apt install npm
. MongoDB:
1. Instalar o MongoDB
sudo apt -y update
sudo apt -y install mongodb wget git
2. Execute o comando systemctl a seguir para iniciar o serviço MongoDB:
sudo systemctl start mongodb
3. Verificar o status do serviço:
sudo systemctl status mongodb
4. Depois de confirmar que ele está funcionando como esperado, habilite o serviço MongoDB para iniciar durante a inicialização:
sudo systemctl enable mongodb
5. Para verificar o MongoDB inicializar com o comando "Mongo" e para ver os databases instalado, executar as linhas de comando em sequencia:
mongo
show databases
. OpenSSH:
1. Instalando o openssh:
sudo apt-get update
sudo apt-get install openssh-server
2. Ativando o serviço
sudo service ssh status
3. Verificando se o serviço está ativo e funcionando
sudo systemctl status sshd
4. Habilitando conexões SSH em seu host:
sudo ufw allow ssh
- Se não tiver certeza se está usando ativamente o firewall UFW, execute o comando
sudo ufw status
5. Verificando se o serviço está habilitado ou não:
sudo systemctl list-unit-files | grep enabled | grep ssh
- Se não houver resultados em seu terminal, você deve “habilitar” o serviço para que seja iniciado no momento da inicialização
sudo systemctl enable ssh
6. Reiniciando seu servidor SSH para aplicar as alterações:
sudo systemctl restart sshd
7. Verificar se o serviço foi reiniciado:
sudo systemctl status sshd
. Java:
1. Instalando o java:
sudo apt-get update
sudo apt install default-java
. Yarn:
sudo apt-get update
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt update && sudo apt install yarn
. Python
sudo apt update && apt -y install python-minimal && sudo apt -y install git && sudo apt -y install ansible
2) Criar um diretório
. mkdir openapi_teste
cd openapi_teste
3) Instalar o Editor Texto -Editor de linha de comando (CLI)
. npm install @openapitools/openapi-generator-cli -g
openapi-generator-cli version-manager set 5.3.0
4) Criar o arquivo TS29520_Nnwdaf_Analytics.yaml
touch TS29520_Nnwdaf_AnalyticsInfo.yaml
. Verificar se o arquivo foi criado corretamente
5) Repositório que tenha a função e serviço do NWDAF
site:github.com Nnwdaf_AnalyticsInfo.yaml
. Depois de clicar em RAW, copiar tudo para colar no arquivo "TS29520_Nnwdaf_AnalyticsInfo.yaml":
--> Caso nencessite, dar permissão de leitura e escrita neste diretório (openapi_teste)
chown <usaurio> -R
6) Abrir o Vidual Studio Code e cola o código copiado do arquivo do GitHub "TS29520_Nnwdaf_AnalyticsInfo.yaml":
. Este arquivo .YAML foi implementado de acordo com as prerrogativas doa openapi seguindo a especificação da 3gpp que descreve o micro serviço analytics Info para ser provido pela NWDAF.
. Também outro serviço que é gerado sobre a sobrescrita de eventos
7) Criar um diretório chamado "Deploy"
8) Em seguida abrir o Terminal pelo próprio Visual Code
9) Em seguida aplicar as prerrogativas da máquina com o comando
. sudo su
10) Mover o arquivo "TS29520_Nnwdaf_AnalyticsInfo.yaml" para dentro deste diretório
11) Em seguida, executar o comando para fazer a leitura do código .YAML com o CLI que foi instalado anteriormente gera e faça a construção dos "scafolds" em código fonte.
. sudo openapi-generator-cli generate -i TS29520_Nnwdaf_AnalyticsInfo.yaml -g go --skip-validate-spec -o api/Nnwdaf_AnalyticsInfo/
OBSERVAÇÃO: Caso encontra a mensagem de erro: "openapi-generator-cli command not found" , execute o comando no Terminal dentro do diretório "/openapi_teste/deploy":
. openapi-generator-cli generate -i TS29520_Nnwdaf_AnalyticsInfo.yaml -g go --skip-validate-spec -o api/Nnwdaf_AnalyticsInfo/
12) O mecanismo do openapi fez todo mecanismo do arquivo .yaml e dentro do diretório "Deploy" esta criado com sucesso:
13) Dentro da pasta Deploy possui a pasta api
. Nesta pasta tem diversos arquivos .go
. Tudo isto com as devidas dependências, com a estrutura de conexão com as apis, com os endpoints determinados lá na especificações, todos esses arquivos .go e as subpastas dentro de api foram gerados e construído através daquele arquivo .yaml. Aqui já possui too o scafuld inicial necessário para começar a trabalhar e construir a implementação de AnalyticsInfo. Estão tudo estruturado para começar a implementar a api
- O ideal seria pegar a espeficição e fazer um de_para dessas especificações.
. Assim foi gerado o código GO a partir dos .YML que especificam a NWDAF, fazendo uso de um CLI para gerar código a partir de especificações do arquivo .YML
14) Agora implementar o núcleo free5gc, implementar esta ambiente de desenvolvimento em modo depuração com uma versão da NWDAF (que esta em construção) que coleta ANF.
15) Fazer um forke/baixar o free5gc do github.com o comando:
. git clone --recursive -b master -j `nproc` https://github.com/ciromacedo/free5gc.git
16) Em seguida abri o GoLand e apontar para a pasta do projeto "free5gc"
17) Deve instalar o SDK no Go Land
. Aguardar fazer o download e depoi clicar no botão OK, onde deve iniciar a instalação e configuração:
. Veja na imagem abaixo que foi instalado o SDK na ferramenta Go Land, e aguardar que seja finalizado a parte de configuração e indexação:
. A indexação foi finalizada com sucesso conforme mostra imagem abaixo e deva reiniciar a aplicação Go Land:
18) Para verificar a origem do repositório de cada micro serviço deve ser digitado o comando abaixo no Terminal do próprio Go Land.
Não esqueça de acessar o diretório do serviço, conforme mostra imagem abaixo: . Git remote get-url origin
19) Após a configuração do Go Land com free5gc para fazer o Debug dos serviços, deve-se levantar os seguintes serviços :
1. NRF 2. UDR 3. UDM 4. AUSF 5. NSSF 6. AMF 7. PCF 8. UPF (sudo -E ./bin/free5gc-upfd) 9. SMF 10. SERVER-WEB 11. SERVER-FRONT-END ( REACT_APP_HTTP_API_URL=http://core_ip_address:5000/api PORT=3000 yarn start )
20) Deve-ser fazer o debug do serviço NRF, executando o Debug clicando com o botão direito do mouse no arquivo "nrf.go". O serviço NRF é responsável para registrar os demais microserviços, no contexto 5G.
21) Se observamos a imagem abaixo, agora temos o microserviço da NRF respondendo no endereço [127.0.0.10:8000]. Este micro serviço é de rede
22) Na pasta "config" dentro do Projeto free5gc possui um arquivo de configuração para cada função/serviço de Rede. Observa-se na imagem abaixo que no arquivo nrfcfg.yaml, o MongoDB já esta configurado com o IP e porta:
23) Agora deve-se levantar os demais serviços: 2. UDR 3. UDM 4. AUSF 5. NSSF 6. AMF 7. PCF 8. UPF 9. SMF 10. SERVER-WEB 11. SERVER-FRONT-END
. O serviço de UDR faz a interface com o usuário
2. UDR
Indo ao Terminal, verifica-se que o serviço NRF já criou a estrutura de dados do free5gc, veja imagem abaixo:
. Comandos no MongoDB para verificar banco de dados e coleções e dados dos micros serviços já coletados:
- show databases
- show colletctions
- db.<nome_da_collection>.find().pretty() - Exemplo: db.NfProfile.find().pretty()
3. UDM
4. AUSF
5. NSSF
6. AMF
7. PCF
8. UPF
É uma função de rede que trata de dados do usuário (plano de dados do usuário). Para subir este serviço tem que acessar via terminal no diretorio do UPF, pois foi gerado em c e necessita instalar as bibliotecas para que possa ser compilada. O requisito mínimo é a versão do kernel acima de 5.04 e para verificar no Linux utilize o comando no terminal <b>"uname -r"</b>. Caso esteja abaixo desta versão deve ser feito uma atualização do kernel.
. Para verificar os requisitos e como instalar o serviço UPF acessar o github do free5gc - free5gc/upf at b68893439706676c4372d848981fcdbe0c69a41d (github.com)
a. Caso necessite atualizar o Kernel favor executar o comando abaixo:
- sudo apt-get install -y linux-image-5.0.0-23-generic
b. Para verificar os requisitos e como instalar o serviço UPF acessar o github do free5gc (free5gc/upf (github.com))
. https://github.com/free5gc/upf
c. Executar as linhas de comando abaixo
sudo apt-get -y update
sudo apt-get -y install git gcc g++ cmake go libmnl-dev autoconf libtool libyaml-dev go get github.com/sirupsen/logrus
d. No caso de erro da linha de comando "sudo apt-get -y install git gcc g++ cmake go libmnl-dev autoconf libtool libyaml-dev", deve instalar bibliotecas abaixo de forma separada para que possa ser compilado o serviço de UPF:
sudo apt-get -y install cmake
sudo apt-get -y install libmnl-dev
sudo apt-get -y install autoconf
sudo apt-get -y install libtool
sudo apt-get -y install libyaml-dev
e. Criar um túnel de conexão do gtp, executar os comandos abaixo no diretório "free5gc":
git clone -b https://github.com/free5gc/gtp5g.git
. Caso dê erro o comando acima, favor executar a linha abaixo:
git clone https://github.com/free5gc/gtp5g.git
cd gtp5g
git checkout -b v0.3.2
make
sudo make install
f. Fazer o Build, compilar o plano de usuário da UPF. Deve acessar o diretório "/free5gc/NFs/upf/":
mkdir build
cd build
cmake ..
make -j `nproc`
. Caso apresente o erro: "./configure: line 2950: syntax error near unexpected token LIBMNL", executar as linhas abaixo no diretorio "/Home"
1) sudo apt install -y build-essential automake pkg-config
2) git clone https://github.com/linux-test-project/ltp.git
3) cd ltp
4) make autotools
5) ./configure
Em seguida, executar novamente a linha de comando: make -j `nproc`
g. Configuração de rede, executando as linhas de comando abaixo:
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -t nat -A POSTROUTING -o {{ internet_network_interface }} -j MASQUERADE
. Para saber o nome da interface de rede {{ internet_network_interface }} , executar a linha de comando:
ifconfig
. Redirecionamento da interface de rede:
# sudo iptables -t nat -A POSTROUTING -o enps0s3 -j MASQUERADE (coloque o nome da sua interface de rede)
sudo iptables -A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1400
. Recomendado parar o firewall com a linha de comando:
sudo systemctl stop ufw
h. Colocar para executar a UPF, deve estar no diretório "/free5gc/NFs/upf/build" com a linha de comando:
sudo -E ./bin/free5gc-upfd
9. SMF
10. SERVER-WEB
. Acessar o diretório "free5gc"
cd webconsole
cd frontend
yarn install
yarn build
rm -rf ../public
cp -R build ../public
cd..
go build -o bin/webconsole server.go
. Será criado uma interface gráfica para fazer a gestão dos dispositivos.
11. SERVER-FRONT-END