弊社は、「研究開発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の設定方法をご紹介します。
以上。