Difference between revisions of "Open5gs: IMS Install Ubuntu 22.04"
Onnowpurbo (talk | contribs) |
Onnowpurbo (talk | contribs) |
||
Line 552: | Line 552: | ||
==Install Ant== | ==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: | Verfiy ant version as follows: | ||
− | + | 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 | |
− | + | cd /opt/OpenIMSCore | |
Download: | Download: | ||
− | + | git clone https://github.com/herlesupreeth/FHoSS | |
Compile: | 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 | Create configurator.sh using below script to change domain names and IP address in all configuration files | ||
− | + | cd deploy | |
− | + | vim configurator.sh | |
#!/bin/bash | #!/bin/bash | ||
Line 655: | Line 655: | ||
fi | fi | ||
− | + | chmod +x 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" | |
(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 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/ | |
− | + | cd ../scripts | |
− | + | grep -r "open-ims" | |
− | + | ./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/ | |
− | + | cd ../config | |
− | + | ./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 | |
− | + | 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> 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 | |
− | + | 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: | 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> 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 | |
+ | |||
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 | |
+ | |||
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 | ||
− | + | ||
+ | ==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 | |
− | + | ||
− | 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 07: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
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)
- (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
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