openwrt 機場,【OpenAirInterface】分立部署核心網與容器化ueransim仿真基站
openwrt 機場,【OpenAirInterface】分立部署核心網與容器化ueransim仿真基站
分立部署OAI核心網與容器版ueransim
- 1.任務說明
- 2.部署前提
- 3.部署過程
- 3.1網絡配置
- 3.2核心網啟動 (此為錯誤發現過程)
- 3.3啟動容器化ueransim(此為錯誤發現與解決過程)
- 3.3.1直接啟動問題發現
- 3.3.2問題解決
- 4.說明及純享版開啟流程
- 4.1開啟流程純享版
1.任務說明
openwrt 機場。有兩臺機器,服務器A與主機B,A與B通過網線直連,在A上部署OAI基礎核心網,在B上部署docker 版ueransim,實現ueransim的成功接入。
我使用的服務器A與主機B上此前已下載部署過核心網與ueransim,此篇文章主要解決如何在兩臺機器上分立部署的問題。
在一臺機器上進行部署的詳細鏈接:基于Docker的UERANSIM多基站接入5GCN
2.部署前提
仿真終端、服務器A上在windows系統中安裝了VM虛擬機,其上安裝ubuntu18.04系統。下載部署成功了OAI核心網(版本v1.5.0)。
主機B上在windows系統中安裝了VM虛擬機,其上安裝ubuntu18.04系統。下載了OAI核心網(用于測試)與docker版 ueransim仿真基站,并測試可以成功接入。
3.部署過程
3.1網絡配置
首先需要進行兩臺機器的網絡配置,讓兩臺機器可以互相ping通。
服務器A上網絡配置如下:
將服務器的NIC4接口與虛擬機的VMnet4映射橋接起來,在虛擬機種選中使用VMnet4網絡
對主機B進行相似操作
然后配置兩個虛擬機使用到網絡為靜態IP,以使兩機器能長期通信
#打開配置網絡文件
sudo vim /etc/netplan/01-network-manager-all.yaml
此為服務器A上配置
此為主機B上配置,兩機器上保持網段在同一網段
#應用改網絡設置
sudo netplan apply
然后測試兩機器是否接通,通過互相ping的方式,可以互相ping通
3.2核心網啟動 (此為錯誤發現過程)
#核心網網絡轉發的配置
sudo sysctl net.ipv4.conf.all forwarding=1
sudo iptables -P FORWARD ACCEPT
#進入核心網啟動文件夾
cd /oai-cn5g-fed/docker-compose
#啟動核心網
docker-compose -f docker-compose-basic-vpp-nrf.yaml up -d
嘗試啟動核心網啟動成功
在主機B上添加路由轉發,轉發到服務器A上的demo-oai網橋(錯誤的多余步驟,正確的路由轉發見后文)
#192.168.70.0來自于核心網啟動的docker-compose.yaml文件里network下的設置
sudo ip route add 192.168.70.0/24 via 192.168.12.3 dev ens33
sudo ip route add 192.168.72.0/24 via 192.168.12.3 dev ens33
在主機B上測試是否可以ping到核心網,其中192.168.70.1是核心網demo-oai網橋,成功ping通,說明主機B可以與核心網進行通信
3.3啟動容器化ueransim(此為錯誤發現與解決過程)
3.3.1直接啟動問題發現
啟動ueranism,發現無法啟動,ueransim1的啟動需要依托網絡demo-oai-public-net,主機B上并沒有創建這個網絡,服務器A上啟動OAI核心網后是創建了這個網絡的。
很顯然,這里涉及到了容器之間的跨機器工作問題,主機B上啟動docker版ueransim依賴demo-oai-public-net網絡,但主機B上的容器無法找到武器A上創建的網絡,同時涉及到docker-compose網絡配置的問題
下圖分別為核心網docker-compose文件與ueransim的docke-compose文件中的網絡配置
3.3.2問題解決
思路:修改ueransim的docker-compose文件,使其可以連接到服務器A上的核心網
先對docker-compose文件中各個參數的意義有所了解如:基于Docker的UERANSIM多基站接入5GCN
學習容器跨主機進行通信Docker容器跨主機通訊的幾種方式
主要參考鏈接為:兩種常用的跨主機Docker容器互通方法
跨主機容器通信
文章中將兩臺機器的docker0網橋連接起來,docker啟動的時候會在主機上自動創建一個docker0網橋,實際上是一個Linux網橋,所有容器的啟動如果在docker run的時候沒有指定網絡模式的情況下都會掛載到docker0網橋上。這樣容器就可以和主機甚至是其他容器之間通訊了。我們使用的是自己創建的網橋demo-oai-public-net ,所以不是接通docker0,而是接通兩個機器上的demo-oai-public-net。
在docker版ueransim的docker-compose.yaml文件里加入所需的網橋:
原來:
現在:
之所以如此添加是因為啟動的核心網是docker-compose-basic-nrf-vpp版本,此更改依據要接入的核心網版本進行對應的更改。
除此以外其他相關設置如:LINK_IP、 NGAP_IP、GTP_IP 、NGAP_PEER_IP、GNB_IP_ADDRESS也需進行相應更改
ueransim docker-compose.yaml文件更改后全文如下:
version: '3.8'
services:
#對名字進行了更改,避免重名ueransim33:container_name: ueransim33image: ueransim:latestprivileged: trueenvironment:# 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=123networks:#下面網絡均更改與最下面的networks一致public_net:ipv4_address: 192.168.60.141public_net_access:ipv4_address: 192.168.62.141healthcheck:test: /bin/bash -c "ifconfig uesimtun0"interval: 10stimeout: 5sretries: 5#創建出與核心網同名網橋,但網段不同避免沖突
networks:public_net:driver: bridgename: demo-oai-public-netipam:config:- subnet: 192.168.60.0/24driver_opts:com.docker.network.bridge.name: "demo-oai"public_net_access:name: oai-public-accessipam:config:- subnet: 192.168.62.0/24driver_opts:com.docker.network.bridge.name: "cn5g-access"
結構圖如下:
將主機B上容器接入服務器A上demo-oai網橋,在主機B上添加如下路由:
sudo route add -net 192.168.70.0/24 gw 192.168.12.3
sudo route add -net 192.168.72.0/24 gw 192.168.12.3
將服務器A與主機B上demo-oai網橋接通,在服務器A上添加如下路由:
sudo route add -net 192.168.60.0/24 gw 192.168.12.33
sudo route add -net 192.168.62.0/24 gw 192.168.12.33
啟動docker版 ueransim
docker-compose -f ueransim33.yaml up -d
查看ueransim日志:
docker ueransim33 logs
成功開啟了uesimtun0,代表啟動成功:
4.說明及純享版開啟流程
服務器A與主機B上添加的路由規則重啟后會消失,所以每次都需重新添加
4.1開啟流程純享版
上面主要進行了幾個工作 :
- 基礎準備:兩機器上核心網與ueransim的下載與部署測試;
- 兩機器網線直連
- 兩機器設置靜態ip可以互相ping通
- 兩機器設置路由轉發以及ueransim的docker-compose.yaml文件修改,讓主機B的ueransim容器數據可以傳入服務器A的核心網網橋demo-oai里
- 啟動核心網
- 啟動基站
其中1、2、3以及4中yaml文件的修改是一勞永逸的,詳情參照上文。其他步驟是每次開啟都需重新操作的,如下:
服務器A設置路由轉發:
sudo sysctl net.ipv4.conf.all.forwarding=1
sudo iptables -P FORWARD ACCEPT
sudo route add -net 192.168.60.0/24 gw 192.168.12.33
主機B設置路由轉發:
sudo route add -net 192.168.70.0/24 gw 192.168.12.3
服務器A開啟核心網:
docker-compose -f docker-compose-basic-vpp-nrf.yaml up -d
主機B開啟ueransim:
docker-compose -f ueransim33.yaml up -d
查看是否生成uesimtun0:
docker ueransim33 logs