Metonymical Deflection

ゆるく日々のコト・たまにITインフラ

LXC/LXDコンテナ上にEPC環境構築

LXC/LXDコンテナ上にEPC環境を構築しました。
利用するEPCはNextEPCとなります。

NextEPCに含まれるサービスは以下の通りです。
mme
hss
sgw
pgw
pcrf
webui

また、以下2つの内容が理解できていることを前提に記載しますので、LXC/LXD環境などは既に構築済みの状態からスタートします。
CentOS7でLXC/LXDのコンテナ環境構築 - Metonymical Deflection
LXC/LXDコンテナのネットワーク設定方法 - Metonymical Deflection

1.環境

1-1.VMWare
筐体                             : 自作PC
CPU                           : Intel(R) Core(TM) i7-2600 CPU @ 3.40GHz
VMWare              : VMware(R) Workstation 12 Pro 12.5.9 build-7535481  
OS                               : CentOS7.5(1804)
Kernel                           : 3.10.0-862.el7.x86_64
Installed Environment Groups     : Minimal Install

WinおよびVMWare環境は以下の画像で確認してもらった方が良いかもしれません。
Win環境
f:id:metonymical:20180529200243j:plain
VMWare環境
f:id:metonymical:20181021182810j:plain

1-2.全体構成

f:id:metonymical:20181029104855j:plain
今回用意するlxcコンテナはUbuntu18.04となります。
公式サイトを読む限りCentOS7のコンテナでもいけそうなのですが、ビルドが必要っぽいので。
ロードマップには、いずれRPMも公開される旨、記載されていました。

1-3.全体の流れ

lxcコンテナ準備
NextEPCインストール
NextEPCのWebUIにアクセス

2.lxcコンテナ準備準備

2-1.Ubuntu18.04のコンテナ作成

今回はimages:からではなく、ubuntu:からコンテナイメージを引っ張ってきます。

lxc image list ubuntu: | grep 18.04
lxc launch ubuntu:18.04/amd64 lxc8041

出力例
[root@c757 ~]# lxc image list ubuntu: | grep 18.04
| b (9 more)         | 7a4f7e85f1fa | yes    | ubuntu 18.04 LTS amd64 (release) (20181024)     | x86_64  | 174.40MB | Oct 24, 2018 at 12:00am (UTC) |
| b/arm64 (4 more)   | 50fed56edee1 | yes    | ubuntu 18.04 LTS arm64 (release) (20181024)     | aarch64 | 158.29MB | Oct 24, 2018 at 12:00am (UTC) |
| b/armhf (4 more)   | bf45f28d0dca | yes    | ubuntu 18.04 LTS armhf (release) (20181024)     | armv7l  | 157.74MB | Oct 24, 2018 at 12:00am (UTC) |
| b/i386 (4 more)    | 3867042a618e | yes    | ubuntu 18.04 LTS i386 (release) (20181024)      | i686    | 176.20MB | Oct 24, 2018 at 12:00am (UTC) |
| b/ppc64el (4 more) | 852f241c93e1 | yes    | ubuntu 18.04 LTS ppc64el (release) (20181024)   | ppc64le | 182.86MB | Oct 24, 2018 at 12:00am (UTC) |
| b/s390x (4 more)   | a987004cb9f9 | yes    | ubuntu 18.04 LTS s390x (release) (20181024)     | s390x   | 166.14MB | Oct 24, 2018 at 12:00am (UTC) |
~一部省略~
[root@c757 ~]# lxc launch ubuntu:18.04/amd64 lxc8041
Creating lxc8041
Starting lxc8041
[root@c757 ~]# lxc list
+-----------+---------+---------------------+------+------------+-----------+
|   NAME    |  STATE  |        IPV4         | IPV6 |    TYPE    | SNAPSHOTS |
+-----------+---------+---------------------+------+------------+-----------+
| lxc8041   | RUNNING | 10.150.81.57 (eth0) |      | PERSISTENT |           |
+-----------+---------+---------------------+------+------------+-----------+
2-2.コンテナのネットワーク設定

lxc8041のeth1をlxdbr30にアタッチします。

lxc network list
lxc network attach lxdbr30 lxc8041 eth1
lxc network list

出力例
[root@c757 ~]# lxc network list
+---------+----------+---------+-------------+---------+
|  NAME   |   TYPE   | MANAGED | DESCRIPTION | USED BY |
+---------+----------+---------+-------------+---------+
| ens33   | physical | NO      |             | 0       |
+---------+----------+---------+-------------+---------+
| ens34   | physical | NO      |             | 0       |
+---------+----------+---------+-------------+---------+
| lxdbr0  | bridge   | YES     |             | 2       |
+---------+----------+---------+-------------+---------+
| lxdbr30 | bridge   | YES     |             | 0       |
+---------+----------+---------+-------------+---------+
[root@c757 ~]# lxc network attach lxdbr30 lxc8041 eth1
[root@c757 ~]# lxc network list
+---------+----------+---------+-------------+---------+
|  NAME   |   TYPE   | MANAGED | DESCRIPTION | USED BY |
+---------+----------+---------+-------------+---------+
| ens33   | physical | NO      |             | 0       |
+---------+----------+---------+-------------+---------+
| ens34   | physical | NO      |             | 0       |
+---------+----------+---------+-------------+---------+
| lxdbr0  | bridge   | YES     |             | 2       |
+---------+----------+---------+-------------+---------+
| lxdbr30 | bridge   | YES     |             | 1       |
+---------+----------+---------+-------------+---------+
2-3.ubuntuのネットワーク設定

lxc8041のeth1に固定IPを設定します。
IPアドレスは各自の環境に合わせてください。

[root@c757 ~]# lxc exec lxc8041 vi /etc/netplan/50-cloud-init.yaml

# This file is generated from information provided by
# the datasource.  Changes to it will not persist across an instance.
# To disable cloud-init's network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
    version: 2
    ethernets:
        eth0:
            dhcp4: true
        eth1:
            dhcp4: false
            addresses: [192.168.30.50/24]
            dhcp6: false

設定反映後にIPアドレスが設定されているかを確認し一旦再起動します。

lxc exec lxc8041 netplan apply
lxc list
lxc exec lxc8041 reboot

出力例
[root@c757 ~]# lxc exec lxc8041 netplan apply
[root@c757 ~]# lxc list
+-----------+---------+----------------------+------+------------+-----------+
|   NAME    |  STATE  |         IPV4         | IPV6 |    TYPE    | SNAPSHOTS |
+-----------+---------+----------------------+------+------------+-----------+
| lxc8041   | RUNNING | 192.168.30.50 (eth1) |      | PERSISTENT |           |
|           |         | 10.150.81.57 (eth0)  |      |            |           |
+-----------+---------+----------------------+------+------------+-----------+
[root@c757 ~]# lxc exec lxc8041 reboot

3.NextEPCインストール

3-1.NextEPCのインストール
lxc exec lxc8041 bash
apt-get update
add-apt-repository ppa:acetcom/nextepc
apt-get -y install nextepc

ホストOS上からコンテナのbashへ移動
aptアップデート
リポジトリ登録
NextEPCのインストール

注意事項
リポジトリ登録時に以下のようにEnterキーを押すよう促してくるので、そのままEnterキーを押下してください。

root@lxc8041:~# add-apt-repository ppa:acetcom/nextepc
 NextEPC is a C-language Open Source implementation of the 3GPP Evolved
?Packet Core, i.e. the core network of an LTE network.(http://nextepc.org)
 More info: https://launchpad.net/~acetcom/+archive/ubuntu/nextepc
Press [ENTER] to continue or Ctrl-c to cancel adding it.
3-2.NextEPCのWebUIインストール
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
apt-get -y install nodejs
curl -sL http://nextepc.org/static/webui/install | sudo -E bash -

NodeSource Node.js 8.x のスクリプトインストール
nodejsインストール
NextEPCのWebUIインストール

3-3.サービスの有効化
systemctl enable nextepc-mmed
systemctl enable nextepc-sgwd
systemctl enable nextepc-pgwd
systemctl enable nextepc-hssd
systemctl enable nextepc-pcrfd
systemctl enable nextepc-webui
reboot

各種サービスの有効化
一旦再起動

3-4.サービスの起動確認

再起動後、サービスが起動するまで3分程度待ってください。
再起動直後のステータス

[root@c757 ~]# lxc list
+-----------+---------+----------------------+------+------------+-----------+
|   NAME    |  STATE  |         IPV4         | IPV6 |    TYPE    | SNAPSHOTS |
+-----------+---------+----------------------+------+------------+-----------+
| lxc8041   | RUNNING | 192.168.30.50 (eth1) |      | PERSISTENT |           |
|           |         | 10.150.81.57 (eth0)  |      |            |           |
+-----------+---------+----------------------+------+------------+-----------+

再起動3分後のステータス
pgwtunインターフェースが表示されていればOKです。

[root@c757 ~]# lxc list
+-----------+---------+----------------------+------------------+------------+-----------+
|   NAME    |  STATE  |         IPV4         |       IPV6       |    TYPE    | SNAPSHOTS |
+-----------+---------+----------------------+------------------+------------+-----------+
| lxc8041   | RUNNING | 45.45.0.1 (pgwtun)   | cafe::1 (pgwtun) | PERSISTENT |           |
|           |         | 192.168.30.50 (eth1) |                  |            |           |
|           |         | 10.150.81.57 (eth0)  |                  |            |           |
+-----------+---------+----------------------+------------------+------------+-----------+

4.NextEPCのWebUIにアクセス

4-1.ログイン

ログインします。

http://192.168.30.50:3000
Username:admin
Password:1423

f:id:metonymical:20181029102633j:plain
トップページ
f:id:metonymical:20181029114657j:plain

4-2.Subscriber情報の登録

IMSIの登録
f:id:metonymical:20181029114817j:plain
APNの登録
f:id:metonymical:20181029114850j:plain

以上です。

6.最後に

以下のサイトを参考にさせて頂きました。
Home - LXDドキュメント翻訳プロジェクトNextEPC | Guides | Installation
Raspberry Pi 3上にLTEコア網(Evolved Packet Core:EPC)機能を構築してみた(Raspberry Pi 3+ubuntu16.04 LTS+NextEPC)

メインは公式サイトですが、@m0ch1m0ch1さんの記事が大変良くまとめられています。

ラズパイ上で動くならコンテナ上でも動くかな?と思ってやってみましたが、何とか動くところまでは確認できました。
基地局側の環境を用意するのは、USRPなどが必要となってくるようで、少々敷居が高いのですが、タイミングをみて検証したいなと思っています。
あとはキャリアのSGWと接続テストとかやってみて上手くいきそうであれば、IoT用途に特化したPGWとしては有効活用できそうな気がしています。
また、OAI(Open Air Interface)などにも興味が湧いてきたので、折をみて検証したいなと考えています。
Home · Wiki · oai / openairinterface5G · GitLab