先看
基于之前已经创建的三个核心网,我们现在需要将服务器A与主机B用三个网线直连,然后在服务器A的单个虚拟机中同时启动三个核心网,主机B的单个虚拟机中同时启动三个基站,构建三套互相独立的仿真OAI核心网——ueransim基站。
1. 机器网络配置
机器网络配置过程如下
由于使用了虚拟机,网络配置较为复杂,需要最终映射到在虚拟机中三根网线分别一对一直连。
使用主机B只有一个网口,使用了两个USB转网口扩展了两个网口,图中左、中、右分别对应。
图中由windows里的网络适配器桥接映射到虚拟机的VMnet,再依次对应Ubuntu中的ens。
对应关系如下:
最左侧的网线————ASIX AX88772C USB2.0 to Fast Ethernet Adapter ————网络适配器6(VMnet4)——(00:0C:29:9B:47:50)——ens39
中间网线————ASIX AX88772C USB2.0 to Fast Ethernet Adapter #5 ————网络适配器5(VMnet3)——(00:0C:29:9B:47:46)——ens41
右边网线————Realtek PCIe GbE Family Controller ————网络适配器4(VMnet2)——(00:0C:29:9B:47:3C)——ens40
通过查看MAC地址,匹配虚拟机里的Vmnetx与Ubuntu里的ensxx
如下为服务器A的网口,从左到右分别为NIC4 NIC3 NIC2 NIC1,其中NIC1未使用
从核心网到主机的连接如下:
ens33————(00:0C:29:B7:1E:CA)VMnet4————Broadcom NetXtreme Gigabit Ethernet————NIC4————最左侧的网线————ASIX AX88772C USB2.0 to Fast Ethernet Adapter ————网络适配器6(VMnet4)————ens41
ens38————(00:0C:29:B7:1E:C0)VMnet3————Broadcom NetXtreme Gigabit Ethernet #4————NIC3————中间网线————ASIX AX88772C USB2.0 to Fast Ethernet Adapter #5 ————网络适配器5(VMnet3)————ens40
ens37————(00:0C:29:B7:1E;B6)VMnet2————Broadcom NetXtreme Gigabit Ethernet #3————NIC2————右边网线————Realtek PCIe GbE Family Controller ————网络适配器4(VMnet2)————ens39
然后在Ubuntu内配置各个网口为对应的静态ip,一一对应的网口之间使用同一网段。
打算使用网段如下:
NIC2对应网线:网段:192.168.12.x 对应的网口:主机ens39(192.168.12.33) 服务器ens37(192.168.12.3)
NIC3对应网线:网段:192.168.13.x 对应的网口:主机ens40(192.168.13.33) 服务器ens38 (192.168.13.3)
NIC4对应网线:网段:192.168.14.x 对应的网口:主机ens41(192.168.14.33) 服务器ens33 (192.168.14.3)
先配置主机的网络
打开网络配置文件
lab@lab-virtual-machine:/etc/netplan$ sudo vim 01-network-manager-all.yaml
配置网络文件
version: 2
renderer: NetworkManager
ethernets:
ens39:
addresses: [192.168.12.33/24]
dhcp4: no
gateway4: 192.168.12.1
nameservers:
addresses: [8.8.8.8,144.144.144.144,255.255.255.25]
ens40:
addresses: [192.168.13.33/24]
dhcp4: no
gateway4: 192.168.13.1
nameservers:
addresses: [8.8.8.8,144.144.144.144,255.255.255.255]
ens41:
addresses: [192.168.14.33/24]
dhcp4: no
gateway4: 192.168.14.1
nameservers:
addresses: [8.8.8.8,144.144.144.144,255.255.255.255]
应用网络设置
lab@lab-virtual-machine:/etc/netplan$ sudo netplan apply
再配置服务器A的网络:
version: 2
renderer: NetworkManager
ethernets:
ens37:
addresses: [192.168.12.3/24]
dhcp4: no
gateway4: 192.168.12.1
nameservers:
addresses: [8.8.8.8,144.144.144.144,255.255.255.25]
ens38:
addresses: [192.168.13.3/24]
dhcp4: no
gateway4: 192.168.13.1
nameservers:
addresses: [8.8.8.8,144.144.144.144,255.255.255.255]
ens33:
addresses: [192.168.14.3/24]
dhcp4: no
gateway4: 192.168.14.1
nameservers:
addrsses: [8.8.8.8,144.144.144.144,255.255.255.255]
测试是否成功:
从主机A ping服务器B
从服务器Aping同样成功·
2.核心网配置
详见OAI多核心网配置过程
核心网创建了3个,如下
其中核心网0是官方的,核心网1与核心网3是在官方基础上通过改标签复制了镜像,再修改yaml文件自己构造的。
核心网 | 启动文件 | 使用网段 | 对应网段 | 使用images |
---|---|---|---|---|
核心网0 | docker-compose-basic-vpp-nrf.yaml | 192.168.7x.x | 192.168.12.x | oaisoftwarealliance/oai-xxx:v1.5.0 |
核心网2 | docker-compose-basic-vpp-nrf1.yaml | 192.168.1x.x | 192.168.13.x | oaisoftwarealliance/oai-xxx:1.5.1 |
核心网3 | docker-compose-basic-vpp-nrf3.yaml | 192.168.3x.x | 192.168.14.x | oaisoftwarealliance/oai-xxx:1.5.3 |
这三个核心网经测试可以在服务器A中同时启动:
docker-compose -f docker-compose-basic-vpp-nrf.yaml up -d
docker-compose -f docker-compose-basic-vpp-nrf1.yaml up -d
docker-compose -f docker-compose-basic-vpp-nrf3.yaml up -d
网元容器:
网络:
配置文件分别如下:
docker-compose-basic-vpp-nrf
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:v1.5.0
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:v1.5.0
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:v1.5.0
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:v1.5.0
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:v1.5.0
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
- INT_ALGO_LIST=[ "NIA1" , "NIA2"]
- CIPH_ALGO_LIST=[ "NEA1" , "NEA2"]
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:v1.5.0
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
- 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.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:v1.5.0
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"
docker-compose-basic-vpp-nrf2
version: '3.8'
services:
mysql2:
container_name: "mysql2"
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_net2:
ipv4_address: 192.168.20.131
oai-udr2:
container_name: "oai-udr2"
image: oaisoftwarealliance/oai-udr:1.5.1
environment:
- TZ=Europe/Paris
- UDR_NAME=OAI_UDR2
- UDR_INTERFACE_NAME_FOR_NUDR=eth0
- MYSQL_IPV4_ADDRESS=192.168.20.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.20.130
- NRF_FQDN=oai-nrf2
depends_on:
- mysql2
- oai-nrf2
networks:
public_net2:
ipv4_address: 192.168.20.136
oai-udm2:
container_name: "oai-udm2"
image: oaisoftwarealliance/oai-udm:1.5.1
environment:
- TZ=Europe/Paris
- UDM_NAME=OAI_UDM2
- SBI_IF_NAME=eth0
- REGISTER_NRF=yes
- USE_FQDN_DNS=yes
- UDR_IP_ADDRESS=192.168.20.136
- UDR_FQDN=oai-udr2
- NRF_IPV4_ADDRESS=192.168.20.130
- NRF_FQDN=oai-nrf2
depends_on:
- oai-udr2
networks:
public_net2:
ipv4_address: 192.168.20.137
oai-ausf2:
container_name: "oai-ausf2"
image: oaisoftwarealliance/oai-ausf:1.5.1
environment:
- TZ=Europe/Paris
- AUSF_NAME=OAI_AUSF2
- SBI_IF_NAME=eth0
- USE_FQDN_DNS=yes
- REGISTER_NRF=yes
- UDM_IP_ADDRESS=192.168.20.137
- UDM_FQDN=oai-udm2
- NRF_IPV4_ADDRESS=192.168.20.130
- NRF_FQDN=oai-nrf2
depends_on:
- oai-udm2
networks:
public_net2:
ipv4_address: 192.168.20.138
oai-nrf2:
container_name: "oai-nrf2"
image: oaisoftwarealliance/oai-nrf:1.5.1
environment:
- TZ=Europe/Paris
- NRF_INTERFACE_NAME_FOR_SBI=eth0
networks:
public_net2:
ipv4_address: 192.168.20.130
oai-amf2:
container_name: "oai-amf2"
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.20.130
- NRF_FQDN=oai-nrf2
- AUSF_IPV4_ADDRESS=192.168.20.138
- AUSF_FQDN=oai-ausf2
- UDM_IPV4_ADDRESS=192.168.20.137
- UDM_FQDN=oai-udm2
- INT_ALGO_LIST=[ "NIA1" , "NIA2"]
- CIPH_ALGO_LIST=[ "NEA1" , "NEA2"]
depends_on:
- mysql2
- vpp-upf2
- oai-ext-dn2
- oai-ausf2
networks:
public_net2:
ipv4_address: 192.168.20.132
oai-smf2:
container_name: "oai-smf2"
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.20.132
- AMF_FQDN=oai-amf2
- UDM_IPV4_ADDRESS=192.168.20.137
- UDM_FQDN=oai-udm2
- UPF_IPV4_ADDRESS=192.168.20.201
- UPF_FQDN_0=vpp-upf2.node.5gcn.mnc95.mcc208.3gppnetwork.org
- NRF_IPV4_ADDRESS=192.168.20.130
- NRF_FQDN=oai-nrf2
- 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-upf2.node.5gcn.mnc95.mcc208.3gppnetwork.org:192.168.60.201"
depends_on:
- oai-amf2
networks:
public_net2:
ipv4_address: 192.168.20.133
vpp-upf2:
privileged: true
container_name: "vpp-upf2"
image: oaisoftwarealliance/oai-upf-vpp:1.5.1
environment:
- IF_1_IP=192.168.20.201
- IF_1_TYPE=N4
- IF_2_IP=192.168.22.201
- IF_2_TYPE=N3
- IF_2_NWI=access2.oai.org
- IF_3_IP=192.168.23.201
- IF_3_TYPE=N6
- IF_3_IP_REMOTE=192.168.23.135 # EXT-DN IP Address
- IF_3_NWI=internet2.oai.org
- NAME=VPP-UPF2
- 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.20.130
- NRF_PORT=80
- HTTP_VERSION=1
depends_on:
- oai-nrf2
healthcheck:
test: /bin/bash -c "pgrep vpp"
interval: 10s
timeout: 5s
retries: 5
networks:
public_net2:
ipv4_address: 192.168.20.134
public_net_access2:
ipv4_address: 192.168.22.134
public_net_core2:
ipv4_address: 192.168.23.134
oai-ext-dn2:
privileged: true
init: true
container_name: "oai-ext-dn2"
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_core2:
ipv4_address: 192.168.23.135
networks:
public_net2:
driver: bridge
name: demo-oai-public-net2
ipam:
config:
- subnet: 192.168.20.0/24
driver_opts:
com.docker.network.bridge.name: "demo-oai2"
public_net_access2:
name: oai-public-access2
ipam:
config:
- subnet: 192.168.22.0/24
driver_opts:
com.docker.network.bridge.name: "cn5g-access2"
public_net_core2:
name: oai-public-core2
ipam:
config:
- subnet: 192.168.23.0/24
driver_opts:
com.docker.network.bridge.name: "cn5g-core2"
docker-compose-basic-vpp-nrf3
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-upf3.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-upf3.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=access3.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=internet3.oai.org
- NAME=VPP-UPF3
- 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"
3.ueransim配置
需要构建3个容器化ueransim,与clone核心网一样,先改标签clone三个image,再修改yaml文件
单个ueransim的构建参考分立部署核心网与容器化ueransim
ueransim | 启动文件 | 使用网段 | 对应网段 | 使用images | 接入核心网 |
---|---|---|---|---|---|
ueransim | docker-compose-ueransim-vpp60.yaml | 192.168.6x.x | 192.168.12.x | ueransim1:latest | 核心网0 |
ueransim2 | docker-compose-basic-vpp-nrf8.yaml | 192.168.8x.x | 192.168.13.x | ueransim1:latest | 核心网2 |
ueransim3 | docker-compose-basic-vpp-nrf9.yaml | 192.168.9x.x | 192.168.13.x | ueransim1:latest | 核心网3 |
改标签clone镜像:
lab@lab-virtual-machine:~$ docker tag ueransim:latest ueransim1:latest
lab@lab-virtual-machine:~$ docker tag ueransim:latest ueransim3:latest
创建yaml配置文件:
ueransim配置 docker-compose-ueransim-vpp60.yaml
version: '3.8'
services:
#对名字进行了更改,避免重名
ueransim60:
container_name: ueransim60
image: ueransim:latest
privileged: true
environment:
# GNB Congig Parameters
- MCC=208
- MNC=95
- NCI=0x000000010
- TAC=0xa000
#此三个ip网段对应本地创建的demo-oai的网段,最后141可更改,但此三个需相同
- LINK_IP=192.168.60.141
- NGAP_IP=192.168.60.141
- GTP_IP=192.168.62.141
#此为核心网amf的接入ip
- NGAP_PEER_IP=192.168.70.132
- SST=222
- SD=123
- IGNORE_STREAM_IDS=true
# UE Config Parameters
- NUMBER_OF_UE=1
- IMSI=208950000000031
- KEY=0C0A34601D4F07677303652C0462535B
- OP=63bfa50ee6523365ff14c1f45f88737d
- OP_TYPE=OPC
- AMF_VALUE=8000
- IMEI=356938035643803
- IMEI_SV=0035609204079514
#此为ue接入gnb的ip,更改为LINK_IP
- GNB_IP_ADDRESS=192.168.60.141
- PDU_TYPE=IPv4
- APN=default
- SST_0=222
- SD_0=123
- SST_C=222
- SD_C=123
- SST_D=222
- SD_D=123
networks:
#下面网络均更改与最下面的networks一致
public_net:
ipv4_address: 192.168.60.141
public_net_access:
ipv4_address: 192.168.62.141
healthcheck:
test: /bin/bash -c "ifconfig uesimtun0"
interval: 10s
timeout: 5s
retries: 5
#创建出与核心网同名网桥,但网段不同避免冲突
networks:
public_net:
driver: bridge
name: demo-oai-public-net
ipam:
config:
- subnet: 192.168.60.0/24
driver_opts:
com.docker.network.bridge.name: "demo-oai"
public_net_access:
name: oai-public-access
ipam:
config:
- subnet: 192.168.62.0/24
driver_opts:
com.docker.network.bridge.name: "cn5g-access"
ueransim2配置 docker-compose-ueransim-vpp80.yaml
version: '3.8'
services:
#对名字进行了更改,避免重名
ueransim80:
container_name: ueransim80
image: ueransim1:latest
privileged: true
environment:
# GNB Congig Parameters
- MCC=208
- MNC=95
- NCI=0x000000010
- TAC=0xa000
#此三个ip网段对应本地创建的demo-oai的网段,最后141可更改,但此三个需相同
- LINK_IP=192.168.80.141
- NGAP_IP=192.168.80.141
- GTP_IP=192.168.82.141
#此为核心网amf的接入ip
- NGAP_PEER_IP=192.168.20.132
- SST=222
- SD=123
- IGNORE_STREAM_IDS=true
# UE Config Parameters
- NUMBER_OF_UE=1
- IMSI=208950000000031
- KEY=0C0A34601D4F07677303652C0462535B
- OP=63bfa50ee6523365ff14c1f45f88737d
- OP_TYPE=OPC
- AMF_VALUE=8000
- IMEI=356938035643803
- IMEI_SV=0035609204079514
#此为ue接入gnb的ip,更改为LINK_IP
- GNB_IP_ADDRESS=192.168.80.141
- PDU_TYPE=IPv4
- APN=default
- SST_0=222
- SD_0=123
- SST_C=222
- SD_C=123
- SST_D=222
- SD_D=123
networks:
#下面网络均更改与最下面的networks一致
public_net1:
ipv4_address: 192.168.80.141
public_net_access1:
ipv4_address: 192.168.82.141
healthcheck:
test: /bin/bash -c "ifconfig uesimtun0"
interval: 10s
timeout: 5s
retries: 5
#创建出与核心网同名网桥,但网段不同避免冲突
networks:
public_net1:
driver: bridge
name: demo-oai-public-net1
ipam:
config:
- subnet: 192.168.80.0/24
driver_opts:
com.docker.network.bridge.name: "demo-oai1"
public_net_access1:
name: oai-public-access1
ipam:
config:
- subnet: 192.168.82.0/24
driver_opts:
com.docker.network.bridge.name: "cn5g-access1"
ueransim3配置 docker-compose-ueransim-vpp90.yaml
version: '3.8'
services:
#对名字进行了更改,避免重名
ueransim90:
container_name: ueransim90
image: ueransim3:latest
privileged: true
environment:
# GNB Congig Parameters
- MCC=208
- MNC=95
- NCI=0x000000010
- TAC=0xa000
#此三个ip网段对应本地创建的demo-oai的网段,最后141可更改,但此三个需相同
- LINK_IP=192.168.90.141
- NGAP_IP=192.168.90.141
- GTP_IP=192.168.92.141
#此为核心网amf的接入ip
- NGAP_PEER_IP=192.168.30.132
- SST=222
- SD=123
- IGNORE_STREAM_IDS=true
# UE Config Parameters
- NUMBER_OF_UE=1
- IMSI=208950000000031
- KEY=0C0A34601D4F07677303652C0462535B
- OP=63bfa50ee6523365ff14c1f45f88737d
- OP_TYPE=OPC
- AMF_VALUE=8000
- IMEI=356938035643803
- IMEI_SV=0035609204079514
#此为ue接入gnb的ip,更改为LINK_IP
- GNB_IP_ADDRESS=192.168.90.141
- PDU_TYPE=IPv4
- APN=default
- SST_0=222
- SD_0=123
- SST_C=222
- SD_C=123
- SST_D=222
- SD_D=123
networks:
#下面网络均更改与最下面的networks一致
public_net3:
ipv4_address: 192.168.90.141
public_net_access3:
ipv4_address: 192.168.92.141
healthcheck:
test: /bin/bash -c "ifconfig uesimtun0"
interval: 10s
timeout: 5s
retries: 5
#创建出与核心网同名网桥,但网段不同避免冲突
networks:
public_net3:
driver: bridge
name: demo-oai-public-net3
ipam:
config:
- subnet: 192.168.90.0/24
driver_opts:
com.docker.network.bridge.name: "demo-oai3"
public_net_access3:
name: oai-public-access3
ipam:
config:
- subnet: 192.168.92.0/24
driver_opts:
com.docker.network.bridge.name: "cn5g-access3"
4.核心网与主机B路由构建
为了使ueranism接入核心网,需要使ueransim容器内的数据转发到核心网,通过构建特定的路由规则来实现。
参考单核心网与基站分立部署
在服务器A:
sudo sysctl net.ipv4.conf.all.forwarding=1
sudo iptables -P FORWARD ACCEPT
#核心网0到ueransim的路由
sudo route add -net 192.168.60.0/24 gw 192.168.12.33
#核心网1到ueransim1的路由
sudo route add -net 192.168.80.0/24 gw 192.168.13.33
#核心网3到ueransim3的路由
sudo route add -net 192.168.90.0/24 gw 192.168.14.33
在主机B:
#ueransim到核心网0的路由
sudo route add -net 192.168.70.0/24 gw 192.168.12.3
#ueransim1到核心网1的路由
sudo route add -net 192.168.20.0/24 gw 192.168.13.3
#ueransim3到核心网3的路由
sudo route add -net 192.168.30.0/24 gw 192.168.14.3
启动
核心网先前已经启动
启动ueransim:
docker-compose -f docker-compose-ueransim-vpp60.yaml up -d
docker-compose -f docker-compose-ueransim-vpp80.yaml up -d
docker-compose -f docker-compose-ueransim-vpp90.yaml up -d
如下,成功接入了核心网:
关闭
ueransim
docker-compose -f docker-compose-ueransim-vpp60.yaml down
docker-compose -f docker-compose-ueransim-vpp80.yaml down
docker-compose -f docker-compose-ueransim-vpp90.yaml down
核心网
docker-compose -f docker-compose-basic-vpp-nrf.yaml down
docker-compose -f docker-compose-basic-vpp-nrf1.yaml down
docker-compose -f docker-compose-basic-vpp-nrf3.yaml down
成功启动的日志
lab@lab-virtual-machine:~/oai-cn5g-fed/docker-compose$ docker-compose -f docker-compose-ueransim-vpp60.yaml up
Creating network "demo-oai-public-net" with driver "bridge"
Creating network "oai-public-access" with the default driver
WARNING: Found orphan containers (oai-nrf-slice12, vpp-upf-slice3, oai-spgwu-slice2, oai-nssf, oai-spgwu-slice1, oai-smf-slice2, oai-nrf-slice3, oai-smf-slice3, oai-smf-slice1, ueransim80) for this project. If you removed or renamed this service in your compose file, you can run this command with the --remove-orphans flag to clean it up.
Creating ueransim60 ... done
Attaching to ueransim60
ueransim60 | Now setting these variables '@GTP_IP@ @IGNORE_STREAM_IDS@ @LINK_IP@ @MCC@ @MNC@ @NCI@ @NGAP_IP@ @NGAP_PEER_IP@ @SD_0@ @SD_1@ @SD_2@ @SST_0@ @SST_1@ @SST_2@ @TAC@'
ueransim60 | Now setting these variables '@AMF_VALUE@ @APN@ @GNB_IP_ADDRESS@ @IMEI@ @IMEI_SV@ @IMSI@ @KEY@ @MCC@ @MNC@ @OP@ @OP_TYPE@ @PDU_TYPE@ @SD_C@ @SD_D@ @SD_R@ @SST_C@ @SST_D@ @SST_R@'
ueransim60 | Done setting the configuration
ueransim60 | ### Running ueransim ###
ueransim60 | Running gnb
ueransim60 | UERANSIM v3.2.5
ueransim60 | [2023-03-28 09:13:23.731] [sctp] [info] Trying to establish SCTP connection... (192.168.70.132:38412)
ueransim60 | [2023-03-28 09:13:23.741] [sctp] [info] SCTP connection established (192.168.70.132:38412)
ueransim60 | [2023-03-28 09:13:23.741] [sctp] [debug] SCTP association setup ascId[3]
ueransim60 | [2023-03-28 09:13:23.742] [ngap] [debug] Sending NG Setup Request
ueransim60 | [2023-03-28 09:13:23.748] [ngap] [debug] NG Setup Response received
ueransim60 | [2023-03-28 09:13:23.748] [ngap] [info] NG Setup procedure is successful
ueransim60 | Running ue
ueransim60 | UERANSIM v3.2.5
ueransim60 | [2023-03-28 09:13:24.730] [nas] [info] UE switches to state [MM-DEREGISTERED/PLMN-SEARCH]
ueransim60 | [2023-03-28 09:13:24.730] [rrc] [debug] UE[1] new signal detected
ueransim60 | [2023-03-28 09:13:24.730] [rrc] [debug] New signal detected for cell[1], total [1] cells in coverage
ueransim60 | [2023-03-28 09:13:24.731] [nas] [info] Selected plmn[208/95]
ueransim60 | [2023-03-28 09:13:24.731] [rrc] [info] Selected cell plmn[208/95] tac[40960] category[SUITABLE]
ueransim60 | [2023-03-28 09:13:24.732] [nas] [info] UE switches to state [MM-DEREGISTERED/PS]
ueransim60 | [2023-03-28 09:13:24.732] [nas] [info] UE switches to state [MM-DEREGISTERED/NORMAL-SERVICE]
ueransim60 | [2023-03-28 09:13:24.732] [nas] [debug] Initial registration required due to [MM-DEREG-NORMAL-SERVICE]
ueransim60 | [2023-03-28 09:13:24.732] [nas] [debug] UAC access attempt is allowed for identity[0], category[MO_sig]
ueransim60 | [2023-03-28 09:13:24.732] [nas] [debug] Sending Initial Registration
ueransim60 | [2023-03-28 09:13:24.733] [nas] [info] UE switches to state [MM-REGISTER-INITIATED]
ueransim60 | [2023-03-28 09:13:24.733] [rrc] [debug] Sending RRC Setup Request
ueransim60 | [2023-03-28 09:13:24.733] [rrc] [info] RRC Setup for UE[1]
ueransim60 | [2023-03-28 09:13:24.734] [rrc] [info] RRC connection established
ueransim60 | [2023-03-28 09:13:24.734] [rrc] [info] UE switches to state [RRC-CONNECTED]
ueransim60 | [2023-03-28 09:13:24.734] [nas] [info] UE switches to state [CM-CONNECTED]
ueransim60 | [2023-03-28 09:13:24.734] [ngap] [debug] Initial NAS message received from UE[1]
ueransim60 | [2023-03-28 09:13:24.789] [nas] [debug] Authentication Request received
ueransim60 | [2023-03-28 09:13:24.809] [nas] [debug] Security Mode Command received
ueransim60 | [2023-03-28 09:13:24.809] [nas] [debug] Selected integrity[1] ciphering[1]
ueransim60 | [2023-03-28 09:13:24.818] [ngap] [debug] Initial Context Setup Request received
ueransim60 | [2023-03-28 09:13:24.819] [nas] [debug] Registration accept received
ueransim60 | [2023-03-28 09:13:24.819] [nas] [info] UE switches to state [MM-REGISTERED/NORMAL-SERVICE]
ueransim60 | [2023-03-28 09:13:24.819] [nas] [debug] Sending Registration Complete
ueransim60 | [2023-03-28 09:13:24.819] [nas] [info] Initial Registration is successful
ueransim60 | [2023-03-28 09:13:24.819] [nas] [debug] Sending PDU Session Establishment Request
ueransim60 | [2023-03-28 09:13:24.819] [nas] [debug] UAC access attempt is allowed for identity[0], category[MO_sig]
ueransim60 | [2023-03-28 09:13:41.747] [nas] [warning] Retransmitting PDU Session Establishment Request due to T3580 expiry
ueransim60 | [2023-03-28 09:13:41.747] [nas] [debug] UAC access attempt is allowed for identity[0], category[MO_sig]
ueransim60 | [2023-03-28 09:13:41.780] [ngap] [info] PDU session resource(s) setup for UE[1] count[1]
ueransim60 | [2023-03-28 09:13:41.781] [nas] [debug] PDU Session Establishment Accept received
ueransim60 | [2023-03-28 09:13:41.781] [nas] [info] PDU Session establishment is successful PSI[1]
ueransim60 | [2023-03-28 09:13:41.793] [app] [info] Connection setup for PDU session[1] is successful, TUN interface[uesimtun0, 12.1.1.2] is up.
问题解决
问题1
新创建的ueransim80与ueransim90无法成功创建pdu session
首先在服务器A上创建一个ueransim90,发现仍然无法接入核心网3,且无法接入原因与在主机B上接入时的一样,如下截图:
主机B上的错误原因:PDU session establishment reject received
服务器A上的错误原因:PDU session establishment reject received
查看SMF日志,原因是 no upf available upf could not be selected for the PDU session
PDU Session Establishment Request :Creat SM Context Request procedure failed
检查ueransim配置文件没有太多与UPF相关的内容,修改imsi号后尝试依旧没用。
检查核心网配置文件docker-compose-basic-vpp-nrf3yaml ,发现了一个地方,在smf配置部分:
其中的vpp-upf可能是引发问题的原因,虽然未修改核心网仍然能够启动,但在接入仿真用户时就会报错,将其改为 vpp-upf3
报错成功解决
问题2
核心网0——ueransim0与核心网3——ueransim3两个连接同时开启没有问题,但核心网1——ueransim1的连接一直不成功。
三个核心网同时启动时upf不健康,考虑还是核心网配置文件没有设置到位。
原因分析:其中核心网1使用到了192.168.12.x,而192.168.12.3与192.168.12.33是连接网络所用到的,应该会有冲突,我选择将核心网使用的192.168.1x.x改掉,改为192.168.2x.x
目前还在修改中