【OpenAirInterface】分立部署核心网与容器化ueransim仿真基站并实现网络切片

本文详细介绍了如何在两台机器上使用OpenAirInterface部署和配置三个独立的核心网,每个核心网包括多个服务如AMF、SMF、UDM等,并通过修改Docker镜像标签创建不同版本的核心网实例。同时,文章提到了在启动过程中遇到的UPF-VPP健康检查问题以及多网卡网络配置策略,用于支持UE的连接。

1.简介

基于【OpenAirInterface】分立部署核心网与容器化ueransim仿真基站我们已经可以在两台分立的机器上部署单个核心网与一个容器化ueransim,现在我们尝试在一台机器上一个虚拟机中部署三个OAI核心网,另一台机器中部署三个容器化ueransim仿真基站分别接入三个OAI核心网。

1.1 任务说明

有两台机器,服务器A与主机B,A与B通过三根网线直连,在A上部署三个OAI基础核心网,在B上部署三个docker 版ueransim,实现三个ueransim的成功接入。

前置部署请看:【OpenAirInterface】分立部署核心网与容器化ueransim仿真基站

OAI——单虚拟机多basic核心网部署

1.2 部署前提

服务器A上在windows系统中安装了VM虚拟机,其上安装ubuntu18.04系统。下载部署成功了OAI核心网(版本v1.5.0)。

主机B上在windows系统中安装了VM虚拟机,其上安装ubuntu18.04系统。下载了OAI核心网(用于测试)与docker版 ueransim仿真基站,并测试可以成功接入。

2.多核心网部署

为满足一键开启与关闭一个核心网,不再像 OAI——单虚拟机多basic核心网部署中,将多个核心网的的启动写入一个yaml文件,编写多个yaml文件,每个yaml文件启动一个核心网,每个核心网之间互不干扰。

同时还需为每一套核心网网元创建独立的镜像,仿照之前的方法,使用更改标签的方法对原本的网元镜像复制。

2.1 多核心网镜像及yaml文件构建

进入docker-compose文件夹:

cd /oai-cn5g-fed/docker-compose

2.1.1 第一个核心网

第一个核心网使用的镜像就是官方下载的镜像

在这里插入图片描述

第一个yaml文件依照OAI提供的进行设置(就是原来的docker-compose-basic-vpp-nrf.yaml):

version: '3.8'
services:
    mysql:
        container_name: "mysql"
        image: mysql:8.0
        volumes:
            - ./database/oai_db2.sql:/docker-entrypoint-initdb.d/oai_db.sql
            - ./healthscripts/mysql-healthcheck2.sh:/tmp/mysql-healthcheck.sh
        environment:
            - TZ=Europe/Paris
            - MYSQL_DATABASE=oai_db
            - MYSQL_USER=test
            - MYSQL_PASSWORD=test
            - MYSQL_ROOT_PASSWORD=linux
        healthcheck:
            test: /bin/bash -c "/tmp/mysql-healthcheck.sh"
            interval: 10s
            timeout: 5s
            retries: 30
        networks:
            public_net:
                ipv4_address: 192.168.70.131
    oai-udr:
        container_name: "oai-udr"
        image: oaisoftwarealliance/oai-udr:develop
        environment:
            - TZ=Europe/Paris
            - UDR_NAME=OAI_UDR
            - UDR_INTERFACE_NAME_FOR_NUDR=eth0
            - MYSQL_IPV4_ADDRESS=192.168.70.131
            - MYSQL_USER=test
            - MYSQL_PASS=test
            - MYSQL_DB=oai_db
            - WAIT_MYSQL=120
            - USE_FQDN_DNS=yes
            - REGISTER_NRF=yes
            - NRF_IPV4_ADDRESS=192.168.70.130
            - NRF_FQDN=oai-nrf
        depends_on:
            - mysql
            - oai-nrf
        networks:
            public_net:
                ipv4_address: 192.168.70.136
    oai-udm:
        container_name: "oai-udm"
        image: oaisoftwarealliance/oai-udm:develop
        environment:
            - TZ=Europe/Paris
            - UDM_NAME=OAI_UDM
            - SBI_IF_NAME=eth0
            - REGISTER_NRF=yes
            - USE_FQDN_DNS=yes
            - UDR_IP_ADDRESS=192.168.70.136
            - UDR_FQDN=oai-udr
            - NRF_IPV4_ADDRESS=192.168.70.130
            - NRF_FQDN=oai-nrf
        depends_on:
            - oai-udr
        networks:
            public_net:
                ipv4_address: 192.168.70.137
    oai-ausf:
        container_name: "oai-ausf"
        image: oaisoftwarealliance/oai-ausf:develop
        environment:
            - TZ=Europe/Paris
            - AUSF_NAME=OAI_AUSF
            - SBI_IF_NAME=eth0
            - USE_FQDN_DNS=yes
            - REGISTER_NRF=yes
            - UDM_IP_ADDRESS=192.168.70.137
            - UDM_FQDN=oai-udm
            - NRF_IPV4_ADDRESS=192.168.70.130
            - NRF_FQDN=oai-nrf
        depends_on:
            - oai-udm
        networks:
            public_net:
                ipv4_address: 192.168.70.138
    oai-nrf:
        container_name: "oai-nrf"
        image: oaisoftwarealliance/oai-nrf:develop
        environment:
            - TZ=Europe/Paris
            - NRF_INTERFACE_NAME_FOR_SBI=eth0
        networks:
            public_net:
                ipv4_address: 192.168.70.130
    oai-amf:
        container_name: "oai-amf"
        image: oaisoftwarealliance/oai-amf:develop
        environment:
            - TZ=Europe/paris
            - MCC=208
            - MNC=95
            - REGION_ID=128
            - AMF_SET_ID=1
            - SERVED_GUAMI_MCC_0=208
            - SERVED_GUAMI_MNC_0=95
            - SERVED_GUAMI_REGION_ID_0=128
            - SERVED_GUAMI_AMF_SET_ID_0=1
            - SERVED_GUAMI_MCC_1=460
            - SERVED_GUAMI_MNC_1=11
            - SERVED_GUAMI_REGION_ID_1=10
            - SERVED_GUAMI_AMF_SET_ID_1=1
            - PLMN_SUPPORT_MCC=208
            - PLMN_SUPPORT_MNC=95
            - PLMN_SUPPORT_TAC=0xa000
            # Slice 0 (222, 123)
            - SST_0=222
            - SD_0=123
            # Slice 0 (128, 12)
            - SST_1=128
            - SD_1=12
            - AMF_INTERFACE_NAME_FOR_NGAP=eth0
            - AMF_INTERFACE_NAME_FOR_N11=eth0
            # One single SMF instance
            - SMF_INSTANCE_ID_0=1
            - SMF_FQDN_0=oai-smf
            - SMF_IPV4_ADDR_0=192.168.70.133
            - SELECTED_0=true
            - NF_REGISTRATION=yes
            - SMF_SELECTION=yes
            - USE_FQDN_DNS=yes
            - EXTERNAL_AUSF=yes
            - EXTERNAL_UDM=no
            - EXTERNAL_NSSF=no
            - NRF_IPV4_ADDRESS=192.168.70.130
            - NRF_FQDN=oai-nrf
            - AUSF_IPV4_ADDRESS=192.168.70.138
            - AUSF_FQDN=oai-ausf
            - UDM_IPV4_ADDRESS=192.168.70.137
            - UDM_FQDN=oai-udm
        depends_on:
            - mysql
            - vpp-upf
            - oai-ext-dn
            - oai-ausf
        networks:
            public_net:
                ipv4_address: 192.168.70.132
    oai-smf:
        container_name: "oai-smf"
        image: oaisoftwarealliance/oai-smf:develop
        environment:
            - TZ=Europe/Paris
            - SMF_INTERFACE_NAME_FOR_N4=eth0
            - SMF_INTERFACE_NAME_FOR_SBI=eth0
            - DEFAULT_DNS_IPV4_ADDRESS=172.21.3.100
            - DEFAULT_DNS_SEC_IPV4_ADDRESS=8.8.8.8
            - AMF_IPV4_ADDRESS=192.168.70.132
            - AMF_FQDN=oai-amf
            - UDM_IPV4_ADDRESS=192.168.70.137
            - UDM_FQDN=oai-udm
            - UPF_IPV4_ADDRESS=192.168.70.201
            - UPF_FQDN_0=vpp-upf.node.5gcn.mnc95.mcc208.3gppnetwork.org
            - NRF_IPV4_ADDRESS=192.168.70.130
            - NRF_FQDN=oai-nrf
            - DEFAULT_CSCF_IPV4_ADDRESS=127.0.0.1  # only needed when ims is being used
            - USE_LOCAL_SUBSCRIPTION_INFO=yes  #Set to yes if SMF uses local subscription information instead of from an UDM
            - REGISTER_NRF=yes
            - DISCOVER_UPF=yes
            - USE_FQDN_DNS=yes
            - ENABLE_USAGE_REPORTING=yes
            # Slice 0 (1, 0xFFFFFF)
            - DNN_NI0=oai
            - TYPE0=IPv4
            - DNN_RANGE0=12.1.1.151 - 12.1.1.253
            - NSSAI_SST0=1
            - SESSION_AMBR_UL0=200Mbps
            - SESSION_AMBR_DL0=400Mbps
            # Slice 1 (1, 1)
            - DNN_NI1=oai.ipv4
            - TYPE1=IPv4
            - DNN_RANGE1=12.1.1.51 - 12.1.1.150
            - NSSAI_SST1=1
            - NSSAI_SD1=1
            - SESSION_AMBR_UL1=100Mbps
            - SESSION_AMBR_DL1=200Mbps
            # Slice 2 (222, 123)
            - DNN_NI2=default
            - TYPE2=IPv4
            - DNN_RANGE2=12.1.1.2 - 12.1.1.50
            - NSSAI_SST2=222
            - NSSAI_SD2=123
            - SESSION_AMBR_UL2=50Mbps
            - SESSION_AMBR_DL2=100Mbps
            # Slice 3 for ims
            - DNN_NI3=ims
            - TYPE3=IPv4v6
            - DNN_RANGE3=14.1.1.2 - 14.1.1.253
        extra_hosts:
            - "vpp-upf.node.5gcn.mnc95.mcc208.3gppnetwork.org:192.168.70.201"
        depends_on:
            - oai-amf
        networks:
            public_net:
                ipv4_address: 192.168.70.133
    vpp-upf:
        privileged: true
        container_name: "vpp-upf"
        image: oaisoftwarealliance/oai-upf-vpp:develop
        environment:
            - IF_1_IP=192.168.70.201
            - IF_1_TYPE=N4
            - IF_2_IP=192.168.72.201
            - IF_2_TYPE=N3
            - IF_2_NWI=access.oai.org
            - IF_3_IP=192.168.73.201
            - IF_3_TYPE=N6
            - IF_3_IP_REMOTE=192.168.73.135 # EXT-DN IP Address
            - IF_3_NWI=internet.oai.org
            - NAME=VPP-UPF
            - MNC=95
            - MCC=208
            - REALM=3gppnetwork.org
            - VPP_MAIN_CORE=0
            - VPP_CORE_WORKER=1
#           - VPP_PLUGIN_PATH=/usr/lib64/vpp_plugins/                # RHEL7
            - VPP_PLUGIN_PATH=/usr/lib/x86_64-linux-gnu/vpp_plugins/ # Ubntu18.04
            - SNSSAI_SD=123
            - SNSSAI_SST=222
            - DNN=default
            - REGISTER_NRF=yes
            - NRF_IP_ADDR=192.168.70.130
            - NRF_PORT=80
            - HTTP_VERSION=1
        depends_on:
            - oai-nrf
        healthcheck:
            test: /bin/bash -c "pgrep vpp"
            interval: 10s
            timeout: 5s
            retries: 5
        networks:
            public_net:
                ipv4_address: 192.168.70.134
            public_net_access:
                ipv4_address: 192.168.72.134
            public_net_core:
                ipv4_address: 192.168.73.134
    oai-ext-dn:
        privileged: true
        init: true
        container_name: "oai-ext-dn"
        image: oaisoftwarealliance/trf-gen-cn5g:latest
        entrypoint: /bin/bash -c \
              "iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;"\
              "ip route add 12.1.1.0/24 via 192.168.73.201 dev eth0; ip route; sleep infinity"
        command: ["/bin/bash", "-c", "trap : SIGTERM SIGINT; sleep infinity & wait"]
        healthcheck:
            test: /bin/bash -c "iptables -L -t nat | grep MASQUERADE"
            interval: 10s
            timeout: 5s
            retries: 5
        networks:
            public_net_core:
                ipv4_address: 192.168.73.135
networks:
    public_net:
        driver: bridge
        name: demo-oai-public-net
        ipam:
            config:
                - subnet: 192.168.70.0/24
        driver_opts:
            com.docker.network.bridge.name: "demo-oai"
    public_net_access:
        name: oai-public-access
        ipam:
            config:
                - subnet: 192.168.72.0/24
        driver_opts:
            com.docker.network.bridge.name: "cn5g-access"
    public_net_core:
        name: oai-public-core
        ipam:
            config:
                - subnet: 192.168.73.0/24
        driver_opts:
            com.docker.network.bridge.name: "cn5g-core"

2.1.2 构建第二个核心网

构建第二套核心网所需的docekr 镜像 ,采用修改标签的方法,全部改为 1.5.1

sudo docker tag mysql:8.0 mysql:8.1
sudo docker tag oaisoftwarealliance/oai-amf:v1.5.0 oaisoftwarealliance/oai-amf:1.5.1
sudo docker tag oaisoftwarealliance/oai-smf:v1.5.0 oaisoftwarealliance/oai-smf:1.5.1
sudo docker tag oaisoftwarealliance/oai-ausf:v1.5.0 oaisoftwarealliance/oai-ausf:1.5.1
sudo docker tag oaisoftwarealliance/oai-udr:v1.5.0 oaisoftwarealliance/oai-udr:1.5.1
sudo docker tag oaisoftwarealliance/oai-udm:v1.5.0 oaisoftwarealliance/oai-udm:1.5.1
sudo docker tag oaisoftwarealliance/oai-nrf:v1.5.0 oaisoftwarealliance/oai-nrf:1.5.1
sudo docker tag oaisoftwarealliance/oai-nssf:v1.5.0 oaisoftwarealliance/oai-nssf:1.5.1
sudo docker tag oaisoftwarealliance/oai-nef:v1.5.0 oaisoftwarealliance/oai-nef:1.5.1
sudo docker tag oaisoftwarealliance/oai-pcf:v1.5.0 oaisoftwarealliance/oai-pcf:1.5.1
sudo docker tag oaisoftwarealliance/oai-upf-vpp:v1.5.0 oaisoftwarealliance/oai-upf-vpp:1.5.1
sudo docker tag oaisoftwarealliance/oai-spgwu-tiny:v1.5.0 oaisoftwarealliance/oai-spgwu-tiny:1.5.1
sudo docker tag oaisoftwarealliance/trf-gen-cn5g:latest oaisoftwarealliance/trf-gen-cn5g:1.5.1

在这里插入图片描述
创建完成可以进行查看

docker images

在这里插入图片描述
在这里插入图片描述

创建第二个yaml文件,其在官方提供的docker-compose-basic-vpp-nrf.yaml上进行修改,命名为docker-compose-basic-vpp-nrf1.yaml
其中创建了一套新的核心网,所有网元都是名字都多添加了一个1,使用的网络网段为192.168.10.xx

version: '3.8'
services:
    mysql1:
        container_name: "mysql1"
        image: mysql:8.1
        volumes:
            - ./database/oai_db2.sql:/docker-entrypoint-initdb.d/oai_db.sql
            - ./healthscripts/mysql-healthcheck2.sh:/tmp/mysql-healthcheck.sh
        environment:
            - TZ=Europe/Paris
            - MYSQL_DATABASE=oai_db
            - MYSQL_USER=test
            - MYSQL_PASSWORD=test
            - MYSQL_ROOT_PASSWORD=linux
        healthcheck:
            test: /bin/bash -c "/tmp/mysql-healthcheck.sh"
            interval: 10s
            timeout: 5s
            retries: 30
        networks:
            public_net1:
                ipv4_address: 192.168.10.131
    oai-udr1:
        container_name: "oai-udr1"
        image: oaisoftwarealliance/oai-udr:1.5.1
        environment:
            - TZ=Europe/Paris
            - UDR_NAME=OAI_UDR
            - UDR_INTERFACE_NAME_FOR_NUDR=eth0
            - MYSQL_IPV4_ADDRESS=192.168.10.131
            - MYSQL_USER=test
            - MYSQL_PASS=test
            - MYSQL_DB=oai_db
            - WAIT_MYSQL=120
            - USE_FQDN_DNS=yes
            - REGISTER_NRF=yes
            - NRF_IPV4_ADDRESS=192.168.10.130
            - NRF_FQDN=oai-nrf1
        depends_on:
            - mysql1
            - oai-nrf1
        networks:
            public_net1:
                ipv4_address: 192.168.10.136
    oai-udm1:
        container_name: "oai-udm1"
        image: oaisoftwarealliance/oai-udm:1.5.1
        environment:
            - TZ=Europe/Paris
            - UDM_NAME=OAI_UDM
            - SBI_IF_NAME=eth0
            - REGISTER_NRF=yes
            - USE_FQDN_DNS=yes
            - UDR_IP_ADDRESS=192.168.10.136
            - UDR_FQDN=oai-udr1
            - NRF_IPV4_ADDRESS=192.168.10.130
            - NRF_FQDN=oai-nrf1
        depends_on:
            - oai-udr1
        networks:
            public_net1:
                ipv4_address: 192.168.10.137
    oai-ausf1:
        container_name: "oai-ausf1"
        image: oaisoftwarealliance/oai-ausf:1.5.1
        environment:
            - TZ=Europe/Paris
            - AUSF_NAME=OAI_AUSF
            - SBI_IF_NAME=eth0
            - USE_FQDN_DNS=yes
            - REGISTER_NRF=yes
            - UDM_IP_ADDRESS=192.168.10.137
            - UDM_FQDN=oai-udm1
            - NRF_IPV4_ADDRESS=192.168.10.130
            - NRF_FQDN=oai-nrf1
        depends_on:
            - oai-udm1
        networks:
            public_net1:
                ipv4_address: 192.168.10.138
    oai-nrf1:
        container_name: "oai-nrf1"
        image: oaisoftwarealliance/oai-nrf:1.5.1
        environment:
            - TZ=Europe/Paris
            - NRF_INTERFACE_NAME_FOR_SBI=eth0
        networks:
            public_net1:
                ipv4_address: 192.168.10.130
    oai-amf1:
        container_name: "oai-amf1"
        image: oaisoftwarealliance/oai-amf:1.5.1
        environment:
            - TZ=Europe/paris
            - MCC=208
            - MNC=95
            - REGION_ID=128
            - AMF_SET_ID=1
            - SERVED_GUAMI_MCC_0=208
            - SERVED_GUAMI_MNC_0=95
            - SERVED_GUAMI_REGION_ID_0=128
            - SERVED_GUAMI_AMF_SET_ID_0=1
            - SERVED_GUAMI_MCC_1=460
            - SERVED_GUAMI_MNC_1=11
            - SERVED_GUAMI_REGION_ID_1=10
            - SERVED_GUAMI_AMF_SET_ID_1=1
            - PLMN_SUPPORT_MCC=208
            - PLMN_SUPPORT_MNC=95
            - PLMN_SUPPORT_TAC=0xa000
            # Slice 0 (222, 123)
            - SST_0=222
            - SD_0=123
            # Slice 0 (128, 12)
            - SST_1=128
            - SD_1=12
            - AMF_INTERFACE_NAME_FOR_NGAP=eth0
            - AMF_INTERFACE_NAME_FOR_N11=eth0
            # One single SMF instance
            - SMF_INSTANCE_ID_0=1
            - SMF_FQDN_0=oai-smf1
            - SMF_IPV4_ADDR_0=192.168.10.133
            - SELECTED_0=true
            - NF_REGISTRATION=yes
            - SMF_SELECTION=yes
            - USE_FQDN_DNS=yes
            - EXTERNAL_AUSF=yes
            - EXTERNAL_UDM=no
            - EXTERNAL_NSSF=no
            - NRF_IPV4_ADDRESS=192.168.10.130
            - NRF_FQDN=oai-nrf1
            - AUSF_IPV4_ADDRESS=192.168.10.138
            - AUSF_FQDN=oai-ausf1
            - UDM_IPV4_ADDRESS=192.168.10.137
            - UDM_FQDN=oai-udm1
            - INT_ALGO_LIST=[ "NIA1" , "NIA2"]
            - CIPH_ALGO_LIST=[ "NEA1" , "NEA2"]
        depends_on:
            - mysql1
            - vpp-upf1
            - oai-ext-dn1
            - oai-ausf1
        networks:
            public_net1:
                ipv4_address: 192.168.10.132


    oai-smf1:
        container_name: "oai-smf1"
        image: oaisoftwarealliance/oai-smf:1.5.1
        environment:
            - TZ=Europe/Paris
            - SMF_INTERFACE_NAME_FOR_N4=eth0
            - SMF_INTERFACE_NAME_FOR_SBI=eth0
            - DEFAULT_DNS_IPV4_ADDRESS=172.21.3.100
            - DEFAULT_DNS_SEC_IPV4_ADDRESS=8.8.8.8
            - AMF_IPV4_ADDRESS=192.168.10.132
            - AMF_FQDN=oai-amf1
            - UDM_IPV4_ADDRESS=192.168.10.137
            - UDM_FQDN=oai-udm1
            - UPF_IPV4_ADDRESS=192.168.10.201
            - UPF_FQDN_0=vpp-upf.node.5gcn.mnc95.mcc208.3gppnetwork.org
            - NRF_IPV4_ADDRESS=192.168.10.130
            - NRF_FQDN=oai-nrf1
            - DEFAULT_CSCF_IPV4_ADDRESS=127.0.0.1  # only needed when ims is being used
            - USE_LOCAL_SUBSCRIPTION_INFO=yes  #Set to yes if SMF uses local subscription information instead of from an UDM
            - REGISTER_NRF=yes
            - DISCOVER_UPF=yes
            - USE_FQDN_DNS=yes
            - USE_NETWORK_INSTANCE=yes
            - ENABLE_USAGE_REPORTING=yes
            # Slice 0 (1, 0xFFFFFF)
            - DNN_NI0=oai
            - TYPE0=IPv4
            - DNN_RANGE0=12.1.1.151 - 12.1.1.253
            - NSSAI_SST0=1
            - SESSION_AMBR_UL0=200Mbps
            - SESSION_AMBR_DL0=400Mbps
            # Slice 1 (1, 1)
            - DNN_NI1=oai.ipv4
            - TYPE1=IPv4
            - DNN_RANGE1=12.1.1.51 - 12.1.1.150
            - NSSAI_SST1=1
            - NSSAI_SD1=1
            - SESSION_AMBR_UL1=100Mbps
            - SESSION_AMBR_DL1=200Mbps
            # Slice 2 (222, 123)
            - DNN_NI2=default
            - TYPE2=IPv4
            - DNN_RANGE2=12.1.1.2 - 12.1.1.50
            - NSSAI_SST2=222
            - NSSAI_SD2=123
            - SESSION_AMBR_UL2=50Mbps
            - SESSION_AMBR_DL2=100Mbps
            # Slice 3 for ims
            - DNN_NI3=ims
            - TYPE3=IPv4v6
            - DNN_RANGE3=14.1.1.2 - 14.1.1.253
        extra_hosts:
            - "vpp-upf.node.5gcn.mnc95.mcc208.3gppnetwork.org:192.168.60.201"
        depends_on:
            - oai-amf1
        networks:
            public_net1:
                ipv4_address: 192.168.10.133
    vpp-upf1:
        privileged: true
        container_name: "vpp-upf1"
        image: oaisoftwarealliance/oai-upf-vpp:1.5.1
        environment:
            - IF_1_IP=192.168.10.201
            - IF_1_TYPE=N4
            - IF_2_IP=192.168.12.201
            - IF_2_TYPE=N3
            - IF_2_NWI=access.oai.org
            - IF_3_IP=192.168.13.201
            - IF_3_TYPE=N6
            - IF_3_IP_REMOTE=192.168.13.135 # EXT-DN IP Address
            - IF_3_NWI=internet.oai.org
            - NAME=VPP-UPF
            - MNC=95
            - MCC=208
            - REALM=3gppnetwork.org
            - VPP_MAIN_CORE=0
            - VPP_CORE_WORKER=1
#           - VPP_PLUGIN_PATH=/usr/lib64/vpp_plugins/                # RHEL7
            - VPP_PLUGIN_PATH=/usr/lib/x86_64-linux-gnu/vpp_plugins/ # Ubntu18.04
            - SNSSAI_SD=123
            - SNSSAI_SST=222
            - DNN=default
            - REGISTER_NRF=yes
            - NRF_IP_ADDR=192.168.10.130
            - NRF_PORT=80
            - HTTP_VERSION=1
        depends_on:
            - oai-nrf1
        healthcheck:
            test: /bin/bash -c "pgrep vpp"
            interval: 10s
            timeout: 5s
            retries: 5
        networks:
            public_net1:
                ipv4_address: 192.168.10.134
            public_net_access1:
                ipv4_address: 192.168.12.134
            public_net_core1:
                ipv4_address: 192.168.13.134
    oai-ext-dn1:
        privileged: true
        init: true
        container_name: "oai-ext-dn1"
        image: oaisoftwarealliance/trf-gen-cn5g:1.5.1
        entrypoint: /bin/bash -c \
              "iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;"\
              "ip route add 12.1.1.0/24 via 192.168.13.201 dev eth0; ip route; sleep infinity"
        command: ["/bin/bash", "-c", "trap : SIGTERM SIGINT; sleep infinity & wait"]
        healthcheck:
            test: /bin/bash -c "iptables -L -t nat | grep MASQUERADE"
            interval: 10s
            timeout: 5s
            retries: 5
        networks:
            public_net_core1:
                ipv4_address: 192.168.13.135

networks:
    public_net1:
        driver: bridge
        name: demo-oai-public-net1
        ipam:
            config:
                - subnet: 192.168.10.0/24
        driver_opts:
            com.docker.network.bridge.name: "demo-oai1"

    public_net_access1:
        name: oai-public-access1
        ipam:
            config:
                - subnet: 192.168.12.0/24
        driver_opts:
            com.docker.network.bridge.name: "cn5g-access1"
    public_net_core1:
        name: oai-public-core1
        ipam:
            config:
                - subnet: 192.168.13.0/24
        driver_opts:
            com.docker.network.bridge.name: "cn5g-core1"


2.1.3 构建第三个核心网

构建第三套核心网所需的docekr 镜像 ,采用修改标签的方法,全部改为 1.5.3

sudo docker tag mysql:8.0 mysql:8.3
sudo docker tag oaisoftwarealliance/oai-amf:v1.5.0 oaisoftwarealliance/oai-amf:1.5.3
sudo docker tag oaisoftwarealliance/oai-smf:v1.5.0 oaisoftwarealliance/oai-smf:1.5.3
sudo docker tag oaisoftwarealliance/oai-ausf:v1.5.0 oaisoftwarealliance/oai-ausf:1.5.3
sudo docker tag oaisoftwarealliance/oai-udr:v1.5.0 oaisoftwarealliance/oai-udr:1.5.3
sudo docker tag oaisoftwarealliance/oai-udm:v1.5.0 oaisoftwarealliance/oai-udm:1.5.3
sudo docker tag oaisoftwarealliance/oai-nrf:v1.5.0 oaisoftwarealliance/oai-nrf:1.5.3
sudo docker tag oaisoftwarealliance/oai-nssf:v1.5.0 oaisoftwarealliance/oai-nssf:1.5.3
sudo docker tag oaisoftwarealliance/oai-nef:v1.5.0 oaisoftwarealliance/oai-nef:1.5.3
sudo docker tag oaisoftwarealliance/oai-pcf:v1.5.0 oaisoftwarealliance/oai-pcf:1.5.3
sudo docker tag oaisoftwarealliance/oai-upf-vpp:v1.5.0 oaisoftwarealliance/oai-upf-vpp:1.5.3
sudo docker tag oaisoftwarealliance/oai-spgwu-tiny:v1.5.0 oaisoftwarealliance/oai-spgwu-tiny:1.5.3
sudo docker tag oaisoftwarealliance/trf-gen-cn5g:latest oaisoftwarealliance/trf-gen-cn5g:1.5.3

在这里插入图片描述
创建完成可以进行查看,可以看见已经创建了三套核心网镜像

docker images

在这里插入图片描述
在这里插入图片描述

创建第三个yaml文件,其在官方提供的docker-compose-basic-vpp-nrf.yaml上进行修改,命名为docker-compose-basic-vpp-nrf3.yaml
其中创建了一套新的核心网,所有网元都是名字都多添加了一个1,使用的网络网段为192.168.30.xx

version: '3.8'
services:
    mysql3:
        container_name: "mysql3"
        image: mysql:8.3
        volumes:
            - ./database/oai_db2.sql:/docker-entrypoint-initdb.d/oai_db.sql
            - ./healthscripts/mysql-healthcheck2.sh:/tmp/mysql-healthcheck.sh
        environment:
            - TZ=Europe/Paris
            - MYSQL_DATABASE=oai_db
            - MYSQL_USER=test
            - MYSQL_PASSWORD=test
            - MYSQL_ROOT_PASSWORD=linux
        healthcheck:
            test: /bin/bash -c "/tmp/mysql-healthcheck.sh"
            interval: 10s
            timeout: 5s
            retries: 30
        networks:
            public_net3:
                ipv4_address: 192.168.30.131
    oai-udr3:
        container_name: "oai-udr3"
        image: oaisoftwarealliance/oai-udr:1.5.3
        environment:
            - TZ=Europe/Paris
            - UDR_NAME=OAI_UDR
            - UDR_INTERFACE_NAME_FOR_NUDR=eth0
            - MYSQL_IPV4_ADDRESS=192.168.30.131
            - MYSQL_USER=test
            - MYSQL_PASS=test
            - MYSQL_DB=oai_db
            - WAIT_MYSQL=120
            - USE_FQDN_DNS=yes
            - REGISTER_NRF=yes
            - NRF_IPV4_ADDRESS=192.168.30.130
            - NRF_FQDN=oai-nrf3
        depends_on:
            - mysql3
            - oai-nrf3
        networks:
            public_net3:
                ipv4_address: 192.168.30.136
    oai-udm3:
        container_name: "oai-udm3"
        image: oaisoftwarealliance/oai-udm:1.5.3
        environment:
            - TZ=Europe/Paris
            - UDM_NAME=OAI_UDM
            - SBI_IF_NAME=eth0
            - REGISTER_NRF=yes
            - USE_FQDN_DNS=yes
            - UDR_IP_ADDRESS=192.168.30.136
            - UDR_FQDN=oai-udr3
            - NRF_IPV4_ADDRESS=192.168.30.130
            - NRF_FQDN=oai-nrf3
        depends_on:
            - oai-udr3
        networks:
            public_net3:
                ipv4_address: 192.168.30.137
    oai-ausf3:
        container_name: "oai-ausf3"
        image: oaisoftwarealliance/oai-ausf:1.5.3
        environment:
            - TZ=Europe/Paris
            - AUSF_NAME=OAI_AUSF
            - SBI_IF_NAME=eth0
            - USE_FQDN_DNS=yes
            - REGISTER_NRF=yes
            - UDM_IP_ADDRESS=192.168.30.137
            - UDM_FQDN=oai-udm3
            - NRF_IPV4_ADDRESS=192.168.30.130
            - NRF_FQDN=oai-nrf3
        depends_on:
            - oai-udm3
        networks:
            public_net3:
                ipv4_address: 192.168.30.138
    oai-nrf3:
        container_name: "oai-nrf3"
        image: oaisoftwarealliance/oai-nrf:1.5.3
        environment:
            - TZ=Europe/Paris
            - NRF_INTERFACE_NAME_FOR_SBI=eth0
        networks:
            public_net3:
                ipv4_address: 192.168.30.130
    oai-amf3:
        container_name: "oai-amf3"
        image: oaisoftwarealliance/oai-amf:1.5.3
        environment:
            - TZ=Europe/paris
            - MCC=208
            - MNC=95
            - REGION_ID=128
            - AMF_SET_ID=1
            - SERVED_GUAMI_MCC_0=208
            - SERVED_GUAMI_MNC_0=95
            - SERVED_GUAMI_REGION_ID_0=128
            - SERVED_GUAMI_AMF_SET_ID_0=1
            - SERVED_GUAMI_MCC_1=460
            - SERVED_GUAMI_MNC_1=11
            - SERVED_GUAMI_REGION_ID_1=10
            - SERVED_GUAMI_AMF_SET_ID_1=1
            - PLMN_SUPPORT_MCC=208
            - PLMN_SUPPORT_MNC=95
            - PLMN_SUPPORT_TAC=0xa000
            # Slice 0 (222, 123)
            - SST_0=222
            - SD_0=123
            # Slice 0 (128, 12)
            - SST_1=128
            - SD_1=12
            - AMF_INTERFACE_NAME_FOR_NGAP=eth0
            - AMF_INTERFACE_NAME_FOR_N11=eth0
            # One single SMF instance
            - SMF_INSTANCE_ID_0=1
            - SMF_FQDN_0=oai-smf3
            - SMF_IPV4_ADDR_0=192.168.30.133
            - SELECTED_0=true
            - NF_REGISTRATION=yes
            - SMF_SELECTION=yes
            - USE_FQDN_DNS=yes
            - EXTERNAL_AUSF=yes
            - EXTERNAL_UDM=no
            - EXTERNAL_NSSF=no
            - NRF_IPV4_ADDRESS=192.168.30.130
            - NRF_FQDN=oai-nrf3
            - AUSF_IPV4_ADDRESS=192.168.30.138
            - AUSF_FQDN=oai-ausf3
            - UDM_IPV4_ADDRESS=192.168.30.137
            - UDM_FQDN=oai-udm3
            - INT_ALGO_LIST=[ "NIA1" , "NIA2"]
            - CIPH_ALGO_LIST=[ "NEA1" , "NEA2"]
        depends_on:
            - mysql3
            - vpp-upf3
            - oai-ext-dn3
            - oai-ausf3
        networks:
            public_net3:
                ipv4_address: 192.168.30.132


    oai-smf3:
        container_name: "oai-smf3"
        image: oaisoftwarealliance/oai-smf:1.5.3
        environment:
            - TZ=Europe/Paris
            - SMF_INTERFACE_NAME_FOR_N4=eth0
            - SMF_INTERFACE_NAME_FOR_SBI=eth0
            - DEFAULT_DNS_IPV4_ADDRESS=172.21.3.100
            - DEFAULT_DNS_SEC_IPV4_ADDRESS=8.8.8.8
            - AMF_IPV4_ADDRESS=192.168.30.132
            - AMF_FQDN=oai-amf3
            - UDM_IPV4_ADDRESS=192.168.30.137
            - UDM_FQDN=oai-udm3
            - UPF_IPV4_ADDRESS=192.168.30.201
            - UPF_FQDN_0=vpp-upf.node.5gcn.mnc95.mcc208.3gppnetwork.org
            - NRF_IPV4_ADDRESS=192.168.30.130
            - NRF_FQDN=oai-nrf3
            - DEFAULT_CSCF_IPV4_ADDRESS=127.0.0.1  # only needed when ims is being used
            - USE_LOCAL_SUBSCRIPTION_INFO=yes  #Set to yes if SMF uses local subscription information instead of from an UDM
            - REGISTER_NRF=yes
            - DISCOVER_UPF=yes
            - USE_FQDN_DNS=yes
            - USE_NETWORK_INSTANCE=yes
            - ENABLE_USAGE_REPORTING=yes
            # Slice 0 (1, 0xFFFFFF)
            - DNN_NI0=oai
            - TYPE0=IPv4
            - DNN_RANGE0=12.1.1.151 - 12.1.1.253
            - NSSAI_SST0=1
            - SESSION_AMBR_UL0=200Mbps
            - SESSION_AMBR_DL0=400Mbps
            # Slice 1 (1, 1)
            - DNN_NI1=oai.ipv4
            - TYPE1=IPv4
            - DNN_RANGE1=12.1.1.51 - 12.1.1.150
            - NSSAI_SST1=1
            - NSSAI_SD1=1
            - SESSION_AMBR_UL1=100Mbps
            - SESSION_AMBR_DL1=200Mbps
            # Slice 2 (222, 123)
            - DNN_NI2=default
            - TYPE2=IPv4
            - DNN_RANGE2=12.1.1.2 - 12.1.1.50
            - NSSAI_SST2=222
            - NSSAI_SD2=123
            - SESSION_AMBR_UL2=50Mbps
            - SESSION_AMBR_DL2=100Mbps
            # Slice 3 for ims
            - DNN_NI3=ims
            - TYPE3=IPv4v6
            - DNN_RANGE3=14.1.1.2 - 14.1.1.253
        extra_hosts:
            - "vpp-upf.node.5gcn.mnc95.mcc208.3gppnetwork.org:192.168.30.201"
        depends_on:
            - oai-amf3
        networks:
            public_net3:
                ipv4_address: 192.168.30.133
    vpp-upf3:
        privileged: true
        container_name: "vpp-upf3"
        image: oaisoftwarealliance/oai-upf-vpp:1.5.3
        environment:
            - IF_1_IP=192.168.30.201
            - IF_1_TYPE=N4
            - IF_2_IP=192.168.32.201
            - IF_2_TYPE=N3
            - IF_2_NWI=access.oai.org
            - IF_3_IP=192.168.33.201
            - IF_3_TYPE=N6
            - IF_3_IP_REMOTE=192.168.33.135 # EXT-DN IP Address
            - IF_3_NWI=internet.oai.org
            - NAME=VPP-UPF
            - MNC=95
            - MCC=208
            - REALM=3gppnetwork.org
            - VPP_MAIN_CORE=0
            - VPP_CORE_WORKER=1
#           - VPP_PLUGIN_PATH=/usr/lib64/vpp_plugins/                # RHEL7
            - VPP_PLUGIN_PATH=/usr/lib/x86_64-linux-gnu/vpp_plugins/ # Ubntu18.04
            - SNSSAI_SD=123
            - SNSSAI_SST=222
            - DNN=default
            - REGISTER_NRF=yes
            - NRF_IP_ADDR=192.168.30.130
            - NRF_PORT=80
            - HTTP_VERSION=1
        depends_on:
            - oai-nrf3
        healthcheck:
            test: /bin/bash -c "pgrep vpp"
            interval: 10s
            timeout: 5s
            retries: 5
        networks:
            public_net3:
                ipv4_address: 192.168.30.134
            public_net_access3:
                ipv4_address: 192.168.32.134
            public_net_core3:
                ipv4_address: 192.168.33.134
    oai-ext-dn3:
        privileged: true
        init: true
        container_name: "oai-ext-dn3"
        image: oaisoftwarealliance/trf-gen-cn5g:1.5.3
        entrypoint: /bin/bash -c \
              "iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;"\
              "ip route add 12.1.1.0/24 via 192.168.33.201 dev eth0; ip route; sleep infinity"
        command: ["/bin/bash", "-c", "trap : SIGTERM SIGINT; sleep infinity & wait"]
        healthcheck:
            test: /bin/bash -c "iptables -L -t nat | grep MASQUERADE"
            interval: 10s
            timeout: 5s
            retries: 5
        networks:
            public_net_core3:
                ipv4_address: 192.168.33.135

networks:
    public_net3:
        driver: bridge
        name: demo-oai-public-net3
        ipam:
            config:
                - subnet: 192.168.30.0/24
        driver_opts:
            com.docker.network.bridge.name: "demo-oai3"

    public_net_access3:
        name: oai-public-access3
        ipam:
            config:
                - subnet: 192.168.32.0/24
        driver_opts:
            com.docker.network.bridge.name: "cn5g-access3"
    public_net_core3:
        name: oai-public-core3
        ipam:
            config:
                - subnet: 192.168.33.0/24
        driver_opts:
            com.docker.network.bridge.name: "cn5g-core3"


如下已创建好三个yaml文件
在这里插入图片描述

2.2多核心网启动

2.2.1启动测试第一个核心网:

lab@lab-virtual-machine:~/oai-cn5g-fed/docker-compose$ docker-compose -f docker-compose-basic-vpp-nrf.yaml up -d

注:不加最后的后缀 -d 使容器不为守护进程,可以直接进入容器内部观察内部的消息,判断核心哇是否正常运转
在这里插入图片描述
查看容器状态

docker ps

注:其中oai-ext-dn不健康不影响核心网运行,该网元用于进行一些数据交互测试
在这里插入图片描述

2.2.2启动测试第二个核心网:

lab@lab-virtual-machine:~/oai-cn5g-fed/docker-compose$ docker-compose -f docker-compose-basic-vpp-nrf1.yaml up -d

在这里插入图片描述

2.2.3启动测试第三个核心网:

lab@lab-virtual-machine:~/oai-cn5g-fed/docker-compose$ docker-compose -f docker-compose-basic-vpp-nrf3.yaml up -d

查看容器状态,看各网元是否健康

docker ps

在这里插入图片描述

2.2.4同时启动三个核心网

经过上面的测试,每一个核心网都可以单独正常启动,且各自使用了不同的镜像、网络、容器,现在测试三个核心网同时启动:

lab@lab-virtual-machine:~/oai-cn5g-fed/docker-compose$ docker-compose -f docker-compose-basic-vpp-nrf.yaml up -d

lab@lab-virtual-machine:~/oai-cn5g-fed/docker-compose$ docker-compose -f docker-compose-basic-vpp-nrf1.yaml up -d

lab@lab-virtual-machine:~/oai-cn5g-fed/docker-compose$ docker-compose -f docker-compose-basic-vpp-nrf3.yaml up -d

查看容器健康状态,发现多了一个vpp-upf是不健康的:
在这里插入图片描述
在这里插入图片描述

2.3 upf-vpp不健康解决

同时启动核心网1和核心网3,发现并未出现不健康。
在这里插入图片描述
在这里插入图片描述
再启动原始核心网,发现出现了不健康。
同时启动原始核心网与核心网3发现正常。

鉴于UPF可能用不上,所以暂且搁置

3.多ueransm容器部署

3.1两机器网络配置

不同于之前只使用一个网线,现在使用三个网线,服务器A的三个网口,主机B的三个网口,需要在虚拟机上配置三个网络,使用三个不同的网段,对应于三个不同的核心网,同时使用三个路由转发。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

月早十

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值