Aller au contenu principal

Bord SIP Kamailio (kamailio)

Bord SIP de la téléphonie Navin : SIP sur UDP, TCP et TLS pour les opérateurs et les téléphones, WebSocket sur TLS pour les softphones WebRTC, anti-flood, anti-bruteforce, gestion du NAT, limites d'appels par tenant et dispatcher vers les pools Asterisk et LiveKit SIP. Le routage des tenants vit dans des tables de hachage remplies par Navin Enterprise par JSONRPC et répliquées par DMQ entre les instances.

Généré depuis catalog/services/kamailio.yaml : ne pas modifier à la main.

Résumé​

Version5.7.4
Usageinstaller et configurer
Couchefonctionnelle (catalogue IA)
CatégorieRéseau
Méthodes d'installationpackage
Connexion externenon
Réservé au bac à sablenon

Licence​

Identifiant SPDXGPL-2.0-or-later
Politique de licenceexception de licence
Exception de licenceLEX-025 (en attente de la décision du client)
Remarque de licenceGPL-2.0-or-later : un programme séparé joint par SIP et son interface JSONRPC ; aucun code de Kamailio n'est lié à Navin. Le bundle hors ligne redistribue les paquets de la distribution avec leurs notices et leurs sources.
Composant de la plateformekamailio

Paquets et artefacts​

Un paquet que publie le projet du service (son image, son archive binaire, son paquet Python ou système) porte la licence du service ; un paquet tiers porte la licence écrite sur sa ligne, lue dans les métadonnées officielles du projet amont.

TypePaquetVersionLicenceDétails
paquet systèmekamailioversion du dépôt configuréGPL-2.0-or-laterfamille Debian (apt)
paquet systèmekamailio-autheph-modulesversion du dépôt configuréGPL-2.0-or-laterfamille Debian (apt)
paquet systèmekamailio-tls-modulesversion du dépôt configuréGPL-2.0-or-laterfamille Debian (apt)
paquet systèmekamailio-websocket-modulesversion du dépôt configuréGPL-2.0-or-laterfamille Debian (apt)
paquet systèmepython3version du dépôt configuréPSF-2.0famille Debian (apt)

Systèmes et architectures pris en charge​

MéthodeSystèmes d'exploitationArchitectures
packagefamille Debian (apt)x86_64, aarch64 (non restreintes par le descripteur)
  • Pas de méthode package sur la famille RHEL (dnf) : Aucun paquet maintenu de Kamailio n'existe dans RHEL ni dans EPEL 9 et 10 : les paquets RPM ne sont publiés que par le projet Kamailio (rpm.kamailio.org), un dépôt tiers que le bundle hors ligne ne porte pas. Placer le bord SIP sur Ubuntu 24.04 (universe : Kamailio 5.7.4) ou Debian 13 (Kamailio 6.0.1).
  • Méthode package de la famille Debian (apt) limitée à Ubuntu 24.04, Debian 13 : Seuls Ubuntu 24.04 (5.7.4) et Debian 13 (6.0.1) fournissent un Kamailio contre lequel la configuration générée est validée ; Debian 12 (5.6.4) et Ubuntu 22.04 (5.5.4) n'ont pas les modules et paramètres qu'elle utilise.

Unités de la distribution masquées par la méthode package : kamailio.service. Le postinst des paquets les démarre avec la configuration d'origine : juste après l'installation, l'agent les arrête, les désactive et les masque (tâche systemd.mask, seulement si leur fichier d'unité appartient à un paquet installé), et le composant tourne dans sa propre unité navin-<service>-<component>.service. La désinstallation les démasque seulement.

Systèmes hôtes certifiés : RHEL 8/9/10, Rocky Linux 8/9/10, AlmaLinux 8/9/10, Oracle Linux 8/9, CentOS Stream 9/10, Ubuntu 22.04/24.04, Debian 12, Arch Linux (rolling). Le contrôle préalable des hôtes accepte ces systèmes (une autre version d'une famille connue donne un avertissement, une version en fin de vie est refusée) et les architectures x86_64 et aarch64.

Prérequis​

Hôte​

Le descripteur ne déclare aucun contrôle préalable de l'hôte.

Programmes que les commandes et les contrôles du service lancent sur l'hôte, hors des racines gérées : les ajouter à allowed_commands de l'agent (voir Sécurité de l'agent Navin), sinon l'agent les refuse avec command_not_allowed : /usr/bin/python3, /usr/sbin/kamailio, /usr/sbin/kamcmd.

Réseau et ports​

ComposantNom du portPortOuvert dans le pare-feu de l'hôte
kamailiosip5060/udpoui
kamailiosip_tcp5060/tcpoui
kamailiosips5061/tcpoui
kamailiowss7443/tcpoui
kamailiojsonrpc5071/tcpoui
kamailiometrics5073/tcpoui
kamailiodmq5062/tcp (mode ha)oui

Services et connexions nécessaires​

Détail et résolution : voir Dépendances.

Méthodes et modes d'installation​

MéthodeDéfautCe que la méthode utilise
packageouiles paquets système du descripteur, installés par le gestionnaire de paquets de l'hôte

Composants​

ComposantTypeMéthodes d'installationPorts
Kamailio (kamailio)maîtrepackage5060/udp, 5060/tcp, 5061/tcp, 7443/tcp, 5071/tcp, 5073/tcp, 5062/tcp (mode ha)

Unique (single) (par défaut)​

Un seul bord SIP : un point de défaillance unique pour les appels.

Ce que le mode déploie :

ComposantPlacement
kamailiomin 1, max 1

Haute disponibilité (ha)​

Deux instances actives ou plus qui partagent leurs tables de hachage et compteurs d'appels par DMQ ; les opérateurs et les téléphones les joignent par DNS SRV, plusieurs adresses ou un répartiteur réseau.

Ce que le mode déploie :

ComposantPlacement
kamailiomin 2, recommandé 2

Installer ce service​

L'assistant d'installation du Navin Manager planifie, valide et exécute l'installation ; il faut la permission services:install sur le cluster.

  1. Ouvrez l'assistant. Dans Clusters, choisissez l'action de ligne Installer des services du cluster cible. L'assistant s'ouvre sur sa première étape, Service.

  2. Choisissez le service. À l'étape Service, sélectionnez Bord SIP Kamailio. La carte affiche la licence GPL-2.0-or-later et les dépendances dont l'installation a besoin.

  3. Choisissez les hôtes et le mode. À l'étape Hôtes, cochez les hôtes, puis choisissez le Mode : single (par défaut), ha. Chaque mode déploie les composants listés dans Méthodes et modes d'installation.

  4. Liez les dépendances. À l'étape Liaisons, choisissez pour chaque dépendance (asterisk, livekit_sip, rtpengine) Installer avec la plateforme ou Utiliser une connexion existante ; une dépendance facultative peut rester sur Aucune liaison.

  5. Configurez. À l'étape Configuration, relisez les paramètres (voir Paramètres de configuration). Les mots de passe laissés vides avec une valeur générée par défaut sont générés et scellés par le Manager.

  6. Relisez et installez. À l'étape Installation, le Manager valide le plan et affiche l'ordre d'installation ; quand il indique « Le plan est valide. Prêt pour l'installation. », choisissez Installer. Un mode hautement disponible n'est installé que si ses contrôles HA réussissent.

  7. Vérifiez. L'opération se termine quand les contrôles de santé de chaque instance réussissent (voir Contrôles de santé) ; le service apparaît alors en marche dans Services.

Haute disponibilité​

Clusternatif (native)
Haute disponibiliténatif (native)
Basculecôté client (client)
Réplicationnatif (native)
Quorumaucun (none)
Découvertestatique (static)
Point d'entréedécouverte par le client (client-discovery)
Documentation officiellehttps://www.kamailio.org/docs/modules/5.7.x/modules/dmq.html
Référenceshttps://www.kamailio.org/docs/modules/5.7.x/modules/dispatcher.html, https://www.kamailio.org/docs/modules/5.7.x/modules/htable.html, https://www.kamailio.org/docs/modules/5.7.x/modules/dialog.html
Authentification entre pairsDMQ n'a pas d'authentification : le pare-feu de l'hôte n'ouvre le port DMQ qu'aux hôtes du cluster et Kamailio refuse une requête KDMQ qui ne vient pas d'un nœud DMQ connu (dmq_is_from_node). DMQ reste en TCP clair même avec TLS.

Prérequis​

PrérequisDoit être hautement disponibleModesDescription
asteriskouihaUn pool de deux nœuds Asterisk ou plus, pour que le dispatcher ait un nœud actif suivant pour chaque tenant.

Topologie par mode​

ModesNiveau le plus haut du catalogueRépartitionComposant du quorumDomaines de panneDescription
singleautonome (standalone)unique (single)-1Un bord SIP : sa perte arrête tous les appels et enregistrements.
haha (ha)actif-actif (active-active)-2Instances actives avec les mêmes tables de hachage (DMQ) ; les opérateurs et les téléphones utilisent une autre adresse quand l'une est perdue.

Remarques​

  • La redondance de l'entrée est hors de Kamailio : enregistrements DNS SRV nommant chaque instance, plusieurs adresses de signalisation déclarées chez l'opérateur, ou un répartiteur réseau pour SIP. Une IP virtuelle n'est pas universelle (elle demande un segment L2 commun ou un mécanisme du cloud) et n'est pas configurée ici.
  • DMQ réplique les tables de hachage et les profils de dialogue (compteurs d'appels par tenant), ni les transactions ni les connexions TCP, TLS et WebSocket : les dialogues routés par une instance perdue échouent à leur requête suivante (le Record-Route la nomme), téléphones et softphones se réenregistrent sur une autre instance.
  • Une instance redémarrée reçoit les tables d'un pair actif au démarrage (dmq_init_sync) ; un redémarrage complet les vide jusqu'à la réconciliation par Navin Enterprise (core.uptime).

Paramètres de configuration​

Réseau​

ParamètreTypeDéfautValeurs permisesObligatoireSecretRedémarrageDescription
Port SIP (sip_port)port5060-nonnonouiSIP sur UDP et TCP pour les opérateurs et les téléphones (public).
Port SIP TLS (tls_port)port5061-nonnonouiSIP sur TLS (public), ouvert tant que TLS est actif.
Port WSS (wss_port)port7443-nonnonouiSIP sur WebSocket sécurisé pour les softphones WebRTC du portail (public), ouvert tant que TLS est actif.
Port JSONRPC (admin_port)port5071-nonnonouiJSONRPC sur /RPC (HTTPS tant que TLS est actif) sur l'adresse d'administration. Le pare-feu de l'hôte ne l'ouvre qu'aux hôtes du cluster et Kamailio répond 403 à toute source hors des réseaux d'administration.
Port des métriques (metrics_port)port5073-nonnonouiMétriques Prometheus sur /metrics (xhttp_prom) sur l'adresse d'administration, à part du JSONRPC.
Port DMQ (dmq_port)port5062-nonnonouiRéplication entre les instances (KDMQ sur TCP), ouverte aux seuls hôtes du cluster ; Kamailio refuse une requête KDMQ qui ne vient pas d'un nœud DMQ. (ha)
Adresse SIP (listen_address)string(vide)-nonnonouiAdresse d'écoute de SIP, TLS et WSS ; vide : l'adresse de l'hôte. (portée host)
Adresse annoncée (advertised_address)string(vide)-nonnonouiAdresse ou nom public écrit dans Via et Record-Route quand l'hôte est derrière un NAT 1:1 ; vide : aucune. (portée host)
Adresse d'administration (admin_address)string(vide)-nonnonouiAdresse d'écoute du JSONRPC et des métriques ; vide : l'adresse de l'hôte. (portée host)

Sécurité​

ParamètreTypeDéfautValeurs permisesObligatoireSecretRedémarrageDescription
Réseaux d'administration (admin_networks)list[]-nonnonnonRéseaux CIDR autorisés sur le JSONRPC en plus de l'hôte lui-même, par exemple les adresses des nœuds Navin Enterprise (10.0.0.21/32) ; toute autre source reçoit 403.
Réseaux des métriques (metrics_networks)list[]-nonnonnonRéseaux CIDR autorisés sur /metrics en plus de l'hôte lui-même ; vide : toute source admise par le pare-feu de l'hôte (les hôtes du cluster).
TLS (tls_enabled)booltrue-nonnonouiSIP sur TLS, WSS pour les softphones et HTTPS sur le JSONRPC et les métriques, avec le certificat émis par l'autorité du Manager (clé 0640 root et le groupe kamailio). Désactivé : SIP sur UDP et TCP et HTTP en clair seulement, aucun softphone.
Certificat public (tls_public_cert_file)string(vide)-nonnonnonChemin d'un certificat reconnu par les navigateurs et les opérateurs (chaîne complète, PEM) utilisé à la place du certificat du Manager ; vide : le certificat du Manager. (avancé)
Clé du certificat public (tls_public_key_file)string(vide)-nonnonnonChemin de la clé du certificat public, lisible par le groupe kamailio. (avancé)
Autorités des opérateurs (tls_client_ca_file)string/etc/ssl/certs/ca-certificates.crt-nonnonnonAutorités vérifiant les opérateurs joints en SIP TLS. (avancé)
Secret des softphones (ephemeral_secret)passwordgénéré-nonouiouiSecret partagé d'auth_ephemeral, généré et conservé dans le coffre du Manager ; Navin Enterprise le lit dans le coffre et remet au navigateur l'utilisateur <expiration>:<extension> et le mot de passe base64(HMAC(secret, utilisateur)).
HMAC des softphones (ephemeral_algorithm)enumsha256sha1, sha256, sha384, sha512nonnonouiEmpreinte du HMAC des identifiants éphémères (auth_ephemeral sha_algorithm).
Durée des identifiants (ephemeral_max_ttl_s)int3600min 60, max 86400nonnonnonValidité la plus longue acceptée pour un identifiant éphémère, en secondes ; une expiration plus lointaine est refusée par 403.
Secret des nonces (auth_nonce_secret)passwordgénéré-nonouiouiSecret des nonces digest (auth secret), commun aux instances pour qu'un défi de l'une soit valable sur les autres.
Échecs avant bannissement (ban_failures)int10min 2, max 1000nonnonnonAuthentifications refusées (401 ou 407 avec identifiants, 403) d'une adresse externe avant son bannissement (table ipban).
Durée du bannissement (ban_time_s)int900min 60, max 604800nonnonnonSecondes pendant lesquelles une adresse reste dans ipban après son dernier échec.
Seuil d'inondation (pike_density)int30min 5, max 10000nonnonnonRequêtes d'une adresse externe par tranche de 2 secondes avant que pike ne la bannisse (opérateurs et nœuds internes exemptés).
Agents des scanners (scanner_user_agents)list["friendly-scanner", "sipvicious", "sipcli", "sip-scan", "VaxSIPUserAgent", "pplsip", "sundayddr", "iWar", "SIVuS", "smap"]-nonnonnonFragments de User-Agent de scanners SIP connus : leurs requêtes sont ignorées sans réponse et la source est bannie.

Routage​

ParamètreTypeDéfautValeurs permisesObligatoireSecretRedémarrageDescription
Transport interne (internal_transport)enumudpudp, tcpnonnonouiTransport vers les nœuds Asterisk et LiveKit SIP du dispatcher.
Pools dédiés (dedicated_sets)json[]-nonnonnonJeux du dispatcher des pools dédiés : une liste de {set (100 ou plus), destinations [hôte:port]} ; Navin Enterprise route un tenant dédié vers son jeu dans tenant_domains et did_routes.
Intervalle des sondes (probe_interval_s)int10min 2, max 300nonnonnonSecondes entre deux sondes OPTIONS SIP de chaque destination.
Sondes en échec (probe_failures)int3min 1, max 20nonnonnonSondes en échec avant qu'une destination soit déclarée hors service.
Sondes réussies (probe_successes)int2min 1, max 20nonnonnonSondes réussies avant qu'une destination redevienne active.
Destinations essayées (dispatcher_attempts)int3min 1, max 10nonnonnonDestinations du jeu essayées pour un appel (le nœud du tenant d'abord, puis les suivants actifs sur 408, 500 ou 503).

Limites​

ParamètreTypeDéfautValeurs permisesObligatoireSecretRedémarrageDescription
Appels simultanés par défaut (default_max_calls)int0min 0nonnonnonAppels simultanés d'un tenant absent de tenant_limits ; 0 : sans limite.
Appels par seconde par défaut (default_cps)int0min 0nonnonnonAppels par seconde d'un tenant absent de tenant_limits ; 0 : sans limite.
Durée des dialogues (max_call_duration_s)int14400min 60, max 86400nonnonnonSecondes après lesquelles un dialogue sans BYE sort des compteurs d'appels.

Réglages​

ParamètreTypeDéfautValeurs permisesObligatoireSecretRedémarrageDescription
Processus de travail (workers)int8min 1, max 64nonnonouiProcessus de travail SIP par écoute UDP et pour TCP. (recommandé max(4, min(32, host.cpu_count * 2)))
Connexions maximales (max_connections)int4096min 64, max 200000nonnonouiConnexions TCP, TLS et WebSocket au plus.
Mémoire partagée (Mo) (shm_mb)int256min 64, max 16384nonnonouiMémoire partagée de Kamailio (transactions, dialogues, tables de hachage).
Mémoire privée (Mo) (pkg_mb)int16min 8, max 512nonnonouiMémoire privée de chaque processus Kamailio.
Niveau de journalisation (log_level)int2min -3, max 3nonnonnonNiveau debug de Kamailio : de -3 alerte à 3 débogage, 2 info.

Dépendances​

Pour chaque dépendance active, le Manager prend la première solution parmi : la liaison choisie dans l'assistant ; un service de la même installation qui la fournit ; un service déjà installé dans le cluster ; la seule connexion du type attendu. Sinon, une dépendance facultative reste non liée, et une dépendance obligatoire est ajoutée à l'installation dans son mode par défaut (la colonne ci-dessous nomme le service du catalogue ajouté).

LiaisonFournie parType de connexionPoint d'accèsFacultativeQuand rien n'est liéDescription
asteriskasterisk-sipnonasterisk est ajouté à l'installationPool Asterisk partagé : chaque nœud est une destination du jeu 1 du dispatcher, sondée par des OPTIONS SIP.
livekit_siplivekit-sip-sipouireste non liée (facultative)Passerelle LiveKit SIP : ses nœuds forment le jeu 2 du dispatcher, la cible des numéros routés vers la branche ai.
rtpenginertpengine-ngouireste non liée (facultative)Relais média optionnel : avec lui, Kamailio ancre le RTP des appels qui ne sont pas WebRTC (rtpengine_manage).

Points d'accès​

Point d'accèsSchémaComposantPortCheminParamètre TLSParamètres de liaisonSecrets de liaisonCommande de provisionnement
sipsipkamailio5060 (sip_port)--transports, ephemeral_algorithmephemeral_secret-
sipssipskamailio5061 (tls_port)-tls_enabled---
wsswsskamailio7443 (wss_port)-tls_enabled---

Commandes​

CommandeComposantCibleDescription
Destinations du dispatcher (dispatcher_list)kamailiotous les hôtesListe les jeux, destinations et états du dispatcher (A actif, I inactif, D désactivé, P sondé).
Drainer une destination (dispatcher_state)kamailiotous les hôtesFixe l'état d'une destination sur chaque instance : d la draine (désactivée : aucun nouvel appel ni sonde, les dialogues en cours se terminent normalement), a la remet en service. Un rechargement du dispatcher ou un redémarrage remet toutes les destinations en service.
Recharger le dispatcher (dispatcher_reload)kamailiotous les hôtesRecharge dispatcher.list sans redémarrer Kamailio.
Vider une table de hachage (htable_dump)kamailiopremier hôteAffiche les entrées d'une table de routage (lecture seule).
Durée de fonctionnement (uptime)kamailiotous les hôtescore.uptime de chaque instance : un redémarrage vide les tables de hachage jusqu'à la réconciliation par Navin Enterprise.
Valider la configuration (validate)kamailiotous les hôtesExécute kamailio -c sur la configuration générée.

Paramètres des commandes​

CommandeParamètreTypeDéfautObligatoireDescription
dispatcher_stateJeu (set)int-ouiJeu du dispatcher (1 Asterisk, 2 LiveKit SIP, 100 ou plus dédié).
dispatcher_stateDestination (destination)string-ouiURI telle que listée, par exemple sip:pbx1.example.internal:5070.
dispatcher_stateÉtat (state)enumdnond draine, a remet en service.
htable_dumpTable (table)enumdid_routesnonTable de hachage à afficher.

Contrôles de santé​

Vivacité (par instance)​

ComposantContrôleDétails
kamailioTCP {{ config.listen_address or host.ip or '127.0.0.1' }}:{{ config.sip_port }}20 tentatives ; intervalle 1 s ; délai 3 s
kamailioHTTP {{ ('https://' ~ host.fqdn) if config.tls_enabled else ('http://' ~ (config.admin_address or host.ip or '127.0.0.1')) }}:{{ config.metrics_port }}/metricsAttendu 200 ; Attendu kamailio_ ; 20 tentatives ; intervalle 1 s ; délai 3 s

Disponibilité (contrôle du service)​

ContrôleDétails
/usr/sbin/kamcmd -s unix:{{ paths.data }}/kamailio_ctl dispatcher.listAttendu SET ; 10 tentatives ; intervalle 3 s ; délai 10 s

Contrôles préalables​

ContrôleTypeSignificationSévéritéComposants
sip_port_freeport_free {"param": "sip_port"}port 5060 libre sur l'hôtebloquanttous les composants
admin_port_freeport_free {"param": "admin_port"}port 5071 libre sur l'hôtebloquanttous les composants

Sauvegarde et restauration​

Export JSON des tables de routage (tenant_domains, did_routes, trunk_hosts, tenant_limits) de la première instance par JSONRPC ; la restauration les réécrit par htable.sets et htable.seti. Navin Enterprise reste la source de vérité et les réconcilie de toute façon ; la table transitoire ipban n'est pas conservée.

Formatkamailio-htables
Composantkamailio
Fichiers{{ backup.dir }}/htables.json
Test de restaurationoui
Instances arrêtées pendant la restaurationoui

Désinstallation​

Chemins supprimés quand les données sont purgées : {{ paths.data }}, {{ paths.log }}.

Documentation amont​