Open5gs: IMS Install Ubuntu 22.04: Difference between revisions

From OnnoCenterWiki
Jump to navigationJump to search
Line 552: Line 552:
==Install Ant==
==Install Ant==


  $ cd ~
  cd ~
  $ wget http://archive.apache.org/dist/ant/binaries/apache-ant-1.9.14-bin.tar.gz
  wget http://archive.apache.org/dist/ant/binaries/apache-ant-1.9.14-bin.tar.gz
  $ tar xvfvz apache-ant-1.9.14-bin.tar.gz
  tar xvfvz apache-ant-1.9.14-bin.tar.gz
  $ mv apache-ant-1.9.14 /usr/local/
  mv apache-ant-1.9.14 /usr/local/
  $ sh -c 'echo ANT_HOME=/usr/local/  >> /etc/environment'
  sh -c 'echo ANT_HOME=/usr/local/  >> /etc/environment'
  $ ln -s /usr/local/apache-ant-1.9.14/bin/ant /usr/bin/ant
  ln -s /usr/local/apache-ant-1.9.14/bin/ant /usr/bin/ant


Verfiy ant version as follows:
Verfiy ant version as follows:


  $ ant -version
  ant -version


  Apache Ant(TM) version 1.9.14 compiled on March 12 2019
  Apache Ant(TM) version 1.9.14 compiled on March 12 2019
Line 567: Line 567:
Create working directories for OpenIMSCore:
Create working directories for OpenIMSCore:


  $ mkdir /opt/OpenIMSCore
  mkdir /opt/OpenIMSCore
  $ cd /opt/OpenIMSCore
  cd /opt/OpenIMSCore


Download:
Download:


  $ git clone https://github.com/herlesupreeth/FHoSS
  git clone https://github.com/herlesupreeth/FHoSS


Compile:
Compile:


  $ cd FHoSS
  cd FHoSS
  $ export JAVA_HOME="/usr/lib/jvm/jdk1.7.0_79"
  export JAVA_HOME="/usr/lib/jvm/jdk1.7.0_79"
  $ export CLASSPATH="/usr/lib/jvm/jdk1.7.0_79/jre/lib/"
  export CLASSPATH="/usr/lib/jvm/jdk1.7.0_79/jre/lib/"
  $ ant compile deploy | tee ant_compile_deploy.txt
  ant compile deploy | tee ant_compile_deploy.txt


Create configurator.sh using below script to change domain names and IP address in all configuration files
Create configurator.sh using below script to change domain names and IP address in all configuration files


  $ cd deploy
  cd deploy
  $ vim configurator.sh
  vim configurator.sh


  #!/bin/bash
  #!/bin/bash
Line 655: Line 655:
   fi
   fi


  $ chmod +x configurator.sh
  chmod +x configurator.sh
  $ ./configurator.sh  
  ./configurator.sh  


  Domain Name:ims.mnc001.mcc001.3gppnetwork.org
  Domain Name:ims.mnc001.mcc001.3gppnetwork.org
  IP Adress:10.4.128.21
  IP Adress:10.4.128.21


  $ grep -r "open-ims"
  grep -r "open-ims"
(Change realm name in the below file from open-ims.test to ims.mnc001.mcc001.3gppnetwork.org)
(Change realm name in the below file from open-ims.test to ims.mnc001.mcc001.3gppnetwork.org)
$ vim webapps/hss.web.console/WEB-INF/web.xml
vim webapps/hss.web.console/WEB-INF/web.xml
$ vim hibernate.properties
vim hibernate.properties
 
And, change the following line:
And, change the following line:


hibernate.connection.url=jdbc:mysql://127.0.0.1:3306/hss_db
hibernate.connection.url=jdbc:mysql://127.0.0.1:3306/hss_db
$ cp configurator.sh ../scripts/
cp configurator.sh ../scripts/
$ cd ../scripts
cd ../scripts
$ grep -r "open-ims"
grep -r "open-ims"
$ ./configurator.sh  
./configurator.sh  
 
Domain Name:ims.mnc001.mcc001.3gppnetwork.org
Domain Name:ims.mnc001.mcc001.3gppnetwork.org
IP Adress:10.4.128.21
IP Adress:10.4.128.21


$ cp configurator.sh ../config/
cp configurator.sh ../config/
$ cd ../config
cd ../config
$ ./configurator.sh  
./configurator.sh  
 
Domain Name:ims.mnc001.mcc001.3gppnetwork.org
Domain Name:ims.mnc001.mcc001.3gppnetwork.org
IP Adress:10.4.128.21
IP Adress:10.4.128.21


$ cd ../src-web
cd ../src-web
$ vim WEB-INF/web.xml
vim WEB-INF/web.xml
 
And, change open-ims.test to ims.mnc001.mcc001.3gppnetwork.org
And, change open-ims.test to ims.mnc001.mcc001.3gppnetwork.org


Prepare mysql database:
Prepare mysql database:


$ mysql
mysql
<mysql> drop database hss_db;
<mysql> drop database hss_db;
<mysql> create database hss_db;
<mysql> create database hss_db;
<mysql> quit
<mysql> quit
 
Import database located at /opt/OpenIMSCore into hss_db
Import database located at /opt/OpenIMSCore into hss_db


$ cd /opt/OpenIMSCore
cd /opt/OpenIMSCore
$ mysql -u root -p hss_db < FHoSS/scripts/hss_db.sql
mysql -u root -p hss_db < FHoSS/scripts/hss_db.sql
$ mysql -u root -p hss_db < FHoSS/scripts/userdata.sql
mysql -u root -p hss_db < FHoSS/scripts/userdata.sql
 
Check grants for mysql access rights at first time installation:
Check grants for mysql access rights at first time installation:


$ mysql
$ mysql
# See last line in hss_db.sql:
# See last line in hss_db.sql:
<mysql> grant delete,insert,select,update on hss_db.* to hss@localhost identified by 'hss';
<mysql> grant delete,insert,select,update on hss_db.* to hss@localhost identified by 'hss';
<mysql> grant delete,insert,select,update on hss_db.* to hss@'%' identified by 'hss';
<mysql> grant delete,insert,select,update on hss_db.* to hss@'%' identified by 'hss';
 
Check database if domain names are o.k. in various entries and privileges
Check database if domain names are o.k. in various entries and privileges


$ mysql -u hss -p
  mysql -u hss -p
<mysql> show databases;
<mysql> show databases;
<mysql> use hss_db;
<mysql> use hss_db;
<mysql> select * from impu;
<mysql> select * from impu;
 
Prepare script-file, start HSS
Prepare script-file, start HSS


Copy startup.sh to hss.sh in root directory
Copy startup.sh to hss.sh in root directory


$ cp /opt/OpenIMSCore/FHoSS/deploy/startup.sh /root/hss.sh
cp /opt/OpenIMSCore/FHoSS/deploy/startup.sh /root/hss.sh
 
And, add the following to hss.sh before echo Building Classpath
And, add the following to hss.sh before echo Building Classpath


cd /opt/OpenIMSCore/FHoSS/deploy
cd /opt/OpenIMSCore/FHoSS/deploy
JAVA_HOME="/usr/lib/jvm/jdk1.7.0_79"
JAVA_HOME="/usr/lib/jvm/jdk1.7.0_79"
CLASSPATH="/usr/lib/jvm/jdk1.7.0_79/jre/lib/"
CLASSPATH="/usr/lib/jvm/jdk1.7.0_79/jre/lib/"
 
Start HSS using hss.sh
Start HSS using hss.sh


$ ./hss.sh
./hss.sh
 
Access the web-interface of HSS: http://<IMS_VM_FLOATING_IP>:8080/hss.web.console/
Access the web-interface of HSS: http://<IMS_VM_FLOATING_IP>:8080/hss.web.console/


For example, http://172.24.15.30:8080/hss.web.console/
For example, http://172.24.15.30:8080/hss.web.console/


user:      hssAdmin
user:      hssAdmin
password:  hss
password:  hss
 
Then, edit the /etc/hosts file as follows:
Then, edit the /etc/hosts file as follows:


Line 734: Line 746:
127.0.0.1    localhost
127.0.0.1    localhost
127.0.0.1    epc-ims
127.0.0.1    epc-ims
20. Add IMS subscription use in FoHSS as follows from the Web GUI
 
==Add IMS subscription use in FoHSS as follows from the Web GUI==
 
Assuming IMSI of the user as 001010123456791 and MSISDN is 0198765432100
Assuming IMSI of the user as 001010123456791 and MSISDN is 0198765432100


Login to the HSS web console.
Login to the HSS web console.
Navigate to the User Identities page
Navigate to the User Identities page
Create the IMSU  
Create the IMSU  
Click IMS Subscription / Create
Click IMS Subscription / Create
Enter:
Enter:
Name = 001010123456791
Name = 001010123456791
Capabilities Set = cap_set1
Capabilities Set = cap_set1
Preferred S-CSCF = scsf1
Preferred S-CSCF = scsf1
Click Save
Click Save


Create the IMPI and Associate the IMPI to the IMSU
Create the IMPI and Associate the IMPI to the IMSU
Click Create & Bind new IMPI
Click Create & Bind new IMPI
Enter:
Enter:
Identity = 001010123456791@ims.mnc001.mcc001.3gppnetwork.org
Identity = 001010123456791@ims.mnc001.mcc001.3gppnetwork.org
Secret Key = 8baf473f2f8fd09487cccbd7097c6862 (Ki value as in Open5GS HSS database)
Secret Key = 8baf473f2f8fd09487cccbd7097c6862 (Ki value as in Open5GS HSS database)
Authentication Schemes - All
Authentication Schemes - All
Default = Digest-AKAv1-MD5
Default = Digest-AKAv1-MD5
AMF = 8000 (As in Open5GS HSS database)
AMF = 8000 (As in Open5GS HSS database)
OP = 11111111111111111111111111111111 (As in Open5GS HSS database)
OP = 11111111111111111111111111111111 (As in Open5GS HSS database)
SQN = 000000021090 (SQN value as in Open5GS HSS database)
SQN = 000000021090 (SQN value as in Open5GS HSS database)
Click Save
Click Save


Create and Associate IMPI to IMPU
Create and Associate IMPI to IMPU
Click Create & Bind new IMPU
Click Create & Bind new IMPU
Enter:
Enter:
Identity = sip:001010123456791@ims.mnc001.mcc001.3gppnetwork.org
Identity = sip:001010123456791@ims.mnc001.mcc001.3gppnetwork.org
Barring = Yes
Barring = Yes
Service Profile = default_sp
Service Profile = default_sp
Charging-Info Set = default_charging_set
Charging-Info Set = default_charging_set
IMPU Type = Public_User_Identity
IMPU Type = Public_User_Identity
Click Save
Click Save


Add Visited Network to IMPU
Add Visited Network to IMPU
Enter:
Enter:
Visited Network = ims.mnc001.mcc001.3gppnetwork.org
Visited Network = ims.mnc001.mcc001.3gppnetwork.org
Click Add
Click Add


Now, goto Public User Identity and create further IMPUs as following
Now, goto Public User Identity and create further IMPUs as following
Line 778: Line 792:
1. tel:0198765432100
1. tel:0198765432100


Public User Identity -IMPU-
Public User Identity -IMPU-
Identity = tel:0198765432100
Identity = tel:0198765432100
Service Profile = default_sp
Service Profile = default_sp
Charging-Info Set = default_charging_set
Charging-Info Set = default_charging_set
Can Register = Yes
Can Register = Yes
IMPU Type = Public_User_Identity
IMPU Type = Public_User_Identity
Click Save
Click Save


Add Visited Network to IMPU
Add Visited Network to IMPU
Enter:
 
Visited Network = ims.mnc001.mcc001.3gppnetwork.org
Enter:
Click Add
Visited Network = ims.mnc001.mcc001.3gppnetwork.org
Click Add


Associate IMPI(s) to IMPU
Associate IMPI(s) to IMPU
IMPI Identity = 001010123456791@ims.mnc001.mcc001.3gppnetwork.org
IMPI Identity = 001010123456791@ims.mnc001.mcc001.3gppnetwork.org
Click Add
Click Add


2. sip:0198765432100@ims.mnc001.mcc001.3gppnetwork.org
2. sip:0198765432100@ims.mnc001.mcc001.3gppnetwork.org


Public User Identity -IMPU-
Public User Identity -IMPU-
Identity = sip:0198765432100@ims.mnc001.mcc001.3gppnetwork.org
Identity = sip:0198765432100@ims.mnc001.mcc001.3gppnetwork.org
Service Profile = default_sp
Service Profile = default_sp
Charging-Info Set = default_charging_set
Charging-Info Set = default_charging_set
Can Register = Yes
Can Register = Yes
IMPU Type = Public_User_Identity
IMPU Type = Public_User_Identity
Click Save
Click Save


Add Visited Network to IMPU
Add Visited Network to IMPU
Enter:
Enter:
Visited Network = ims.mnc001.mcc001.3gppnetwork.org
Visited Network = ims.mnc001.mcc001.3gppnetwork.org
Click Add
Click Add


Associate IMPI(s) to IMPU
Associate IMPI(s) to IMPU
IMPI Identity = 001010123456791@ims.mnc001.mcc001.3gppnetwork.org
IMPI Identity = 001010123456791@ims.mnc001.mcc001.3gppnetwork.org
Click Add
Click Add


And, finally add these IMPUs as implicit set of IMSI derived IMPU in HSS i.e sip:001010123456791@ims.mnc001.mcc001.3gppnetwork.org as follows:
And, finally add these IMPUs as implicit set of IMSI derived IMPU in HSS i.e sip:001010123456791@ims.mnc001.mcc001.3gppnetwork.org as follows:


1. Goto to IMPU sip:001010123456791@ims.mnc001.mcc001.3gppnetwork.org
1. Goto to IMPU sip:001010123456791@ims.mnc001.mcc001.3gppnetwork.org
2. In "Add IMPU(s) to Implicit-Set" section give IMPU Identity created above to be added to this IMPU
2. In "Add IMPU(s) to Implicit-Set" section give IMPU Identity created above to be added to this IMPU
21. APN settings
 
==21. APN settings==
 
Clear all previous APN settings
Clear all previous APN settings


Then, create APN as follows:
Then, create APN as follows:


First create internet APN, APN name: internet, APN type: default –> Save APN
First create internet APN, APN name: internet, APN type: default –> Save APN
Then, create ims APN, APN name: ims, APN type: ims –> Save APN
Then, create ims APN, APN name: ims, APN type: ims –> Save APN
22. eNB settings
 
==22. eNB settings==
 
Must have in the eNB:
Must have in the eNB:


Support for QoS
==Support for QoS==
 
Support for Dedicated radio bearer creation
Support for Dedicated radio bearer creation
Make sure to check the DRB configuration with respect to QCI of APN accordingly (QCI 5 for ims)
Make sure to check the DRB configuration with respect to QCI of APN accordingly (QCI 5 for ims)
On the eNB machine have the following static routes (since internal IP of the VM is advertised in S1AP messages and UE wont find the core in Uplink)
On the eNB machine have the following static routes (since internal IP of the VM is advertised in S1AP messages and UE wont find the core in Uplink)


$ ip r add 10.4.128.21/32 via 172.24.15.30
ip r add 10.4.128.21/32 via 172.24.15.30
23. USIM and UE settings
 
Make sure to disable SQN check in Sysmocom SIM cards using sysmo-usim-tool tool https://github.com/herlesupreeth/sysmo-usim-tool
==USIM and UE settings==
 
Make sure to disable SQN check in Sysmocom SIM cards using sysmo-usim-tool tool  
 
https://github.com/herlesupreeth/sysmo-usim-tool
 
Tested with OnePlus 5 with following methods (Official Google method is the recommended method to prevent damage to phone)
Tested with OnePlus 5 with following methods (Official Google method is the recommended method to prevent damage to phone)
(Official Google method) - Please follow the instructions in the following link @herlesupreeth/CoIMS_Wiki to force enable VoLTE using Carrier Privileges
 
(Risky method) With modfication to enable force IMS registration is a must or else UE will not even attempt to connect to P-CSCF. Need to apply the fix back after each update. https://forum.xda-developers.com/oneplus-5t/how-to/guide-volte-vowifi-german-carriers-t3817542
* (Official Google method) - Please follow the instructions in the following link @herlesupreeth/CoIMS_Wiki to force enable VoLTE using Carrier Privileges
24. Start IMS components and FoHSS followed by Open5GS and eNB, then try connecting the phones
* (Risky method) With modfication to enable force IMS registration is a must or else UE will not even attempt to connect to P-CSCF. Need to apply the fix back after each update. https://forum.xda-developers.com/oneplus-5t/how-to/guide-volte-vowifi-german-carriers-t3817542
25. Test voice call
 
==24. Start IMS components and FoHSS followed by Open5GS and eNB, then try connecting the phones==
 
==25. Test voice call==
Assuming IMSI of the user1 as 001010123456791 and MSISDN is 0198765432100 and IMSI of the user2 as 001010123456792 and MSISDN is 0298765432100. Try calling user2 from user1 by dialing its MSISDN ie. 0298765432100
Assuming IMSI of the user1 as 001010123456791 and MSISDN is 0198765432100 and IMSI of the user2 as 001010123456792 and MSISDN is 0298765432100. Try calling user2 from user1 by dialing its MSISDN ie. 0298765432100


You can see the sample traffic. – [volte.pcapng].
You can see the sample traffic. – [volte.pcapng].
26. For debugging
 
==26. For debugging==
 
Debug using wireshark at Open5GS machine and following wireshark display filter
Debug using wireshark at Open5GS machine and following wireshark display filter


s1ap || gtpv2 || pfcp || diameter || diameter.3gpp || sip
s1ap || gtpv2 || pfcp || diameter || diameter.3gpp || sip
 
Also,
Also,


Debugging Diameter messages between PCRF and P-CSCF in Wireshark if the TCP/SCTP port other than 3868
Debugging Diameter messages between PCRF and P-CSCF in Wireshark if the TCP/SCTP port other than 3868


Open Wireshark –> Preferences –> Protocols –> Diameter –> Change to whatever ports are being used
Open Wireshark –> Preferences –> Protocols –> Diameter –> Change to whatever ports are being used


==Referensi==
==Referensi==

Revision as of 00:41, 12 August 2023

Sumber: https://open5gs.org/open5gs/docs/tutorial/02-VoLTE-setup/


Asumsi Konfigurasi

  • OS Ubuntu 22.04
  • Open5GS & IMS satu mesin
  • Satu Interface enp0s3
  • IP Statik enp0s3 192.168.0.5/24 gateway 192.168.0.222
  • IP Statik ogstun 10.45.0.1/16 & 2001:db8:cafe::1/48
  • Domain mnc070.mcc999.3gppnetwork.org
  • APN internet
  • MCC 999 MNC 70

Install aplikasi pendukung ubuntu 22.04

apt update
apt upgrade -y
apt install -y mysql-server tcpdump screen ntp ntpdate git dkms gcc flex bison \
libmysqlclient-dev make libssl-dev libcurl4-openssl-dev libxml2-dev \
libpcre3-dev bash-completion g++ autoconf rtpproxy libmnl-dev libsctp-dev strongswan \
libradcli-dev libradcli4 python3-dev


Install MySQL mariadb

apt update
apt upgrade
apt -y install mariadb-server

Install Kamailio

Referensi: https://computingforgeeks.com/how-to-install-kamailio-sip-server-on-ubuntu/?expand_article=1

sudo apt -y install kamailio kamailio-mysql-modules kamailio-ims-modules kamailio-outbound-modules kamailio-presence-modules kamailio-xml-modules kamailio-tls-modules kamailio-utils-modules kamailio-sctp-modules kamailio-xmpp-modules

Edit kamctlrc

sudo vi /etc/kamailio/kamctlrc
DBENGINE=MYSQL
DBHOST=localhost

Restart

sudo systemctl restart kamailio
sudo systemctl enable kamailio
sudo systemctl status kamailio

Beberapa hal yang penting dari Kamailio. File binary dan script ada di,

/usr/sbin

Beberapa file binary penting,

kamailio - Kamailio SIP server
kamdbctl - script to create and manage the Databases
kamctl - script to manage and control Kamailio SIP server
kamcmd - CLI - command line tool to interface with Kamailio SIP server

Kamailio module di

/usr/lib/x86_64-linux-gnu/kamailio/modules

Kamailio documentation di

/usr/share/doc/kamailio

Kamailio konfigurasi

/etc/kamailio/

Setup MySQL database dengan kamctlrc

Set nilai SIP_DOMAIN dan DBENGINE. Edit kamctlrc

vi /etc/kamailio/kamctlrc

Cek IP address server anda, pastikan isi kamctlrc

SIP_DOMAIN=ims.mnc070.mcc999.3gppnetwork.org
SIP_DOMAIN=192.168.0.5     # jika tidak ada DNS server / BIND
DBENGINE=MYSQL

Run,

kamdbctl create

Masukan password, dan ketik

<ENTER>
utf32
y <ENTER>
y <ENTER>
y <ENTER>


Cek database,

mysql
SHOW databases;
USE kamailio;
SHOW tables;
SELECT * FROM subscriber;
QUIT

kamdbctl akan menambahkan dua user di MySQL username:password

kamailio:kamailiorw   - user untuk full access ke database kamailio
kamailioro:kamailioro - user untuk read-only ke database kamailio

Edit rtpproxy

Edit konfigurasi rtpproxy

vi /etc/default/rtpproxy

Ubah menjadi,

# Defaults for rtpproxy

# The control socket.
#CONTROL_SOCK="unix:/var/run/rtpproxy/rtpproxy.sock"
# To listen on an UDP socket, uncomment this line:
#CONTROL_SOCK=udp:127.0.0.1:22222
CONTROL_SOCK=udp:127.0.0.1:7722

# Additional options that are passed to the daemon.
# EXTRA_OPTS=""
# EXTRA_OPTS="-l 172.24.15.30 -d DBUG:LOG_LOCAL0"
EXTRA_OPTS="-l 192.168.0.5 -d DBUG:LOG_LOCAL0"

Dimana, -l <PUBLIC_IP> tergantung jaringan kita misalnya kita hanya beroperasi di LAN bisa menjadi 192.168.0.5

Restart,

systemctl restart rtpproxy
systemctl enable rtpproxy
systemctl status rtpproxy

Edit file konfigurasi untuk VoIP platform

Edit file

vi /etc/kamailio/kamailio.cfg

Cek IP address server. Masukan parameter ini ke file konfigurasi kamailio.cfg. Contoh

#!define WITH_MYSQL
#!define WITH_AUTH
#!define WITH_USRLOCDB
#!define WITH_NAT

(uncomment line ini)
auto_aliases=no

(uncomment line dan masuk hostname)
alias="ims.mnc070.mcc999.3gppnetwork.org"

(uncomment line, IP internal 10.4.128.21 and IP public 172.24.15.30)
listen=udp:10.4.128.21:5060 advertise 172.24.15.30:5060
listen=tcp:10.4.128.21:5060 advertise 172.24.15.30:5060

Contoh untuk IP server 192.168.0.5,

#!define WITH_MYSQL
#!define WITH_AUTH
#!define WITH_USRLOCDB
#!define WITH_NAT

/* uncomment the next line to disable the auto discovery of local aliases
 * based on reverse DNS on IPs (default on) */
auto_aliases=no

/* add local domain aliases - it can be set many times */
alias="ims.mnc070.mcc999.3gppnetwork.org"
alias="192.168.0.5"

/* listen sockets - if none set, Kamailio binds to all local IP addresses
 * - basic prototype (full prototype can be found in Wiki - Core Cookbook):
 *      listen=[proto]:[localip]:[lport] advertise [publicip]:[pport]
 * - it can be set many times to add more sockets to listen to */
listen=udp:192.168.0.5:5060
listen=udp:10.45.0.1:5060

Kita perlu memodifikasi rtpproxy_sock agar cocok CONTROL_SOCK di RTPProxy /etc/default/rtpproxy

modparam("rtpproxy", "rtpproxy_sock", "udp:127.0.0.1:7722")

Jika password user ‘kamailio’ untuk MySQL diubah, kita perlu update nilai ‘DBURL’ parameter.

Cek,

systemctl restart kamailio
systemctl status kamailio
kamcmd rtpproxy.list

init.d Kamailio

Edit

vi /etc/default/kamailio

Pastikan,

RUN_KAMAILIO=yes

Create the directory for pid file:

mkdir -p /var/run/kamailio

Restart kamailio,

systemctl daemon-reload
systemctl start kamailio.service
systemctl restart kamailio.service
systemctl enable kamailio.service
systemctl status kamailio.service

Cek kamailio yang running,

ps ax |grep kamailio

Cek SIP server

Buat subsciber account menggunakan

kamctl add <username> <password>

Jika di tanya MySQL password, gunakan password kamailio@localhost: type kamailiorw seperti kamailio.cfg

kamctl add test testpasswd
kamctl add test2 testpasswd

Setting SIP Phone,

username
password
server
outbound proxy server
transport type: UDP

Buat mysql database untuk pcscf, scscf and icscf

Download source code kamailio

sudo su
mkdir -p /usr/local/src/
cd /usr/local/src/
git clone https://github.com/herlesupreeth/kamailio
cd kamailio
git checkout -b 5.7 origin/5.7

Create database,

mysql
DROP DATABASE pcscf;
DROP DATABASE scscf;
DROP DATABASE icscf;

CREATE DATABASE pcscf;
CREATE DATABASE scscf;
CREATE DATABASE icscf;
QUIT


Lakukan perintah di bawah, jika di tanya mysql root user tekan ENTER.

cd /usr/local/src/kamailio/utils/kamctl/mysql
mysql -u root -p pcscf < standard-create.sql
mysql -u root -p pcscf < presence-create.sql
mysql -u root -p pcscf < ims_usrloc_pcscf-create.sql
mysql -u root -p pcscf < ims_dialog-create.sql

mysql -u root -p scscf < standard-create.sql
mysql -u root -p scscf < presence-create.sql
mysql -u root -p scscf < ims_usrloc_scscf-create.sql
mysql -u root -p scscf < ims_dialog-create.sql
mysql -u root -p scscf < ims_charging-create.sql

cd /usr/local/src/kamailio/misc/examples/ims/icscf
mysql -u root -p icscf < icscf.sql

Verify that following tables are present in respective databases by logging into mysql

mysql
USE pcscf;
SHOW tables;
 +-----------------+
 | Tables_in_pcscf |
 +-----------------+
 | active_watchers |
 | dialog_in       |
 | dialog_out      |
 | dialog_vars     |
 | location        |
 | presentity      |
 | pua             |
 | version         |
 | watchers        |
 | xcap            |
 +-----------------+


USE scscf;
SHOW tables;

 +-----------------+
 | Tables_in_scscf |
 +-----------------+
 | active_watchers |
 | contact         |
 | dialog_in       |
 | dialog_out      |
 | dialog_vars     |
 | impu            |
 | impu_contact    |
 | impu_subscriber |
 | presentity      |
 | pua             |
 | ro_session      |
 | subscriber      |
 | version         |
 | watchers        |
 | xcap            |
 +-----------------+
USE icscf;
SHOW tables;

 +---------------------+
 | Tables_in_icscf     |
 +---------------------+
 | nds_trusted_domains |
 | s_cscf              |
 | s_cscf_capabilities |
 +---------------------+
grant delete,insert,select,update on pcscf.* to pcscf@localhost identified by 'heslo';
grant delete,insert,select,update on scscf.* to scscf@localhost identified by 'heslo';
grant delete,insert,select,update on icscf.* to icscf@localhost identified by 'heslo';
grant delete,insert,select,update on icscf.* to provisioning@localhost identified by 'provi';
GRANT ALL PRIVILEGES ON pcscf.* TO 'pcscf'@'%' identified by 'heslo';
GRANT ALL PRIVILEGES ON scscf.* TO 'scscf'@'%' identified by 'heslo';
GRANT ALL PRIVILEGES ON icscf.* TO 'icscf'@'%' identified by 'heslo';
GRANT ALL PRIVILEGES ON icscf.* TO 'provisioning'@'%' identified by 'provi';
FLUSH PRIVILEGES;
QUIT

Selanjutnya (butuh setup DNS / BIND yang benar),

mysql
USE icscf;
INSERT INTO `nds_trusted_domains` VALUES (1,'ims.mnc070.mcc999.3gppnetwork.org');
INSERT INTO `s_cscf` VALUES (1,'First and only S-CSCF','sip:scscf.ims.mnc070.mcc999.3gppnetwork.org:6060');
INSERT INTO `s_cscf_capabilities` VALUES (1,1,0),(2,1,1);
QUIT


alternatif (jika DNS belum beres, gunakan IP address),

mysql

USE icscf;
INSERT INTO nds_trusted_domains VALUES (1,'192.168.0.5');
INSERT INTO s_cscf VALUES (1,'First and only S-CSCF','sip:192.168.0.5:6060');
INSERT INTO s_cscf_capabilities VALUES (1,1,0),(2,1,1);
QUIT

Copy file konfigurasi pcscf, icscf & scscf ke folder /etc dan edit

Copy konfigurasi

cd /usr/local/src/ && git clone https://github.com/herlesupreeth/Kamailio_IMS_Config
cd Kamailio_IMS_Config
cp -r kamailio_icscf /etc
cp -r kamailio_pcscf /etc
cp -r kamailio_scscf /etc

Edit supaya Domain mnc070.mcc999.3gppnetwork.org

vi /etc/kamailio_icscf/icscf.cfg
# SIP / UDP
listen=udp:10.45.0.1:4060
#listen=udp:10.4.128.21:4060 advertise 172.24.15.30:4060
# SIP / TCP
listen=tcp:10.45.0.1:4060
#listen=tcp:10.4.128.21:4060 advertise 172.24.15.30:4060
# SIP / TCP/TLS
#listen=tls:11.22.33.44:4061
alias=ims.mnc070.mcc999.3gppnetwork.org
#!define NETWORKNAME "ims.mnc070.mcc999.3gppnetwork.org"
#!define HOSTNAME "icscf.ims.mnc070.mcc999.3gppnetwork.org"
#!subst "/NETWORKNAME/ims.mnc070.mcc999.3gppnetwork.org/"
#!subst "/HSS_REALM/ims.mnc070.mcc999.3gppnetwork.org/"
#!define ENUM_SUFFIX "ims.mnc070.mcc999.3gppnetwork.org."


vi /etc/kamailio_pcscf/
vi /etc/kamailio_pcscf/dispatcher.list
vi /etc/kamailio_pcscf/kamailio_pcscf.cfg
vi /etc/kamailio_pcscf/pcscf.cfg
vi /etc/kamailio_pcscf/pcscf.xml
vi /etc/kamailio_pcscf/route
vi /etc/kamailio_pcscf/sems
vi /etc/kamailio_pcscf/tls.cfg


vi /etc/kamailio_scscf/
vi /etc/kamailio_scscf/CxDataType_Rel6.xsd
vi /etc/kamailio_scscf/CxDataType_Rel7.xsd
vi /etc/kamailio_scscf/CxDataType_Rel8.xsd
vi /etc/kamailio_scscf/dispatcher.list
vi /etc/kamailio_scscf/kamailio_scscf.cfg
vi /etc/kamailio_scscf/scscf.cfg
vi /etc/kamailio_scscf/scscf.xml

Running I-CSCF, P-CSCF and S-CSCF as separate process

First, stop the default kamailio SIP server

systemctl stop kamailio
systemctl disable kamailio
systemctl mask kamailio

Run all the process as root and NOT sudo

mkdir -p /var/run/kamailio_pcscf
kamailio -f /etc/kamailio_pcscf/kamailio_pcscf.cfg -P /kamailio_pcscf.pid -DD -E -e
mkdir -p /var/run/kamailio_scscf
kamailio -f /etc/kamailio_scscf/kamailio_scscf.cfg -P /kamailio_scscf.pid -DD -E -e
mkdir -p /var/run/kamailio_icscf
kamailio -f /etc/kamailio_icscf/kamailio_icscf.cfg -P /kamailio_icscf.pid -DD -E -e

Install Open5GS di mesin yang sama dengan Kamailio IMS

Please refer to instructions at https://open5gs.org/open5gs/docs/guide/02-building-open5gs-from-sources/

Instal Open5GS dan Kamailio IMS pada mesin yang sama menjadi penting karena Framed-IP-Address di AAR request via Rx interface akan mengambil received IP address dan port di ims_qos module, oleh karenanya, jika Open5GS berbeda VM/mesin, akan di NAT sehingga kemungkian AAR request akan gagal.


Modify below mentioned parts of configuration files in addition to Configure Open5GS section. For reference, look at the configuration files at https://github.com/herlesupreeth/Open5gs_Config. These configuration only holds for open5gs tag v1.3.0, please tweak configuration files based on the open5gs tag you use.

  • Change realm of components to epc.mnc001.mcc001.3gppnetwork.org
  • Define IP pools for APNs used i.e one for default APN and another for IMS apn
  • Define P-CSCF address in the pgw configuration
  • Define a ConnectPeer for pcscf.ims.mnc001.mcc001.3gppnetwork.org with its IP and port in PCRF freediameter configuration
  • Setup IP tables for the UE pools defined and create appropriate tun interfaces

Below startup script can be used for setting up interfaces:

#!/bin/bash

sudo sysctl -w net.ipv4.ip_forward=1
sudo sysctl -w net.ipv6.conf.all.forwarding=1

ip tuntap add name ogstun mode tun
ip addr add 192.168.100.1/24 dev ogstun
ip addr add fd84:6aea:c36e:2b69::/48 dev ogstun
ip link set ogstun mtu 1400
ip link set ogstun up
iptables -t nat -A POSTROUTING -s 192.168.100.0/24 ! -o ogstun -j MASQUERADE
ip6tables -t nat -A POSTROUTING -s fd84:6aea:c36e:2b69::/48 ! -o ogstun -j MASQUERADE
iptables -I INPUT -i ogstun -j ACCEPT
ip6tables -I INPUT -i ogstun -j ACCEPT

ip tuntap add name ogstun2 mode tun
ip addr add 192.168.101.1/24 dev ogstun2
ip addr add fd1f:76f3:da9b:0101::/48 dev ogstun2
ip link set ogstun2 mtu 1400
ip link set ogstun2 up
iptables -t nat -A POSTROUTING -s 192.168.101.0/24 ! -o ogstun2 -j MASQUERADE
ip6tables -t nat -A POSTROUTING -s fd1f:76f3:da9b:0101::/48 ! -o ogstun2 -j MASQUERADE
iptables -I INPUT -i ogstun2 -j ACCEPT
ip6tables -I INPUT -i ogstun2 -j ACCEPT

ufw disable

Add users with following APN settings in Open5GS:

APN Configuration:

---------------------------------------------------------------------------------------------------------------------
| APN      | Type | QCI | ARP | Capability | Vulnerablility | MBR DL/UL(Kbps)     | GBR DL/UL(Kbps) | PGW IP        |
---------------------------------------------------------------------------------------------------------------------
| internet | IPv4 | 9   | 8   | Disabled   | Disabled       | unlimited/unlimited |                 |               
|
---------------------------------------------------------------------------------------------------------------------
| ims      | IPv4 | 5   | 1   | Disabled   | Disabled       | 3850/1530           |                 |               
|
|          |      | 1   | 2   | Enabled    | Enabled        | 128/128             | 128/128         |               
|
|          |      | 2   | 4   | Enabled    | Enabled        | 128/128             | 128/128         |               
|
---------------------------------------------------------------------------------------------------------------------

Finally, make sure of the following in Open5GS

PCO options which indicate the address of the Proxy-CSCF Need to indicate support for Voice-over-Packet-Switched (VoPS) in NAS message to UE from EPC 19. Setup FoHSS in order to talk with I-CSCF and S-CSCF Requirements for FoHSS: Install Java JDK and ant

Download Oracle Java 7 JDK from following link using a browser:

https://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html
$ mkdir -p  /usr/lib/jvm/
$ tar -zxf jdk-7u79-linux-x64.tar.gz -C /usr/lib/jvm/
$ update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.7.0_79/bin/java 100
$ update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.7.0_79/bin/javac 100

Verify that java has been successfully configured by running:

$ update-alternatives --display java
java - auto mode
  link best version is /usr/lib/jvm/jdk1.7.0_79/bin/java
  link currently points to /usr/lib/jvm/jdk1.7.0_79/bin/java
  link java is /usr/bin/java
/usr/lib/jvm/jdk1.7.0_79/bin/java - priority 100
$ update-alternatives --display javac
javac - auto mode
  link best version is /usr/lib/jvm/jdk1.7.0_79/bin/javac
  link currently points to /usr/lib/jvm/jdk1.7.0_79/bin/javac
  link javac is /usr/bin/javac
/usr/lib/jvm/jdk1.7.0_79/bin/javac - priority 100
$ update-alternatives --config java
(select java jdk1.7.0_79)
$ update-alternatives --config javac

Check java version

$ java -version
java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)

Install Ant

cd ~
wget http://archive.apache.org/dist/ant/binaries/apache-ant-1.9.14-bin.tar.gz
tar xvfvz apache-ant-1.9.14-bin.tar.gz
mv apache-ant-1.9.14 /usr/local/
sh -c 'echo ANT_HOME=/usr/local/  >> /etc/environment'
ln -s /usr/local/apache-ant-1.9.14/bin/ant /usr/bin/ant

Verfiy ant version as follows:

ant -version
Apache Ant(TM) version 1.9.14 compiled on March 12 2019

Create working directories for OpenIMSCore:

mkdir /opt/OpenIMSCore
cd /opt/OpenIMSCore

Download:

git clone https://github.com/herlesupreeth/FHoSS

Compile:

cd FHoSS
export JAVA_HOME="/usr/lib/jvm/jdk1.7.0_79"
export CLASSPATH="/usr/lib/jvm/jdk1.7.0_79/jre/lib/"
ant compile deploy | tee ant_compile_deploy.txt

Create configurator.sh using below script to change domain names and IP address in all configuration files

cd deploy
vim configurator.sh
#!/bin/bash

# Initialization & global vars
# if you execute this script for the second time
# you should change these variables to the latest
# domain name and ip address
DDOMAIN="open-ims\.test"
DSDOMAIN="open-ims\\\.test"
DEFAULTIP="127\.0\.0\.1"
CONFFILES=`ls *.cfg *.xml *.sql *.properties 2>/dev/null`

# Interaction
printf "Domain Name:"
read domainname 
printf "IP Adress:"
read ip_address

# input domain is to be slashed for cfg regexes 
slasheddomain=`echo $domainname | sed 's/\./\\\\\\\\\./g'`

  if [ $# != 0 ] 
  then 
  printf "changing: "
      for j in $* 
      do
    sed -i -e "s/$DDOMAIN/$domainname/g" $j
    sed -i -e "s/$DSDOMAIN/$slasheddomain/g" $j
    sed -i -e "s/$DEFAULTIP/$ip_address/g" $j
    printf "$j " 
      done
  echo 
  else 
  printf "File to change [\"all\" for everything, \"exit\" to quit]:"
  # loop
      while read filename ;
      do
        if [ "$filename" = "exit" ] 
        then 
        printf "exitting...\n"
        break ;

      elif [ "$filename" = "all" ]
      then    
          printf "changing: "
         for i in $CONFFILES 
         do
        sed -i -e "s/$DDOMAIN/$domainname/g" $i
        sed -i -e "s/$DSDOMAIN/$slasheddomain/g" $i
        sed -i -e "s/$DEFAULTIP/$ip_address/g" $i
        
        printf "$i " 
         done 
         echo 
         break; 

        elif [ -w $filename ] 
        then
            printf "changing $filename \n"
            sed -i -e "s/$DDOMAIN/$domainname/g" $filename
            sed -i -e "s/$DSDOMAIN/$slasheddomain/g" $filename
            sed -i -e "s/$DEFAULTIP/$ip_address/g" $filename 

          else 
          printf "cannot access file $filename. skipping... \n" 
        fi
        printf "File to Change:"
      done 
  fi
chmod +x configurator.sh
./configurator.sh 
Domain Name:ims.mnc001.mcc001.3gppnetwork.org
IP Adress:10.4.128.21
grep -r "open-ims"

(Change realm name in the below file from open-ims.test to ims.mnc001.mcc001.3gppnetwork.org)

vim webapps/hss.web.console/WEB-INF/web.xml
vim hibernate.properties

And, change the following line:

hibernate.connection.url=jdbc:mysql://127.0.0.1:3306/hss_db

cp configurator.sh ../scripts/
cd ../scripts
grep -r "open-ims"
./configurator.sh 

Domain Name:ims.mnc001.mcc001.3gppnetwork.org IP Adress:10.4.128.21

cp configurator.sh ../config/
cd ../config
./configurator.sh 

Domain Name:ims.mnc001.mcc001.3gppnetwork.org IP Adress:10.4.128.21

cd ../src-web
vim WEB-INF/web.xml

And, change open-ims.test to ims.mnc001.mcc001.3gppnetwork.org

Prepare mysql database:

mysql
<mysql> drop database hss_db;
<mysql> create database hss_db;
<mysql> quit

Import database located at /opt/OpenIMSCore into hss_db

cd /opt/OpenIMSCore
mysql -u root -p hss_db < FHoSS/scripts/hss_db.sql
mysql -u root -p hss_db < FHoSS/scripts/userdata.sql

Check grants for mysql access rights at first time installation:

$ mysql
# See last line in hss_db.sql:
<mysql> grant delete,insert,select,update on hss_db.* to hss@localhost identified by 'hss';
<mysql> grant delete,insert,select,update on hss_db.* to hss@'%' identified by 'hss';

Check database if domain names are o.k. in various entries and privileges

 mysql -u hss -p
<mysql> show databases;
<mysql> use hss_db;
<mysql> select * from impu;

Prepare script-file, start HSS

Copy startup.sh to hss.sh in root directory

cp /opt/OpenIMSCore/FHoSS/deploy/startup.sh /root/hss.sh

And, add the following to hss.sh before echo Building Classpath

cd /opt/OpenIMSCore/FHoSS/deploy
JAVA_HOME="/usr/lib/jvm/jdk1.7.0_79"
CLASSPATH="/usr/lib/jvm/jdk1.7.0_79/jre/lib/"

Start HSS using hss.sh

./hss.sh

Access the web-interface of HSS: http://<IMS_VM_FLOATING_IP>:8080/hss.web.console/

For example, http://172.24.15.30:8080/hss.web.console/

user:      hssAdmin
password:  hss

Then, edit the /etc/hosts file as follows:

In the below example. epc-ims is the hostname of the machine

root@epc-ims:~# cat /etc/hosts 127.0.0.1 localhost 127.0.0.1 epc-ims

Add IMS subscription use in FoHSS as follows from the Web GUI

Assuming IMSI of the user as 001010123456791 and MSISDN is 0198765432100

Login to the HSS web console.
Navigate to the User Identities page
Create the IMSU 
Click IMS Subscription / Create
Enter:
Name = 001010123456791
Capabilities Set = cap_set1
Preferred S-CSCF = scsf1
Click Save
Create the IMPI and Associate the IMPI to the IMSU
Click Create & Bind new IMPI
Enter:
Identity = 001010123456791@ims.mnc001.mcc001.3gppnetwork.org
Secret Key = 8baf473f2f8fd09487cccbd7097c6862 (Ki value as in Open5GS HSS database)
Authentication Schemes - All
Default = Digest-AKAv1-MD5
AMF = 8000 (As in Open5GS HSS database)
OP = 11111111111111111111111111111111 (As in Open5GS HSS database)
SQN = 000000021090 (SQN value as in Open5GS HSS database)
Click Save
Create and Associate IMPI to IMPU
Click Create & Bind new IMPU
Enter:
Identity = sip:001010123456791@ims.mnc001.mcc001.3gppnetwork.org
Barring = Yes
Service Profile = default_sp
Charging-Info Set = default_charging_set
IMPU Type = Public_User_Identity
Click Save
Add Visited Network to IMPU
Enter:
Visited Network = ims.mnc001.mcc001.3gppnetwork.org
Click Add

Now, goto Public User Identity and create further IMPUs as following

1. tel:0198765432100

Public User Identity -IMPU-
Identity = tel:0198765432100
Service Profile = default_sp
Charging-Info Set = default_charging_set
Can Register = Yes
IMPU Type = Public_User_Identity
Click Save

Add Visited Network to IMPU

Enter:
Visited Network = ims.mnc001.mcc001.3gppnetwork.org
Click Add

Associate IMPI(s) to IMPU

IMPI Identity = 001010123456791@ims.mnc001.mcc001.3gppnetwork.org
Click Add

2. sip:0198765432100@ims.mnc001.mcc001.3gppnetwork.org

Public User Identity -IMPU-
Identity = sip:0198765432100@ims.mnc001.mcc001.3gppnetwork.org
Service Profile = default_sp
Charging-Info Set = default_charging_set
Can Register = Yes
IMPU Type = Public_User_Identity
Click Save

Add Visited Network to IMPU

Enter:
Visited Network = ims.mnc001.mcc001.3gppnetwork.org
Click Add

Associate IMPI(s) to IMPU

IMPI Identity = 001010123456791@ims.mnc001.mcc001.3gppnetwork.org
Click Add

And, finally add these IMPUs as implicit set of IMSI derived IMPU in HSS i.e sip:001010123456791@ims.mnc001.mcc001.3gppnetwork.org as follows:

1. Goto to IMPU sip:001010123456791@ims.mnc001.mcc001.3gppnetwork.org
2. In "Add IMPU(s) to Implicit-Set" section give IMPU Identity created above to be added to this IMPU

21. APN settings

Clear all previous APN settings

Then, create APN as follows:

First create internet APN, APN name: internet, APN type: default –> Save APN
Then, create ims APN, APN name: ims, APN type: ims –> Save APN

22. eNB settings

Must have in the eNB:

Support for QoS

Support for Dedicated radio bearer creation Make sure to check the DRB configuration with respect to QCI of APN accordingly (QCI 5 for ims) On the eNB machine have the following static routes (since internal IP of the VM is advertised in S1AP messages and UE wont find the core in Uplink)

ip r add 10.4.128.21/32 via 172.24.15.30

USIM and UE settings

Make sure to disable SQN check in Sysmocom SIM cards using sysmo-usim-tool tool

https://github.com/herlesupreeth/sysmo-usim-tool

Tested with OnePlus 5 with following methods (Official Google method is the recommended method to prevent damage to phone)

24. Start IMS components and FoHSS followed by Open5GS and eNB, then try connecting the phones

25. Test voice call

Assuming IMSI of the user1 as 001010123456791 and MSISDN is 0198765432100 and IMSI of the user2 as 001010123456792 and MSISDN is 0298765432100. Try calling user2 from user1 by dialing its MSISDN ie. 0298765432100

You can see the sample traffic. – [volte.pcapng].

26. For debugging

Debug using wireshark at Open5GS machine and following wireshark display filter

s1ap || gtpv2 || pfcp || diameter || diameter.3gpp || sip

Also,

Debugging Diameter messages between PCRF and P-CSCF in Wireshark if the TCP/SCTP port other than 3868

Open Wireshark –> Preferences –> Protocols –> Diameter –> Change to whatever ports are being used

Referensi


Pranala Menarik