前回記事のスピンオフとして、CentOS7でのNextEPCの構築方法を記載します。
Redhat系の方が使い慣れている人には最適かなと思います。
1.環境
1-1.VMWare
筐体 : 自作PC(Win10pro) CPU : Intel(R) Core(TM) i9-9900K CPU @ 3.60GHz VMWare : VMware(R) Workstation 15 Pro 15.1.0 build-13591040 OS : CentOS Linux release 7.7.1908 (Core) Kernel : 3.10.0-1062.el7.x86_64 Installed Environment Groups : Server with GUI Add-Ons for Selected Environment : Virtualization Client, Virtualization Hypervisor, Virtualization Tools, development
1-2.全体構成
緑色の箇所がUbuntu16.04からCentOS7.7に変わっています。
それ以外は全て同じです。
1-3 .全体の流れ ~概要~
- 事前準備
- NextEPC設定
- OAISIM設定(省略)*1
- NextEPCの分離
2.事前準備
2-1.c77g132:NextEPCのNW設定
nmcli con add type tun mode tun autoconnect yes ifname pgwtun con-name pgwtun nmcli con mod pgwtun ipv4.method manual ipv4.addresses 25.0.0.1/8 nmcli con mod pgwtun ipv6.method manual ipv6.addresses cafe::1/64 nmcli con up pgwtun nmcli con add type ethernet autoconnect yes ifname ens33 con-name ens33 nmcli con mod ens33 ipv4.method manual ipv4.addresses 10.10.0.135/24 nmcli con up ens33 nmcli con add type ethernet autoconnect yes ifname ens35 con-name ens35 nmcli con mod ens35 ipv4.method manual ipv4.addresses 10.20.0.132/24 nmcli con mod ens35 ipv4.method manual +ipv4.addresses 10.20.0.133/24 nmcli con mod ens35 ipv4.method manual +ipv4.addresses 10.20.0.134/24 nmcli con mod ens35 ipv4.method manual +ipv4.addresses 10.20.0.135/24 nmcli con mod ens35 ipv4.method manual +ipv4.addresses 10.20.0.136/24 nmcli con up ens35
3.NextEPC設定
分離するまでは、c77g132のみで設定を行っていきます。
3-1.MongoDBのインストール
sudo sh -c 'cat << EOF > /etc/yum.repos.d/mongodb-org-3.4.repo [mongodb-org-3.4] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/\$releasever/mongodb-org/3.4/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc EOF' yum -y install mongodb-org && \ systemctl start mongod && \ systemctl enable mongod
3-2.mongo-c-driver-develのインストール
yum -y install epel-release && \ yum -y install mongo-c-driver-devel
<補足>
NextEPCの公式サイトを読むと、外部サイトを参照することになります。
そこでは、
yum install mongo-c-driver
と記載されていますが、これをそのまま真に受けると、makeファイル作成時にエラーを吐いて止まります。
NextEPCのビルドで必要とされるのは、mongo-c-driver-develの方です。*2
3-3.依存関係パッケージのインストール
yum -y install git flex bison autoconf libtool \ lksctp-tools-devel libidn-devel gnutls-devel libgcrypt-devel \ openssl-devel cyrus-sasl-devel libyaml-devel
3-4.ビルド
git clone https://github.com/nextepc/nextepc && \ cd nextepc && \ autoreconf -iv ./configure --prefix=`pwd`/install && \ make -j `nproc` && \ make install
3-5.WebUIのインストール
curl --silent --location https://rpm.nodesource.com/setup_10.x | sudo bash - && \ yum -y install nodejs cd /root/nextepc/webui && \ npm install #サービス起動 npm run dev #2回目以降、起動する際はwebuiのディレクトリに入った状態で実行してください。 cd /root/nextepc/webui && \ npm run dev #アクセス先URL http://192.168.11.132:3000/
インストール完了後、以下のページが表示されればOKです。
Username/Passwdは以下の通り。
admin/1423
3-6.SIM情報の登録
上記のアクセス先URLから以下のSIM情報を登録します。
IMSI | 001010100001111 |
Subscriber Key(Ki) | 8baf473f2f8fd09487cccbd7097c6862 |
Operator Key(OPc) | e734f8734007d6c5ce7a0508809e7e9c |
USIM Type | OPc |
APN | lte.md.jp |
MSISDN | 33611123456 |
IMSI | 001010100001112 |
Subscriber Key(Ki) | 8baf473f2f8fd09487cccbd7097c6862 |
Operator Key(OPc) | e734f8734007d6c5ce7a0508809e7e9c |
USIM Type | OPc |
APN | lte.md.jp |
MSISDN | 33611123457 |
IMSI, Subscriber Key(Ki), Operator Key(OPc), USIM Typeが必須項目となります。
APNは任意で構いません。
3-7.nextepc.conf設定
設定変更箇所のみ抜粋。*3
vi /root/nextepc/install/etc/nextepc/nextepc.conf 追記:青 コメントアウト&追記:緑 db_uri: mongodb://localhost/nextepc logger: file: /root/nextepc/install/var/log/nextepc/nextepc.log trace: app: 1 s1ap: 1 nas: 1 diameter: 1 gtpv2: 1 gtp: 1 parameter: no_ipv6: true mme: freeDiameter: mme.conf s1ap: - addr: 10.20.0.132 gtpc: - addr: 10.20.0.132 gummei: plmn_id: mcc: 001 mnc: 01 mme_gid: 2 mme_code: 1 tai: plmn_id: mcc: 001 mnc: 01 # tac: 12345 tac: 1 security: integrity_order : [ EIA1, EIA2, EIA0 ] ciphering_order : [ EEA0, EEA1, EEA2 ] network_name: full: NextEPC hss: freeDiameter: hss.conf sgw: gtpc: # addr: 127.0.0.2 addr: 10.20.0.134 gtpu: - addr: 10.20.0.134 pgw: freeDiameter: pgw.conf gtpc: addr: # - 127.0.0.3 - 10.20.0.135 - ::1 gtpu: # - addr: 127.0.0.3 - addr: 10.20.0.135 - addr: ::1 ue_pool: # - addr: 45.45.0.1/16 - addr: 25.0.0.1/8 - addr: cafe::1/64 dns: - 8.8.8.8 - 8.8.4.4 - 2001:4860:4860::8888 - 2001:4860:4860::8844 pcrf: freeDiameter: pcrf.conf
3-8.mme.conf設定
設定変更箇所のみ抜粋。
vi /root/nextepc/install/etc/nextepc/freeDiameter/mme.conf 追記:青 コメントアウト&追記:緑 #ListenOn = "127.0.0.2"; ListenOn = "10.20.0.132"; #ConnectPeer = "hss.localdomain" { ConnectTo = "127.0.0.4"; No_TLS; }; ConnectPeer = "hss.localdomain" { ConnectTo = "10.20.0.133"; No_TLS; }; #もしくは sed -i -e /^ListenOn/s/127.0.0.2/10.20.0.132/g \ /root/nextepc/install/etc/nextepc/freeDiameter/mme.conf sed -i -e /^ConnectPeer/s/127.0.0.4/10.20.0.133/g \ /root/nextepc/install/etc/nextepc/freeDiameter/mme.conf
3-9.hss.conf設定
設定変更箇所のみ抜粋。
vi /root/nextepc/install/etc/nextepc/freeDiameter/hss.conf 追記:青 コメントアウト&追記:緑 #ListenOn = "127.0.0.4"; ListenOn = "10.20.0.133"; #ConnectPeer = "mme.localdomain" { ConnectTo = "127.0.0.2"; No_TLS; }; ConnectPeer = "mme.localdomain" { ConnectTo = "10.20.0.132"; No_TLS; }; #もしくは sed -i -e /^ListenOn/s/127.0.0.4/10.20.0.133/g \ /root/nextepc/install/etc/nextepc/freeDiameter/hss.conf sed -i -e /^ConnectPeer/s/127.0.0.2/10.20.0.132/g \ /root/nextepc/install/etc/nextepc/freeDiameter/hss.conf
3-10.pgw.conf設定
設定変更箇所のみ抜粋。
vi /root/nextepc/install/etc/nextepc/freeDiameter/pgw.conf 追記:青 コメントアウト&追記:緑 #ListenOn = "127.0.0.3"; ListenOn = "10.20.0.135"; #ConnectPeer = "pcrf.localdomain" { ConnectTo = "127.0.0.5"; No_TLS; }; ConnectPeer = "pcrf.localdomain" { ConnectTo = "10.20.0.136"; No_TLS; }; #もしくは sed -i -e /^ListenOn/s/127.0.0.3/10.20.0.135/g \ /root/nextepc/install/etc/nextepc/freeDiameter/pgw.conf sed -i -e /^ConnectPeer/s/127.0.0.5/10.20.0.136/g \ /root/nextepc/install/etc/nextepc/freeDiameter/pgw.conf
3-11.pcrf.conf設定
設定変更箇所のみ抜粋。
vi /root/nextepc/install/etc/nextepc/freeDiameter/pcrf.conf 追記:青 コメントアウト&追記:緑 #ListenOn = "127.0.0.5"; ListenOn = "10.20.0.136"; #ConnectPeer = "pgw.localdomain" { ConnectTo = "127.0.0.3"; No_TLS; }; ConnectPeer = "pgw.localdomain" { ConnectTo = "10.20.0.135"; No_TLS; }; #もしくは sed -i -e /^ListenOn/s/127.0.0.5/10.20.0.136/g \ /root/nextepc/install/etc/nextepc/freeDiameter/pcrf.conf sed -i -e /^ConnectPeer/s/127.0.0.3/10.20.0.135/g \ /root/nextepc/install/etc/nextepc/freeDiameter/pcrf.conf
3-12.ip forwarding設定
最終行に追記
vi /etc/sysctl.d/99-sysctl.conf net.ipv4.ip_forward=1
即時反映させる場合は以下のコマンド。
sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
3-13.NextEPC起動
「-d」オプションはDaemonとして起動させます。
/root/nextepc/install/bin/nextepc-epcd -d
出力例
以下のようにDaemonが起動していればOKです。
root@c77g132:~# /root/nextepc/install/bin/nextepc-epcd -d NextEPC daemon v0.3.10 - Oct 20 2019 23:04:44 [10/20 23:18:44.126] WARN: pid file /root/nextepc/install/var/run/nextepc-epcd/pid overwritten -- Unclean shutdown of previous NextEPC run? (application.c:133) PID[2136] : '/root/nextepc/install/var/run/nextepc-epcd/pid' root@c77g132:~# File Logging : '/root/nextepc/install/var/log/nextepc/nextepc.log' MongoDB URI : 'mongodb://localhost/nextepc' Configuration : '/root/nextepc/install/etc/nextepc/nextepc.conf' [10/20 23:18:44.129] PCRF try to initialize [10/20 23:18:44.148] PCRF initialize...done [10/20 23:18:44.148] PGW try to initialize [10/20 23:18:44.207] PGW initialize...done [10/20 23:18:44.207] gtp_server() [10.20.0.135]:2123 [10/20 23:18:44.208] gtp_server() [10.20.0.135]:2152 [10/20 23:18:44.208] SGW try to initialize [10/20 23:18:44.209] INFO: CONNECTED TO 'pgw.localdomain' (TCP,soc#7): (fd_logger.c:93) [10/20 23:18:44.210] INFO: CONNECTED TO 'pcrf.localdomain' (TCP,soc#10): (fd_logger.c:93) [10/20 23:18:44.217] SGW initialize...done [10/20 23:18:44.218] gtp_server() [10.20.0.134]:2123 [10/20 23:18:44.218] gtp_server() [10.20.0.134]:2152 [10/20 23:18:44.218] HSS try to initialize [10/20 23:18:44.268] HSS initialize...done [10/20 23:18:44.268] MME try to initialize [10/20 23:18:44.380] gtp_server() [10.20.0.132]:2123 [10/20 23:18:44.380] gtp_client() [10.20.0.134]:2123 [10/20 23:18:44.380] MME initialize...done [10/20 23:18:44.380] INFO: NextEPC daemon start (main.c:177) [10/20 23:18:44.381] INFO: CONNECTED TO 'mme.localdomain' (TCP,soc#7): (fd_logger.c:93) [10/20 23:18:44.381] INFO: CONNECTED TO 'hss.localdomain' (TCP,soc#10): (fd_logger.c:93) [10/20 23:18:44.387] s1ap_server() [10.20.0.132]:36412
終了させるときは、kill -9などで停止させてください。
分離させた後は以下のコマンドで個別に起動させますが、後ほど詳しく紹介します。
#c77g132:MME,HSS,SGW /root/nextepc/install/bin/nextepc-sgwd -d /root/nextepc/install/bin/nextepc-hssd -d /root/nextepc/install/bin/nextepc-mmed -d #c77g135:PGW,PCRF /root/nextepc/install/bin/nextepc-pcrfd -d /root/nextepc/install/bin/nextepc-pgwd -d
4.OAISIM設定
省略します。
前回記事を参照してください。
5.NextEPCの分離
5-1.クローン作成&c77g135の起動
c77g132をシャットダウン後、c77g132のクローンをc77g135として作成してください。
c77g135を起動後、ネットワーク設定やホスト名を以下のように変更します。
#c77g135の設定 nmcli con del ens35 nmcli con add type ethernet autoconnect yes ifname ens35 con-name ens35 nmcli con mod ens35 ipv4.method manual ipv4.addresses 10.20.0.135/24 nmcli con mod ens35 ipv4.method manual +ipv4.addresses 10.20.0.136/24 nmcli con up ens35 #ホスト名の変更 vi /etc/hostname c77g135 #再起動 reboot
5-2.c77g132のネットワーク設定変更
c77g132を起動してください。そして、以下の通りネットワーク設定を変更してください。
#c77g132の設定 nmcli con mod ens35 ipv4.method manual -ipv4.addresses 10.20.0.135/24 nmcli con mod ens35 ipv4.method manual -ipv4.addresses 10.20.0.136/24 nmcli con up ens35 nmcli con del ens33 nmcli con del pgwtun #再起動 reboot
5-3.各種サービス起動
S5/S8でSPGW間を分離していますので、
/root/nextepc/install/bin/nextepc-epcd -d
は使用せず、それぞれ個別にサービスを起動します。
c77g132 | MME, HSS, SGW |
c77g135 | PGW, PCRF |
#c77g132のサービス起動:MME, HSS, SGW /root/nextepc/install/bin/nextepc-sgwd -d /root/nextepc/install/bin/nextepc-hssd -d /root/nextepc/install/bin/nextepc-mmed -d #c77g135のサービス起動:PGW, PCRF /root/nextepc/install/bin/nextepc-pcrfd -d /root/nextepc/install/bin/nextepc-pgwd -d
これ以降は前回記事を参照してください。
以上です。
6.最後に
以下のサイトを参考にさせて頂きました。
NextEPC | Installation | CentOS
Installing the MongoDB C Driver (libmongoc) and BSON library (libbson) — MongoDB C Driver 1.15.1
<少し余談な話>
2-1.c77g132:NextEPCのNW設定の項で、UE用インターフェースとしてpgwtunに25.0.0.0/8を設定しましたが、検証用途としてたまに利用させてもらっています。
というのも、
元々25.0.0.0/8のprefixは、英国国防省の機関であるDINSA(Defence Interoperable Network Services Authority)が所有しているそうです。
しかし、既に10年以上(15年くらいだったかも?)、インターネット上にアドバタイズされていないPrefixとなっています。
下記のようなLooking glassサイトで確認しても、フルルート上に載っていないことがわかります。
Looking Glass - NTT - www.gin.ntt.net
この情報ソースは、下記サイトのvirtual-privateの項にNoteとして記載されています。*4
libreswan
そこには、25.0.0.0/8のprefixがあまりにも長期間アドバタイズされていないため、米国のT-MobileやカナダのRogers/Fidoという通信事業者が、CGNATの前で(恐らくUE用として)使用し始めているようだ、と記載されています。
上記のように商用で使うのは、さすがに怖くてできませんが、内部的に閉じられた環境における検証用途*5であれば、Shared Address*6と同様に使ってもよいのかな?と個人的には思います。*7