OAI搭建EPC核心网,并连接商用eNodeB设备

让我们搭建一个EPC核心网玩玩

其实,本来的计划时搭建一个5GC+gNodeB,但是因为施工队没空帮忙过来安装5G BBU,刚好手头上有之前单位采购用来做测试佰才邦4G皮基站设备,因此打算先部署一个EPC核心网来尝试一下接入eNodeB设备看看。

概述

OAI的源码分为两部分,分别为EPC和eNodeB,这里由于我使用了成品eNodeB设备,因此不需要搭建额外的eNodeB网元设备。EPC跑起来后直接在eNodeB设置好MME的S1接口地址即可。OAI的EPC核心网包含:MME,SPWG(PGW和SGW合设),HSS等网元,HSS的采用Mysql数据库作为UE的数据存储单元。

我的设备及网络拓扑

我在Mac上用VirtualBox虚拟化了一台Ubuntu16.04的虚拟机作为EPC,eNodeB设备采用Baicells Neutrino 小型室内基站

我的网络拓扑结构很简单,但是不是官网推荐的EPC采用双网卡连接的方式,1台千兆路由器挂1台千兆交换机,交换机再下挂1台EPC虚拟机和1台eNodeB。

EPC IP:192.168.123.153
eNodeB IP:192.168.123.110
宿主MAC IP:192.168.123.230

开搞

按照官方推荐的系统,这里采用了ubuntu16.04 版本,OAI官方推荐使用4.7.7-oaiepc内核,但是我第一次使用默认的generic也可以成功编译,但是为了一次顺利编译,建议还是使用官方推荐的内核版本。这里我给出更换内核的版本,但是为了图方便,我这里使用默认的generic内核。

更换Ubuntu内核版本

git clone https://gitlab.eurecom.fr/oai/linux-4.7.x.git
cd linux-4.7.x
sudo dpkg -i linux-headers-4.7.7-oaiepc_4.7.7-oaiepc-10.00.Custom_amd64.deb linux-image-4.7.7-oaiepc_4.7.7-oaiepc-10.00.Custom_amd64.deb
sudo reboot

注意:gitlab.eurecom.fr 非常的慢,若没有梯子,可能需要耐心等等!(MLGB)

git OAI EPC源码

注意:gitlab.eurecom.fr现在已经不对外直接开放,需要账号才能git下来,我之前尝试从CSDN大神那边直接下载他提供的源码进行编译,但是在编译SPGW源码时候仍旧会提示要从eurecom.fr上git源码来编译,若直接跳过会导致编译失败。

我在网上搜索找到一个账号和密码,但这里为了隐私不方便直接提供,各位要是有需求,可以留下邮箱地址,我这边发过去。

git clone https://gitlab.eurecom.fr/oai/openair-cn.git

git代码执行一下步骤

cd ~/openair-cn
git checkout -b v0.5.0

修改本机host

先使用hostname命令查看ubuntu的host名称,我的hostname是 epc

hostname

接下来修改host文件

sudo vim /etc/hosts
127.0.1.1       epc.openair4G.eur   epc #这一行的两个epc都要改成你的主机名
127.0.1.1       hss.openair4G.eur   hss

需要将默认的2条host注释掉。修改完成后再执行hostname -f命令查看是否生效。

安装mysql数据库

sudo apt-get install mysql-server mysql-client

安装过程中需要设置mysql数据库密码

安装Apache2

sudo apt-get install apache2

安装后访问下ubuntu的ip地址,看看能否访问apache的默认页面

安装PHP

主要用于驱动mysql的web管理软件phpmyadmin,如果您不需要,也可以不安装。

sudo apt-get install php7.0
sudo apt-get install libapache2-mod-php7.0
sudo service apache2 restart

安装 phpmyadmin

sudo apt-get install phpmyadmin
sudo ln -s /usr/share/phpmyadmin /var/www/html

安装过程中需要管理密码,安装完成后在IP/phpmyadmin就可以访问了,用户名为root,密码为刚才您设置的密码。

编译EPC源码

在openair-cn目录下执行

cd openair-cn
git checkout develop
git pull

编译MME

cd openair-cn/scripts
./build_mme -i

编译过程需要盯着,并不是一步到底的过程,需要一路按y。编译过程中需要安装freeDiameter协议,从外网下载,会比较慢,需要耐心等待。

编译HSS

cd openair-cn/scripts
./build_hss -i

编译SPGW

cd openair-cn/scripts
./build_spgw -i

主要SPGW的编译过程中需要输入gitlab.eurecom.fr的账号和密码,直接跳过会导致编译失败。

拷贝EPC配置文件

sudo mkdir -p /usr/local/etc/oai/freeDiameter
sudo cp ~/openair-cn/etc/mme.conf /usr/local/etc/oai
sudo cp ~/openair-cn/etc/hss.conf /usr/local/etc/oai
sudo cp ~/openair-cn/etc/spgw.conf /usr/local/etc/oai
sudo cp ~/openair-cn/etc/acl.conf /usr/local/etc/oai/freeDiameter
sudo cp ~/openair-cn/etc/mme_fd.conf /usr/local/etc/oai/freeDiameter
sudo cp ~/openair-cn/etc/hss_fd.conf /usr/local/etc/oai/freeDiameter

配置MME,HSS和SPGW配置信息

  • 查看ubuntu的网卡信息和ip地址

    ifconfig


    我这里配置了2张网卡,请忽略enp0s8的这张网卡

  • 配置MME参数

    sudo vim /usr/local/etc/oai/mme.conf


    记录这里MCC、MNC和TAC,在后面配置eNodeB是需要配置一样信息。

    MME_INTERFACE_NAME_FOR_S1_MME        = "enp0s3";                         # YOUR NETWORK CONFIG HERE
    MME_IPV4_ADDRESS_FOR_S1_MME             = "192.168.123.153/24";             # YOUR NETWORK CONFIG HERE

    修改成自己ubuntu的网卡和ip地址,我的网卡是enp0s3,ip地址为:192.168.123.153

  • 配置SPGW参数

    sudo vim /usr/local/etc/oai/spgw.conf

    修改

    GW_INTERFACE_NAME_FOR_S1U_S12_S4_UP    = "enp0s3"; 
    SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP      = "192.168.123.153/24";
    PGW_INTERFACE_NAME_FOR_SGI            = "enp0s3"; 
    PGW_IPV4_ADDRESS_FOR_SGI              = "192.168.123.153/24"#这里配置少了一条,需要手动配置
  • HSS freediameter 配置

    sudo vim /usr/local/etc/oai/freeDiameter/hss_fd.conf
    Identity = "hss.openair4G.eur";
    Realm = "openair4G.eur";

    确保以上信息配置一致

  • MME freediameter 配置

    sudo vim /usr/local/etc/oai/freeDiameter/mme_fd.conf
    Identity = "epc.openair4G.eur";#修改为你的host名称
    Realm = "openair4G.eur";
    ConnectPeer= "hss.openair4G.eur" { ConnectTo = "127.0.0.1"; No_SCTP ; No_IPv6; Prefer_TCP; No_TLS; port = 3868;  realm = "openair4G.eur";};

  • 修改HSS配置

    sudo vim /usr/local/etc/oai/hss.conf
    MYSQL_user   = "root";  # mysql数据库用户名
    MYSQL_pass   = "cnmbdgfw";  # mysql数据库密码,数据你安装数据库是的密码

    编译EPC

    注册证书

    cd /openair-cn/scripts
    ./check_hss_s6a_certificate /usr/local/etc/oai/freeDiameter/ hss.openair4G.eur
    ./check_mme_s6a_certificate /usr/local/etc/oai/freeDiameter/ epc.openair4G.eur #这里的epc要改成自己的主机名

编译HSS

cd /openair-cn/scripts
sudo ./build_hss -c

将HSS信息导入mysql数据库

./run_hss -i ~/openair-cn/src/oai_hss/db/oai_db.sql

注意:这条命令只需要执行这一次。运行这条命令后,hss已开始运行,此时可以使用ctrl+c中断运行。

编译MME

cd /openair-cn/scripts
sudo ./build_mme

编译SPGW

cd ~/openair-cn/scripts
sudo ./build_spgw

运行 EPC

依次启动HSS,MME和SPGW等网元

./run_hss
./run_mme
./run_spgw

修改mmeidentity信息

浏览器登录到 http://ip/phpmyadmin
使用mysql的root和你之前设置密码登录,修改mmeidentity信息。可以将yang.openair4G.eur 这条数据修改为 epc.openair4G.eur,这里epc修改成你的hostname

接入eNbodeB设备

我这里使用了佰才邦的成品商用基站设备,因此不需要在额外配置eNodeB ,只需要配置下基站MME地址,PLNM,TAC等信息即可。

在路由器内找到分配给eNodeB,使用admin登录


设置完成重启设备,等待设备重启完成后,查看MME log

写在最后

在配置完成EPC后,连接eNodeB后MME没有检测到eNbodeB设备,由于调试的时候已经是凌晨,第二天还要上班,后面因为其他事情耽搁了,就没在调试。

11月6日周日,百无聊赖,重新在windows的笔记本上用虚拟机再跑了一起,就正常连接了。

之前存在问题主要是:

  • 由于EPC对网络要求较高,之前调试时在家,为了方便宿主机使用了wifi接入,换成千兆有线接入就正常。
  • 尽量保障局域网内的网络简单可靠。

下个计划

找白卡和写卡器进行测试

一些照片

再次感谢

这篇文档几乎全程参考了这位大神的文档,非常感谢。
并得到了B站UP主小牛很有用的帮助

11 thoughts on “OAI搭建EPC核心网,并连接商用eNodeB设备

    1. 小基站跟皮基站不一样,小基站没有ENB功能,有测试过用华为的3900+book小基站,但因为license、没有网管及版本问题,就没调试起来。

  1. 有遇到过手机附着后spgw就崩溃的情况吗?

    genl_socket_talk: No such file or directory
    000360 00122:950825 7FEACCD89700 TRACE SPGW-A penair-cn/src/sgw/sgw_handlers.c:0752 Leaving sgw_handle_sgi_endpoint_deleted() (rc=0)
    *** Error in `spgw’: double free or corruption (out): 0x00007feabc003840 ***
    ======= Backtrace: =========

  2. 我的佰才邦4G皮基站设备不连EPC,mme不会报错,但是连上EPC后 mme运行一段时间后就会提示./run_mme: 行 87: 17968 段错误 $SUDO mme `echo $exe_arguments` 2>&1 这种,大佬 你的是这样的吗

回复 jim 取消回复

您的邮箱地址不会被公开。 必填项已用 * 标注