前回でNextEPCを動作させるための事前準備と、NextEPCのビルドが完了しました。
今回は、NextEPCの設定を行います。
再掲ですが、参考にしたURLは以下のとおりです。
構築環境
前回同様、構築環境は、以下の図のとおりです。
EPCの構築対象マシンは、USBのEtherデバイスを2つ増設したThinkPad T430で、OSはUbuntu 16.04 LTSです。
eNodeBやUEについては、既存システムのノードをそのまま使用するため、手は入れません。
NextEPCの設定
NextEPCをビルドしインストールすると、ビルドしたディレクトリ配下の./install/etc/配下に設定ファイルが配置されます。
$ ls -lF install/etc/nextepc/ total 36 drwxrwxr-x 2 bit bit 4096 Mar 26 14:13 freeDiameter/ -rw-r--r-- 1 bit bit 236 Mar 26 14:13 hss.conf -rw-r--r-- 1 bit bit 685 Mar 26 14:13 mme.conf -rw-r--r-- 1 bit bit 7007 Mar 26 14:13 nextepc.conf -rw-r--r-- 1 bit bit 239 Mar 26 14:13 pcrf.conf -rw-r--r-- 1 bit bit 503 Mar 26 14:13 pgw.conf -rw-r--r-- 1 bit bit 244 Mar 26 14:13 sgw.conf drwxrwxr-x 2 bit bit 4096 Mar 26 14:13 test/
EPCを構成する各ノード( MME, SGW, PGW, PCRF, and HSS)を個別に起動してもいいのですが、開発用に全ノードを起動できるnextepc-epcdというスクリプトファイルが用意されているので、このファイルを使用してNextEPCを起動します。
nextepc-epcdを使用してNextEPCを起動する場合、設定ファイルは./install/etc/nextepc/nextepc.conf、ログファイルは./install/var/log/nextepc/nextepc.logです。
デフォルトの設定内容
参考のため、変更を加えていないデフォルトの状態のnextepc.confの内容を以下に示します。
設定例がコメントで示されている部分が多いため、設定項目が多いように感じられますが、それほど多くはありません。
1 db_uri: mongodb://localhost/nextepc 2 3 logger: 4 file: /home/bit/modify_plmn_id/nextepc/install/var/log/nextepc/nextepc.log 5 trace: 6 app: 1 7 s1ap: 1 8 nas: 1 9 diameter: 1 10 gtpv2: 1 11 gtp: 1 12 13 # 14 # parameter: 15 # 16 # o Number of output streams per SCTP associations. 17 # sctp_streams: 30 18 # 19 # o Disable use of IPv4 addresses (only IPv6) 20 # no_ipv4: true 21 # 22 # o Disable use of IPv6 addresses (only IPv4) 23 # no_ipv6: true 24 # 25 # o Prefer IPv4 instead of IPv6 for estabishing new GTP connections. 26 # prefer_ipv4: true 27 # 28 # o Enable Multicast traffic to the UE 29 # multicast: true 30 # 31 # o Disable Stateless Address Autoconfiguration for IPv6 32 # no_slaac: true 33 # 34 # 35 parameter: 36 no_ipv6: true 37 38 mme: 39 freeDiameter: mme.conf 40 41 # 42 # <S1AP Server>> 43 # 44 # o S1AP Server(all address avaiable) 45 # s1ap: 46 # 47 # o S1AP Server(0.0.0.0:36412) 48 # s1ap: 49 # addr: 0.0.0.0 50 # 51 # o S1AP Server(127.0.0.1:36412, [::1]:36412) 52 # s1ap: 53 # - addr: 127.0.0.1 54 # - addr: ::1 55 56 # o S1AP Server(different port) 57 # s1ap: 58 # - addr: 127.0.0.1 59 # port: 36413 60 # 61 # o S1AP Server(address avaiable in `eth0` interface) 62 # s1ap: 63 # dev: eth0 64 # 65 s1ap: 66 67 # 68 # <GTP-C Server>> 69 # 70 # o GTP-C Server(all address avaiable) 71 # gtpc: 72 # 73 # o GTP-C Server(127.0.0.1:2123, [::1]:2123) 74 # gtpc: 75 # - addr: 127.0.0.1 76 # - addr: ::1 77 # 78 gtpc: 79 80 # 81 # <GUMMEI> 82 # 83 # o Multiple GUMMEI 84 # gummei: 85 # - plmn_id: 86 # mcc: 001 87 # mnc: 01 88 # mme_gid: 2 89 # mme_code: 1 90 # - plmn_id: 91 # - mcc: 002 92 # mnc: 02 93 # - mcc: 003 94 # mnc: 03 95 # mme_gid: [3, 4] 96 # mme_code: 97 # - 2 98 # - 3 99 # 100 gummei: 101 plmn_id: 102 mcc: 001 103 mnc: 01 104 mme_gid: 2 105 mme_code: 1 106 107 # 108 # <TAI> 109 # 110 # o Multiple TAI 111 # tai: 112 # - plmn_id: 113 # mcc: 001 114 # mnc: 01 115 # tac: [1, 2, 3] 116 # tai: 117 # - plmn_id: 118 # mcc: 002 119 # mnc: 02 120 # tac: 4 121 # - plmn_id: 122 # mcc: 003 123 # mnc: 03 124 # tac: 5 125 # tai: 126 # - plmn_id: 127 # mcc: 004 128 # mnc: 04 129 # tac: [6, 7] 130 # - plmn_id: 131 # mcc: 005 132 # mnc: 05 133 # tac: 8 134 # - plmn_id: 135 # mcc: 006 136 # mnc: 06 137 # tac: [9, 10] 138 # 139 tai: 140 plmn_id: 141 mcc: 001 142 mnc: 01 143 tac: 12345 144 145 security: 146 integrity_order : [ EIA1, EIA2, EIA0 ] 147 ciphering_order : [ EEA0, EEA1, EEA2 ] 148 149 # 150 # <Network Name> 151 # network_name: 152 # full: NextEPC 153 # short: Next 154 # 155 156 network_name: 157 full: NextEPC 158 159 hss: 160 freeDiameter: hss.conf 161 162 sgw: 163 # 164 # ------------------------ MME -------------------------- 165 # 166 # o Specify SGW addresses the GTP-C must connect to 167 # 168 # o One SGW is defined. If prefer_ipv4 is not true, [fe80::2%lo] is selected. 169 # gtpc: 170 # addr: 171 # - 127.0.0.2 172 # - fe80::2%lo 173 # 174 # o Two SGW are defined. MME selects SGW with round-robin manner per UE 175 # gtpc: 176 # - addr: 127.0.0.2 177 # - addr: fe80::2%lo 178 # 179 # o Three SGW are defined. MME selects SGW with round-robin manner per UE 180 # gtpc: 181 # - addr 182 # - 127.0.0.2 183 # - fe80::2%lo 184 # - addr 185 # - 127.0.0.12 186 # - fe80::12%lo 187 # - name: sgw3.nextepc.org 188 # 189 # ------------------------ SGW -------------------------- 190 # 191 # o GTP-C Server(127.0.0.2:2123, [fe80::2%lo]:2123) 192 # gtpc: 193 # addr: 194 # - 127.0.0.2 195 # - fe80::2%lo 196 # 197 # o On SGW, Same Configuration(127.0.0.2:2123, [fe80::2%lo]:2123) as below. 198 # gtpc: 199 # - addr: 127.0.0.2 200 # - addr: fe80::2%lo 201 # 202 gtpc: 203 addr: 127.0.0.2 204 205 # 206 # <SGW Selection Mode> 207 # 208 # o Round-Robin 209 # (If `selection_mode` is omitted, the default mode is Round-Robin) 210 # 211 # selection_mode: rr 212 # gtpc: 213 # addr: 127.0.0.2 214 # addr: 127.0.2.2 215 # addr: 127.0.4.2 216 # 217 # o SGW selection by eNodeB TAC 218 # 219 # selection_mode: tac 220 # gtpc: 221 # - addr: 127.0.0.2 222 # tac: 26000 223 # - addr: 127.0.2.2 224 # tac: [25000, 27000, 28000] 225 # 226 227 # 228 # <GTP-U Server> 229 # 230 # o GTP-U Server(all address avaiable) 231 # gtpu: 232 # 233 gtpu: 234 235 pgw: 236 freeDiameter: pgw.conf 237 238 # 239 # ------------------------ MME -------------------------- 240 # 241 # o Only first node is attempted. Others are ignored. 242 # o if HSS provide PGW addresss(per-UE), DB overwrites YAML-configuration. 243 # 244 # o Two PGW are defined. 127.0.0.3:2123 is attempted. [fe80::3%lo]:2123 is ignored. 245 # gtpc: 246 # - addr: 127.0.0.3 247 # - addr: fe80::3%lo 248 # 249 # o One PGW is defined. if prefer_ipv4 is not true, [fe80::3%lo] is selected. 250 # gtpc: 251 # - addr: 252 # - 127.0.0.3 253 # - fe80::3%lo 254 # 255 # ------------------------ PGW -------------------------- 256 # 257 # o GTP-C Server(127.0.0.3:2123, [fe80::3%lo]:2123) 258 # gtpc: 259 # addr: 260 # - 127.0.0.3 261 # - fe80::3%lo 262 # 263 # o On PGW, Same configuration(127.0.0.3:2123, [fe80::3%lo]:2123) as below. 264 # gtpc: 265 # - addr: 127.0.0.3 266 # - addr: fe80::3%lo 267 # 268 gtpc: 269 addr: 270 - 127.0.0.3 271 - ::1 272 273 # 274 # <GTP-U Server>> 275 # 276 # o GTP-U Server(127.0.0.3:2152, [::1]:2152) 277 # gtpu: 278 # - addr: 127.0.0.3 279 # - addr: ::1 280 # 281 # o Same configuration(127.0.0.3:2152, [::1]:2152) as below. 282 # gtpu: 283 # name: localhost 284 # 285 gtpu: 286 - addr: 127.0.0.3 287 - addr: ::1 288 289 # 290 # <UE Pool> 291 # 292 # o IPv4 Pool 293 # $ sudo ip addr add 45.45.0.1/16 dev pgwtun 294 # 295 # ue_pool: 296 # addr: 45.45.0.1/16 297 # 298 # o IPv4/IPv6 Pool 299 # $ sudo ip addr add 45.45.0.1/16 dev pgwtun 300 # $ sudo ip addr add cafe:1::1/64 dev pgwtun 301 # 302 # ue_pool: 303 # - addr: 45.45.0.1/16 304 # - addr: cafe:1::1/64 305 # 306 # 307 # o Specific APN(e.g 'volte') uses 45.46.0.1/16, cafe:2::1/64 308 # All other APNs use 45.45.0.1/16, cafe:1::1/64 309 # $ sudo ip addr add 45.45.0.1/16 dev pgwtun 310 # $ sudo ip addr add 45.46.0.1/16 dev pgwtun 311 # $ sudo ip addr add cafe:1::1/64 dev pgwtun 312 # $ sudo ip addr add cafe:2::1/64 dev pgwtun 313 # 314 # ue_pool: 315 # - addr: 45.45.0.1/16 316 # - addr: cafe:1::1/64 317 # - addr: 45.46.0.1/16 318 # apn: volte 319 # - addr: cafe:2::1/64 320 # apn: volte 321 # 322 # o Multiple Devices (default: pgwtun) 323 # $ sudo ip addr add 45.45.0.1/16 dev pgwtun 324 # $ sudo ip addr add cafe:1::1/64 dev pgwtun2 325 # $ sudo ip addr add 45.46.0.1/16 dev pgwtun3 326 # $ sudo ip addr add cafe:2::1/64 dev pgwtun3 327 # 328 # ue_pool: 329 # - addr: 45.45.0.1/16 330 # - addr: cafe:1::1/64 331 # dev: pgwtun2 332 # - addr: 45.46.0.1/16 333 # apn: volte 334 # dev: pgwtun3 335 # - addr: cafe:2::1/64 336 # apn: volte 337 # dev: pgwtun3 338 # 339 ue_pool: 340 - addr: 45.45.0.1/16 341 - addr: cafe::1/64 342 343 # 344 # <Domain Name Server> 345 # 346 # o Primary/Secondary can be configured. Others are ignored. 347 # 348 dns: 349 - 8.8.8.8 350 - 8.8.4.4 351 - 2001:4860:4860::8888 352 - 2001:4860:4860::8844 353 354 # 355 # <P-CSCF> 356 # 357 # o Proxy Call Session Control Function 358 # 359 # p-cscf: 360 # - 127.0.0.1 361 # - ::1 362 # 363 364 pcrf: 365 freeDiameter: pcrf.conf
このnextepc.confの内容を既存システムの設定に合わせて変更します。
MMEの設定
既存システムのeNodeBに設定されているMMEのIPアドレスが、”192.168.4.80″であったため、その設定に合わせて変更します。
38 mme: 39 freeDiameter: mme.conf 中略) 65 s1ap: 66 addr: 192.168.4.80
SGWの設定
上記と同様にSGWのIPアドレスも変更します。
162 sgw: (中略) 233 gtpu: 234 addr: 192.168.4.80
NATルータの設定
eNodeBがインターネットに接続できるようにNATの設定を行います。
sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward" sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE sudo iptables -I INPUT -i pgwtun -j ACCEPT
再起動後も有効になるように、rc.localに設定を追加しました。
MCCとMNCの設定
この項目もmmeの設定の一部なのですが、少々分かり難いため、説明を分けました。
mmeの設定には、以下のような項目があります。
140 plmn_id: 141 mcc: 001 142 mnc: 01
PLMNとは、Public Land Mobile Networkの略称で、MCC(Mobile Country Code)とMNC(Mobile Network Code)で構成されるIDです。
この設定をeNodeB側の設定と合わせないと、正常に接続することができません。
注意点として、PLMN_IDとMCC+MNCの対応付けは少々複雑です。
MNCが3桁の場合、以下の組み合わせで構成されます。
PLMN_ID = MCC2桁目、MCC3桁目、MNC1桁目、MCC1桁目、MNC2桁目、MNC3桁目
一方、MNCが2桁の場合、以下の組み合わせで構成されます。
PLMN_ID = MCC2桁目、MCC3桁目、0xF、MCC1桁目、MNC1桁目、MNC2桁目
MNCが2桁の場合は、3桁目に0xFが入った値がPLMN_IDとなります。
例えば、PLMN_IDが0x00f110の場合、MCCは0x001、MNCは0x01になります。
NextEPCのログに出力されたPLMN_IDとeNodeBのMCC、MNCの設定を合わせる際には、この点に注意してください。
ここまでの手順で、NextEPCの設定が完了しました。
次回は、UE情報の登録方法をご紹介します。
以上。