Ipsec Support and Volte Components Updates: by Aleksandar Yosifov
Ipsec Support and Volte Components Updates: by Aleksandar Yosifov
VoLTE Components
Updates
by Aleksandar Yosifov
About Me
C/C++ developer since 2005
Previous experience
Parking & Access control systems
Gambling industry
Current – Telecom industry since 2013
Leading Core Network team since March 2019
Integrating VoLTE using Kamailio SIP server
Myself
VoIP engineer
QA/Telecom engineer
New features
IPSec supported algorithms:
Sha1(default) and md5 - parsed from
REGISTER msg
Encapsulating Security Payload
IPv6
Improvements in ims_registrar/usrloc_pcscf
modules
TCP support
IPv4 and/or IPv6 listen interfaces
4 SAs and policies
New features
Extended P-CSCF location table
New match key – received_port column – because of Re-Registration
New columns – port_pc, port_ps, t_port_pc, t_port_ps
Improvements
S-CSCF
ipsec_create()
IPSEC_CREATE_DELETE_UNUSED_TUNNELS(0x01) - delete unused tunnels before each
registration – is a must to be used when contact aliases are disabled.
onreply_route[REGISTER_reply]
if (t_check_status("401")) { ipsec_create("location","1") }
IPSec in Kamailio IMS deployments
Exclude contact alias
kamailio.cfg
route {
...
} else {
force_rport();
#!ifdef WITH_CONTACT_ALIAS
if(is_method("INVITE|SUBSCRIBE|UPDATE|REGISTER")) {
add_contact_alias();
}
#!endif
...
}
...
# Handle requests within SIP dialogs
route[WITHINDLG] {
if (has_totag()) {
#!ifdef WITH_CONTACT_ALIAS
if(!isdsturiset()) {
handle_ruri_alias();
}
#!endif
...
IPSec in Kamailio IMS deployments
76 route[NATMANAGE] {
Exclude contact alias ...
if ((is_reply() && ($T_req($tt) != $null)) || (is_request() && has_totag())) {
rtp.cfg if(!check_route_param("rm=") && !isflagset(FLT_RTP)) {
return;
}
#!ifdef WITH_CONTACT_ALIAS
if (is_request()) {
if (isflagset(FLT_MOBILE_ORIG) && is_direction("downstream")) {
add_contact_alias();
} else if (!isflagset(FLT_MOBILE_ORIG) && is_direction("upstream")) {
add_contact_alias();
}
} else {
if (!isflagset(FLT_MOBILE_ORIG) && is_direction("downstream")) {
add_contact_alias();
} else if (isflagset(FLT_MOBILE_ORIG) && is_direction("upstream")) {
add_contact_alias();
}
}
#!endif
}
#!ifdef WITH_CONTACT_ALIAS
else {
if (is_reply() && !isflagset(FLT_MOBILE_ORIG)) {
add_contact_alias();
}
}
#!endif
...
IPSec with TCP and 2 connections
Q&A