Introduction

Flexisip is a SIP proxy server implementation compliant to RFC 3261, written in C++11, running for Linux, though compilation on MacOS X is possible.
It has the following main features:

  • Transports: SIP/UDP, SIP/TCP and SIP/TLS
  • NAT-aware
  • built-in ICE-capable media-relay module and STUN server
  • Digest authentication based on external SQL password database or static password file
  • Registrar
  • Routing based on registrar database or static route file, with forking
  • Store and forward operation for SIP MESSAGE requests (instant messaging).
  • Interconnected with push notifications systems for reliably notifying mobile apps of incoming calls or messages
  • High level event logging for activity monitoring
  • High availability and cluster mode operation for large deployments

The project was started by Belledonne Communications in 2011. The focus was to develop a SIP proxy solution easy to install, configure and maintain, and offering “out of the box” all the required behaviors to deploy a SIP service tuned for mobile applications.

License

Flexisip is a general purpose SIP proxy with media capabilities.
It is released under the Affero GPL v3, which you should understand and agree on before deployment.

An alternate proprietary licensing is available from Belledonne Communications.

Design

Flexisip is designed around the concept of modules taking in charge a particular processing : authentication, registration, media-relay, routing... All requests and responses go through a chain of modules in order to be processed. Modules are listed and documented here.

Flexisip's underlying SIP stack is a forked version of sofia-sip, that provides excellent performance and robust, asynchronous transport layer. The fork simply adds a few maintainance patches.

Configuration and operation

The configuration of flexisip is defined by a single /etc/flexisip/flexisip.conf ini-style configuration file. A template configuration file with full documentation of sections and keys, and their default values, is generated by invoking

flexisip --dump-default all

and installed in /etc/flexisip/flexisip.conf.sample, in order to be filled and tuned by the administrator.

In addition to the configuration file, a command-line called flexisip_stats.py and an SNMP interface are available, allowing remote administration or run-time reconfiguration of the server. Both flexisip_stats.py and SNMP allow to list and fetch in real-time internal statistics of the Flexisip process.

Note: due to the complexity of configuration of the SNMP daemon and tools in Linux, the flexisip_stats.py tool is the recommended way of interacting with flexisip statistics and configuration (such as verbosity of logs) at run-time. This tool simply uses an UNIX socket to connect to the Flexisip daemon.

Flexisip outputs warning, error or debug logs via syslog, which goes to journald logs on systemd-capable systems.

Additionally, event logs can be enabled to log call, message, register activity, per user, in a mysql database.

Clustering

Flexisip is designed to work with several instances running on different server, communicating through Redis backend in which routing information of users is stored. Several Flexisip instances can be used together in order to scale a large deployment and tolerate faults. This is achieved without load balancer (the load balancer would be a single point of failure): instead we recommend to use DNS-SRV records to define priorities between flexisip server and client-based load-balancing (using DNS-SRV weights).

 

Created by Sandrine Avakian on 2017/01/05 16:20