Configuração do FreeSWITCH para Multi-Domain (Multi-Tenant)

Quando o FreeSWITCH é utilizado em ambientes cloud com alta concorrência de chamadas, o suporte a múltiplos domínios ou locatários se torna essencial. O próprio FreeSWITCH oferece suporte nativo a essa funcionalidade.

Cada domínio pode operar de forma independente, permitindo que números de ramal idênticos não consigam se chamar entre si, além de posssuir linhas, IVRs e roteamentos distintos.

A configuração é realizada conforme descrito abaixo:

1. conf/vars.xml

<X-PRE-PROCESS cmd="set" data="domain=$${local_ip_v4}" />
<X-PRE-PROCESS cmd="set" data="domain_name=$${domain}" />

Neste arquivo são definidos os parâmetros padrão do domínio. Após ativar o modo multi-domínio, esse valor deixa de ser relevante.

2. conf/sip_profile/internal.xml

<!-- todos os registros de entrada usarão este domínio para buscar usuários -->
<param name="force-register-domain" value="$${domain}"/>
<!-- força o uso deste domínio nas assinaturas -->
<param name="force-subscription-domain" value="$${domain}"/>
<!-- todos os registros de entrada serão armazenados no banco com este domínio -->
<param name="force-register-db-domain" value="$${domain}"/>

Os três parâmetros acima devem ser comentados e o perfil reiniciado.

<É possível criar múltiplos perfis SIP>

3. conf/directory/default.xml

<include>
    <!-- o domínio ou IP (lado direito do @ na URI) -->
    <domain name="$${domain}">

O elemento <domain> especifica qual domínio esta configuração de diretório se aplica (o valor padrão $${domain} vem da variável definida em vars.xml).

Pode-se criar várias definições de domínios (copiando e alterando o nome do domínio), criando assim múltiplos domínios.

Para cada domínio, recomenda-se ter um diretório de usuários separado, especialmente com suas respectivas configurações de usuário. Para isso, atualize também o carregamento dos usuários:

<users>
    <X-PRE-PROCESS cmd="include" data="default/*.xml"/>
</users>

<Adicionalmente, para garantir que cada domínio utilize seu próprio dialplan, deve-se ajustar o campo user_context nos arquivos de usuário>

4. conf/directory/default/<user>.xml

Para que cada domínio utilize seu próprio dialplan, o campo user_context no arquivo do usuário precisa ser modificado:

<variables>
    <variable name="user_context" value="default"/>

<É necessário então criar as rotas correspondentes, caso contrário as chamadas falharão>

5. conf/dialplan/default.xml

<include>
    <context name="default">

Copie esse dialplan e altere o atributo name do contexto para corresponder ao valor configurado no campo user_context dos usuários.

6. Recarregar XML, registrar e testar chamadas

7. Após habilitar o modo domínio, não é mais possível utilizar formas abreviadas como user/1000, sendo obrigatório usar o formato completo: user/1000@${domain_name}

Ao utilizar aplicativos como conferências ou filas (fifo), também é necessário usar o formato completo. Ou seja, com o modo multi-domínio ativo, sempre que se referir a um usuário, deve-se incluir o nome do domínio.

8. Também é possível distribuir diferentes domínios em perfis Sofia distintos, permitindo o uso de portas diferentes por perfil.

Ao trabalhar com portas, preste atenção especial às portas WebSocket:

Se duas instâncias estiverem tentando usar a mesma porta WebSocket, o perfil pode falhar ao iniciar — mesmo que a porta pareça livre.

    <!-- para suporte a SIP sobre WebSocket -->
    <param name="ws-binding"  value=":5066"/>

    <!-- para suporte a SIP sobre WebSocket seguro -->
    <!-- É necessário o certificado wss.pem no diretório $${certs_dir} -->
    <param name="wss-binding" value=":7443"/>

Tags: freeswitch sip multitenancy domain voip

Publicado em 9-25 05:31