弊社は、「研究開発ITサービス」を行っているため、様々な実験システムに触れる機会があります。
その1つに、他社製のEPCとeNodeBが使用されているシステムがあり、このEPCではOpenEPCというソフトウェアが採用されていました。
OpenEPCの調査を続けているうちに、github上でソースコードが公開されているNextEPCというプロジェクトの存在を知り、各ノード間のインタフェースが堅持されているのであれば、もしかしたら比較的単純にNextEPCに置き換えられるのではないかと思い始めました。
そこで、既存システムのEPCをNextEPCに置き換えるべく悪戦苦闘したので、その内容を残しておきます。
NextEPCを使うにあたり、以下のURLの内容を参考にしました。
構築対象マシン
第一線を退いて社内で眠っていたThinkPad T430を使用しました。このマシンには、オンボードのネットワークインタフェースが1つしかなかったので、USBのEtherデバイスを2つ増設しました。
OSは、Ubuntu 16.04 LTSを使用しました。
構築環境
構築環境は、以下の図のとおりです。

eNodeBやUEについては、既存のシステムのノードをそのまま使用するため、手は入れません。
NextEPCの使用方法
NextEPCを使う方法は、aptでインストールする方法と、ソースからビルドする方法があります。
今回は、ソースコードに手を入れることを想定していたため、後者のソースからビルドする方法を採用しました。
ビルド手順
以下のURLの内容に従ってビルドします。
事前準備
・MongoDBのインストール
コンソール上で、以下のコマンドを実行し、MongoDBがactive(running)であることを確認します。
$ sudo apt update
$ sudo apt -y install mongodb
$ sudo systemctl status mongodb
● mongodb.service - An object/document-oriented database
Loaded: loaded (/lib/systemd/system/mongodb.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2019-03-26 13:42:54 JST; 10min ago
Docs: man:mongod(1)
Main PID: 725 (mongod)
Tasks: 10
Memory: 61.8M
CPU: 3.716s
CGroup: /system.slice/mongodb.service
mq725 /usr/bin/mongod --config /etc/mongodb.conf
Mar 26 13:42:54 t430 systemd[1]: Started An object/document-oriented database.
・TUNデバイスの設定
コンソール上で、以下のコマンドを実行し、systemd-udevdがactive(running)であることを確認します。
$ ls -al /dev/net/tun
crw-rw-rw- 1 root root 10, 200 Mar 26 13:42 /dev/net/tun
$ sudo apt -y install udev
$ sudo systemctl status systemd-udevd
● systemd-udevd.service - udev Kernel Device Manager
Loaded: loaded (/lib/systemd/system/systemd-udevd.service; static; vendor preset: enabled)
Active: active (running) since Tue 2019-03-26 13:56:55 JST; 57s ago
Docs: man:systemd-udevd.service(8)
man:udev(7)
Main PID: 2156 (systemd-udevd)
Status: "Processing..."
Tasks: 1
Memory: 23.7M
CPU: 5ms
CGroup: /system.slice/systemd-udevd.service
mq2156 /lib/systemd/systemd-udevd
Mar 26 13:56:55 t430 systemd[1]: Starting udev Kernel Device Manager...
Mar 26 13:56:55 t430 systemd[1]: Started udev Kernel Device Manager.
以下のコマンドを実行し、システム起動時にNextEPCで使用するTUNデバイスが作成されるように設定します。
$ sudo sh -c "cat << EOF > /etc/systemd/network/99-nextepc.netdev > [NetDev] > Name=pgwtun > Kind=tun > EOF" $ cat /etc/systemd/network/99-nextepc.netdev [NetDev] Name=pgwtun Kind=tun
以下のコマンドを実行し、pgwtunデバイスが作成されていることを確認します。
$ sudo systemctl enable systemd-networkd
$ sudo systemctl restart systemd-networkd
$ sudo apt-get -y install net-tools
$ ifconfig pgwtun
pgwtun Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
POINTOPOINT NOARP MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:500
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
・IPv6の設定
以下のコマンドを実行し、pgwtunデバイスのIPv6を無効化しないように設定します。
$ sysctl -n net.ipv6.conf.pgwtun.disable_ipv6 0 $ sudo sh -c "echo 'net.ipv6.conf.pgwtun.disable_ipv6=0' > /etc/sysctl.d/30-nextepc.conf" $ sudo sysctl -p /etc/sysctl.d/30-nextepc.conf
・pgwtunデバイスのIPアドレスの設定
以下のコマンドを実行し、pgwtunデバイスにIPアドレスを設定します。
$ sudo sh -c "cat << EOF > /etc/systemd/network/99-nextepc.network
> [Match]
> Name=pgwtun
> [Network]
> Address=45.45.0.1/16
> Address=cafe::1/64
> EOF"
$ sudo systemctl restart systemd-networkd
$ ifconfig pgwtun
pgwtun Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:45.45.0.1 P-t-P:45.45.0.1 Mask:255.255.0.0
inet6 addr: cafe::1/64 Scope:Global
UP POINTOPOINT NOARP MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:500
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
NextEPCのビルド
以下のコマンドを実行し、NextEPCをビルドします。
$ sudo apt-get -y install autoconf libtool gcc pkg-config git flex bison libsctp-dev libgnutls28-devl-dev libidn11-dev libmongoc-dev libbson-dev libyaml-dev $ git clone https://github.com/acetcom/nextepc $ cd nextepc $ autoreconf -iv $ ./configure --prefix=`pwd`/install $ make -j `nproc` $ make install $ ls -lF install/ total 16 drwxrwxr-x 2 bit bit 4096 Mar 26 14:13 bin/ drwxrwxr-x 3 bit bit 4096 Mar 26 14:13 etc/ drwxrwxr-x 3 bit bit 4096 Mar 26 14:13 lib/ drwxrwxr-x 4 bit bit 4096 Mar 26 14:13 var/ bit@t430:~/nextepc$ ls -lF install/bin/ total 12536 -rwxr-xr-x 1 bit bit 2689520 Mar 26 14:13 nextepc-epcd* -rwxr-xr-x 1 bit bit 244768 Mar 26 14:13 nextepc-hssd* -rwxr-xr-x 1 bit bit 1732000 Mar 26 14:13 nextepc-mmed* -rwxr-xr-x 1 bit bit 295296 Mar 26 14:13 nextepc-pcrfd* -rwxr-xr-x 1 bit bit 503016 Mar 26 14:13 nextepc-pgwd* -rwxr-xr-x 1 bit bit 345984 Mar 26 14:13 nextepc-sgwd* -rwxr-xr-x 1 bit bit 439528 Mar 26 14:13 testcore* -rwxr-xr-x 1 bit bit 3507048 Mar 26 14:13 testepc* -rwxr-xr-x 1 bit bit 3063600 Mar 26 14:13 testvolte*
Web UIのインストール
以下のコマンドを実行し、Web UIをインストールします。
$ sudo apt-get -y install curl $ curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash - $ sudo apt-get -y install nodejs $ cd webui/ $ npm install
ここまでの手順で、NextEPCのビルドが完了し、設定を行うための準備ができました。
次回は、NextEPCの設定方法をご紹介します。
以上。
