
Deploying an IP Multimedia Subsystem (IMS) and mobile core network using open source solutions can be complex, with challenges ranging from configuring dependencies to resolving registration issues. In this post, I’ll share my experience setting up Kamailio IMS with Open5GS for VoLTE testing, the obstacles encountered, and how they were resolved.
Setting up open source IMS
My task was to deploy an IMS solution and integrate it with our vendor’s Evolved Packet Core (EPC) to enable VoLTE. After evaluating available options, I chose Kamailio IMS due to its extensive Session Initiation Protocol (SIP) support and open source flexibility.
The deployment involved configuring essential network components. A DNS server (Bind9) handled domain resolution for IMS services, while RTPEngine managed RTP media streams for VoLTE calls. MySQL was used for storing subscriber data, authentication credentials, and routing policies. The IMS framework consisted of three core SIP servers: Proxy-Call Session Control Function (P-CSCF), which controlled SIP security, registration, and QoS enforcement, Interrogating-Call Session Control Function (I-CSCF), which routed SIP requests based on Home Subscriber Server (HSS) queries and enabled inter-domain communication, and Serving-Call Session Control Function (S-CSCF ), which authenticated users and handled session management.
While the initial setup was straightforward, VoLTE registration proved to be a significant hurdle.
Overcoming IMS registration issues
For months, I struggled with SIP registration issues. Despite refining configurations and testing different environments, the user equipment (UE) refused to register. The primary configuration files governing this process were register.cfg, which manages SIP registration requests, and pcscf.cfg, which controls P-CSCF security policies and SIP routing.
After extensive debugging, the issue remained. Eventually, I received an email about a new software update. Once I applied the update, VoLTE registration worked seamlessly — seeing the VoLTE icon appear on my phone was a moment of relief.
Open5GS test setup
When I integrated the IMS with the vendor’s EPC, I encountered many problems. As a result, I decided to deploy the open-source Open5GS as a 4G/5G mobile core (EPC). I set up a test environment using various UE, including iPhone, Android, and Nokia devices, connected through a Baicells eNodeB (evolved Node B). Open5GS and Kamailio IMS served as the core network, with Internet connectivity over both IPv4 and IPv6. Monitoring tools such as Grafana and Prometheus helped track performance and diagnose issues.

This setup allowed me to test VoLTE call setup and RTP stream validation, SMS-over-IP functionality, general Internet connectivity, and network performance monitoring.
Automating Open5GS deployment with Docker
Manually managing Open5GS services can be cumbersome, so I automated deployment using Docker. The setup relied on an environment file to define service parameters, a Docker Compose file to handle deployment, and Portainer for a graphical interface to manage containers. This approach made Open5GS easier to deploy and maintain as a modular, microservices-based system.
Network logs and insights
Logs were crucial for troubleshooting and performance monitoring. HSS logs verified SIM provisioning and authentication, while Mobility Management Entity (MME) logs confirmed eNodeB connectivity and UE registration. Wireshark captures helped track Attach Accept messages and SIP signalling, and Grafana dashboards provided real-time network monitoring.
VoLTE and SMS testing results
VoLTE calls successfully established RTP streams using the AMR-WB codec, while SMS-over-IP messages were correctly processed through the IMS network. One limitation I encountered was that my eNodeB lacked IPv6 support, preventing UE from accessing the IPv6 Internet despite being assigned both IPv4 and IPv6 addresses.
Future plans: 5G standalone testing
Next, I plan to experiment with 5G standalone using open source implementations from srsRAN, and LimeSDR for software-defined radio. This could be useful for private 5G networks in the Internet of Things (IoT) and enterprise applications, research and development in universities and labs, and prototyping new 5G network features.
Final thoughts
Deploying an open source IMS and mobile core network with Open5GS was both challenging and rewarding. Open source solutions offer great flexibility for VoLTE and 5G research, but troubleshooting requires persistence and a deep understanding of network protocols.
If you’re considering a similar setup, be prepared for challenges — but also for valuable learning experiences. Have you worked with Open5GS or Kamailio IMS? Share your experiences in the comments!
Watch Gonchig’s APRICOT 2025 presentation for more information.
Gonchig Altansukh is Director of the Mobile Core Network Division at Ondo LLC. He is also an APNIC Community Trainer. His expertise includes virtualization, infrastructure design, routing and switching, and multicast.
The views expressed by the authors of this blog are their own and do not necessarily reflect the views of APNIC. Please note a Code of Conduct applies to this blog.