5G 核心网静态 UE IP 地址分配及配置

目录

1. 必备条件

2. 配置OAI-5G核心网功能

3. 基于python脚本部署基础核心网

4. 部署仿真基站

5. 数据流测试

6. 日志收集

7. 取消部署

7.1 取消部署仿真基站

7.2 取消部署核心网

8. 注意事项


本教程介绍如何配置OAI 5GC,根据终端订阅数据提供静态终端ip地址。在SMF配置中,有一个参数强制SMF使用本地订阅信息。例如使用配置文件中定义的DNN参数(名称、类型和ip-address范围)。但是所有这些信息都可以移动到mysql数据库,SMF可以通过与UDM <——> UDR <——> mysql通信来获取它。USE_LOCAL_SUBSCRIPTION_INFO
在本教程中,您将学习如何更改此参数并为特定的UE-IMSI配置ip地址。私有5G网络需要这种静态ip地址分配。

要遵循本教程,用户应该知道如何部署基本OAI-5GC网络。
本教程使用的RAN模拟器是gNBSIM
阅读器还可以用真正的RAN替换RAN模拟器。

请按照本教程一步一步创建一个稳定工作的试验台。

注意:

  • 文档中提到的命令假设您当前的工作目录为。请确保在复制粘贴命令或编写教程命令的终端中使用 ./docker-compose pwd ./docker-compose
  • 用你最喜欢的编辑器或在gitlab上在线打开这个markdown文件,并单独打开一个终端
  • 在阅读本教程之前,先阅读这篇教程

1. 必备条件

       阅读关于如何部署基本OAI-5G核心网络的教程,您可以选择使用或不使用NRF进行部署。在本教程中,我们将选择nrf场景。
       创建一个文件夹,您可以在其中存储本教程的所有结果文件,然后将它们与我们提供的结果文件进行比较,我们建议创建完全相同的文件夹,以免随后破坏命令流。

docker-compose-host $: mkdir -p /tmp/oai/static-ue-ip
docker-compose-host $: chmod 777 /tmp/oai/static-ue-ip

2. 配置OAI-5G核心网功能

        编辑正确的Basic OAI 5G核心网docker-compose文件,在docker-compose文件的smf服务配置中将USE_LOCAL_SUBSCRIPTION_INFO参数设置为no

  • 如果使用包含nrf的docker-compose文件
docker-compose-host $: sed -i 's/USE_LOCAL_SUBSCRIPTION_INFO=yes/USE_LOCAL_SUBSCRIPTION_INFO=no/g' docker-compose-basic-nrf.yaml
docker-compose-host $: sed -i 's/SMF_SELECTION=yes/SMF_SELECTION=no/g' docker-compose-basic-nrf.yaml
  •  使用不包含nrf的docker-compose文件 
docker-compose-host $: sed -i 's/USE_LOCAL_SUBSCRIPTION_INFO=yes/USE_LOCAL_SUBSCRIPTION_INFO=no/g' docker-compose-basic-nonrf.yaml

然后使用IMSI和DNN信息映射配置用户订阅数据库sql文件。在表中添加下面的全部信息SessionManagementSubscriptionData

  • 静态UE ip
INSERT INTO `SessionManagementSubscriptionData` (`ueid`, `servingPlmnid`, `singleNssai`, `dnnConfigurations`) VALUES
('208950000000031', '20895', '{\"sst\": 222, \"sd\": \"123\"}','{\"default\":{\"pduSessionTypes\":{ \"defaultSessionType\": \"IPV4\"},\"sscModes\": {\"defaultSscMode\": \"SSC_MODE_1\"},\"5gQosProfile\": {\"5qi\": 6,\"arp\":{\"priorityLevel\": 1,\"preemptCap\": \"NOT_PREEMPT\",\"preemptVuln\":\"NOT_PREEMPTABLE\"},\"priorityLevel\":1},\"sessionAmbr\":{\"uplink\":\"100Mbps\", \"downlink\":\"100Mbps\"},\"staticIpAddress\":[{\"ipv4Addr\": \"12.1.1.4\"}]}}');
  • 动态 UE ip
INSERT INTO `SessionManagementSubscriptionData` (`ueid`, `servingPlmnid`, `singleNssai`, `dnnConfigurations`) VALUES
('208950000000032', '20895', '{\"sst\": 222, \"sd\": \"123\"}','{\"default\":{\"pduSessionTypes\":{ \"defaultSessionType\": \"IPV4\"},\"sscModes\": {\"defaultSscMode\": \"SSC_MODE_1\"},\"5gQosProfile\": {\"5qi\": 6,\"arp\":{\"priorityLevel\": 1,\"preemptCap\": \"NOT_PREEMPT\",\"preemptVuln\":\"NOT_PREEMPTABLE\"},\"priorityLevel\":1},\"sessionAmbr\":{\"uplink\":\"100Mbps\", \"downlink\":\"100Mbps\"}}}');

确保对所有终端执行此操作,如果AuthenticationSubscription表中存在用户信息,那么该终端在SessionManagementSubscriptionData表中也应该有一个条目(一一对应)。目前,这两个条目存在于数据库文件中

3. 基于python脚本部署基础核心网

        在之前的教程中,我们解释了如何使用python部署器部署核心网络。这里我们将只提供部署核心网络所需的快速命令,要学习如何使用python部署器,请遵循此页。启动核心网络组件,检查使用nrf或不使用nrf的场景

        作为新手,我们建议第一次运行时不使用任何PCAP捕获。出于CI目的,我们在docker网络上部署了一个自动化的PCAP捕获。
        请记住: 如果您计划长时间运行CN5G部署,PCAP文件可能会变得很大!

  • 有nrf
docker-compose-host $: python3 core-network.py --type start-basic --scenario 1
  • 无nrf
docker-compose-host $: python3 core-network.py --type start-basic --scenario 2

 

4. 部署仿真基站

  • 场景执行:
    • 在ran仿真器主机上实例化您选择的ran仿真器,这里我们将使用gnbsim演示它。我们在一个主机上运行所有东西,因此ran- simulator -host和docker-compose-host暂时是一样的。
docker-compose-host $: docker-compose -f docker-compose-gnbsim.yaml up -d gnbsim
Found orphan containers (oai-ext-dn, oai-smf, oai-udr, oai-amf, oai-nrf, oai-udm, oai-spgwu, mysql, oai-ausf) for this project.
Creating gnbsim ... done

        ​​(可选)如果需要,您还可以运行另一个 gnbsim 实例来检查动态 IP 地址分配是否正常工作

docker-compose-host $: docker-compose -f docker-compose-gnbsim.yaml up -d gnbsim2

我们可以看一下正在运行的容器

root@lab-virtual-machine:/home/lab/oai-cn5g-fed/docker-compose# docker ps -a
CONTAINER ID   IMAGE                                       COMMAND                  CREATED          STATUS                            PORTS                          NAMES
72234bff2558   gnbsim:latest                               "/gnbsim/bin/entrypo…"   5 seconds ago    Up 4 seconds (health: starting)                                  gnbsim3
c1800ed3cd51   gnbsim:latest                               "/gnbsim/bin/entrypo…"   7 minutes ago    Up 7 minutes (healthy)                                           gnbsim2
23aacf3deadb   gnbsim:latest                               "/gnbsim/bin/entrypo…"   8 minutes ago    Up 8 minutes (healthy)                                           gnbsim
44a8d47f03f3   oaisoftwarealliance/oai-spgwu-tiny:v1.5.0   "python3 /openair-sp…"   13 minutes ago   Up 13 minutes (healthy)           2152/udp, 8805/udp             oai-spgwu
a722bbf0fcef   oaisoftwarealliance/oai-smf:v1.5.0          "python3 /openair-sm…"   13 minutes ago   Up 13 minutes (healthy)           80/tcp, 8080/tcp, 8805/udp     oai-smf
a9363ec899b5   oaisoftwarealliance/oai-amf:v1.5.0          "python3 /openair-am…"   13 minutes ago   Up 13 minutes (healthy)           80/tcp, 9090/tcp, 38412/sctp   oai-amf
f506553d63f2   oaisoftwarealliance/oai-ausf:v1.5.0         "python3 /openair-au…"   13 minutes ago   Up 13 minutes (healthy)           80/tcp                         oai-ausf
a3aad13f29da   oaisoftwarealliance/oai-udm:v1.5.0          "python3 /openair-ud…"   13 minutes ago   Up 13 minutes (healthy)           80/tcp                         oai-udm
a49465707de5   oaisoftwarealliance/oai-udr:v1.5.0          "python3 /openair-ud…"   13 minutes ago   Up 13 minutes (healthy)           80/tcp                         oai-udr
2d00eae8548b   oaisoftwarealliance/oai-nrf:v1.5.0          "python3 /openair-nr…"   13 minutes ago   Up 13 minutes (healthy)           80/tcp, 9090/tcp               oai-nrf
0ff03e2005b3   oaisoftwarealliance/trf-gen-cn5g:latest     "/bin/bash -c ' ip r…"   13 minutes ago   Up 13 minutes (healthy)                                          oai-ext-dn
8a4c948eab6b   mysql:8.0                                   "docker-entrypoint.s…"   13 minutes ago   Up 13 minutes (healthy)           3306/tcp, 33060/tcp            mysql

可以发现我们运行了三个gnbsim容器 

  • 如果您想在另一台主机上运行ran-emulator,那么请确保两台机器能够正常通信,并且能够从主机ping到docker-compose-host 192.168.70.128的网桥

        验证PDN会话建立: 为了检查PDN会话是否正确建立,有一个额外的外部数据网络容器仅用于演示目的。使用此容器可以到达已运行的仿真器UE,以验证PDN会话的建立。要了解数据包流,请阅读下一个分析部分。为第一个gnbsim分配的UE ip地址应该是12.1.1.4,因为我们在前面的步骤中修复了它,对于另一个gnbsim实例,您需要检查。

  • gnbsim
#当我们要查看一个docker 容器的日志时,可以直接 docker logs 容器名字或者 ID
#如果需要找其中包含某些内容(如 xxx)的所有行,可以docker logs 容器名字或者 ID 2>&1 | grep xxx
docker-compose-host $: docker logs gnbsim 2>&1 | grep "UE address:"
[gnbsim]2022/02/08 14:50:40.584271 example.go:329: UE address: 12.1.1.4
  • gnbsim2
docker-compose-host $: docker logs gnbsim2 2>&1 | grep "UE address:"
  • gnbsim3

5. 数据流测试

docker-compose-host $: docker exec oai-ext-dn ping 12.1.1.4 -c4
#ping -c<完成次数> 因此-c4表示ping4次

PING 12.1.1.4 (12.1.1.4) 56(84) bytes of data.
64 bytes from 12.1.1.4: icmp_seq=1 ttl=63 time=0.297 ms
64 bytes from 12.1.1.4: icmp_seq=2 ttl=63 time=0.824 ms
64 bytes from 12.1.1.4: icmp_seq=3 ttl=63 time=0.723 ms
64 bytes from 12.1.1.4: icmp_seq=4 ttl=63 time=0.849 ms

--- 12.1.1.4 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3072ms
rtt min/avg/max/mdev = 0.297/0.673/0.849/0.223 ms

6. 日志收集

停止PCAP收集:停止docker-compose-host上的wireshark或tshark进程。

docker-compose-host $: pkill tshark

收集所有容器的日志

docker-compose-host $: docker logs oai-amf > /tmp/oai/static-ue-ip/amf.log 2>&1
docker-compose-host $: docker logs oai-smf > /tmp/oai/static-ue-ip/smf.log 2>&1
docker-compose-host $: docker logs oai-nrf > /tmp/oai/static-ue-ip/nrf.log 2>&1
docker-compose-host $: docker logs oai-spgwu > /tmp/oai/static-ue-ip/spgwu.log 2>&1
docker-compose-host $: docker logs oai-udr > /tmp/oai/static-ue-ip/udr.log 2>&1
docker-compose-host $: docker logs oai-udm > /tmp/oai/static-ue-ip/udm.log 2>&1
docker-compose-host $: docker logs oai-ausf > /tmp/oai/static-ue-ip/ausf.log 2>&1
docker-compose-host $: docker logs gnbsim > /tmp/oai/static-ue-ip/gnbsim.log 2>&1

7. 取消部署

7.1 取消部署仿真基站

docker-compose-host $: docker-compose -f docker-compose-gnbsim.yaml down -t 0
Stopping gnbsim ... done
Found orphan containers (oai-nrf, oai-ausf, oai-smf, oai-udr, oai-spgwu, mysql, oai-amf, oai-udm, oai-ext-dn) for this project.
Removing gnbsim ... done
Network demo-oai-public-net is external, skipping

7.2 取消部署核心网

docker-compose-host $: python3 core-network.py --type stop-basic --scenario 1
[2022-02-08 15:51:06,388] root:DEBUG:  UnDeploying OAI 5G core components....
[2022-02-08 15:51:06,389] root:DEBUG: docker-compose -f docker-compose-basic-nrf.yaml down
Stopping oai-ext-dn ... done
Stopping oai-spgwu  ... done
Stopping oai-smf    ... done
Stopping oai-amf    ... done
Stopping oai-ausf   ... done
Stopping oai-udm    ... done
Stopping oai-udr    ... done
Stopping oai-nrf    ... done
Stopping mysql      ... done
Removing oai-ext-dn ... done
Removing oai-spgwu  ... done
Removing oai-smf    ... done
Removing oai-amf    ... done
Removing oai-ausf   ... done
Removing oai-udm    ... done
Removing oai-udr    ... done
Removing oai-nrf    ... done
Removing mysql      ... done
Removing network demo-oai-public-net

[2022-02-08 15:53:33,332] root:DEBUG:  OAI 5G core components are UnDeployed....

如果复制,那么日志文件和pcap文件将出现在/tmp/oai/static-ue-ip/目录下。如果您想将其与我们提供的日志和pcap进行比较,那么请参考下一节

8. 注意事项

  • oai-ext-dn容器是可选的,只有当用户想从UE ping时才需要它。一般情况下,除了测试目的,不需要这个容器。
  • 使用上面的python脚本,您可以执行最小AMF, SMF, UPF (SPGWU), NRF, MYSQL和基本AMF, SMF, UPF (SPGWU), NRF, UDM, UDR, AUSF, MYSQL 5g核心功能测试,基于FQDN/IP的特性以及NRF/noNRF。使用docker撰写文件前请检查配置。
  • 本教程可作为使用COTS终端测试OAI 5G核心的参考。配置文件必须根据gNB和COTS UE信息在mysql数据库中进行更改。
  • 如果您有兴趣在网络函数之间使用HTTP V2而不是HTTP V1进行SBI,那么您必须使用docker-compose-basic-nrf-http2.yaml
  • 通常,在一个COTS UE中默认创建两个PDN会话,因此在SMF中正确配置IMS。目前一些参数不能通过docker-compose-basic-nrf.yaml配置。我们建议您直接在conf文件中配置它们,并在运行时将文件挂载到docker中。
  • 不需要使用core-network.py Python脚本,可以使用docker-compose命令直接部署
  • 如果你想要部署更多日志的调试器/开发人员核心网络环境,请遵循本教程

 参考:docs/DEPLOY_SA5G_BASIC_STATIC_UE_IP.md · master · oai / cn5g / oai-cn5g-fed · GitLab (eurecom.fr)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值