FreeSWITCH endpoints

[video]

El trafico entrante a freeswitch puede hacerse por ip o por medio de registro, en cuanto al trafico saliente puede enviarese directamente a la ip del equipo mediante dialplan o bien por gw, este gw puede ser con o sin registro. cabe mencionar que hay mas de una forma de gestionar el trafico entrante / saliente, esta es solo una guia de referencia de un manera de hacerlo.

Register

Para permitir el registro de extensiones creamos el archivo de la extension /etc/freeswitch/directory/default/9999.xml prestando especial atención al id y password que corresponden a las credenciales de nuestra extension:

<user id="9999">
  <params>
    <param name="password" value="secret"/>
    <param name="vm-password" value="9999"/>
  </params>
  <variables>
    <variable name="toll_allow" value="domestic,international,local"/>
    <variable name="accountcode" value="9999"/>
    <variable name="user_context" value="default"/>
    <variable name="effective_caller_id_name" value="User"/>
    <variable name="effective_caller_id_number" value="9999"/>
    <variable name="callgroup" value="core"/>
    <variable name="max_calls" value="2"/>
  </variables>
</user>

para aplicar los cambios hacemos un reload:

fs_cli -x reloadxml

ACL

Para permitir el trafico entrante desde un peer/ip agregamos la ip o segmento al archivo /etc/freeswitch/autoload_configs/acl.conf.xml

<list name="domains" default="deny">
  <node type="allow" domain="$${domain}"/>
  <node type="allow" cidr="2.2.2.2/32"/>
</list>

para aplicar los cambios hacemos un reload del modulo acl:

fs_cli -x reloadacl

SIP Profile

El sip profile se asocia a una direccion ip-puerto del host, podemos tener multiples sip profiles. para esto basta con agregar nuestro archivo a la ruta: /etc/freeswitch/sip_profiles/troncal.xml

<profile name="troncal">
  <aliases>
  </aliases>

  <gateways>
    <X-PRE-PROCESS cmd="include" data="troncal/*.xml"/>
  </gateways>

  <domains>
    <domain name="all" alias="true" parse="false"/>
  </domains>

  <settings>
    <param name="debug" value="0"/>
    <param name="sip-trace" value="yes"/>
    <param name="sip-capture" value="yes"/>
    <param name="watchdog-enabled" value="no"/>
    <param name="watchdog-step-timeout" value="30000"/>
    <param name="watchdog-event-timeout" value="30000"/>
    <param name="log-auth-failures" value="true"/>
    <param name="forward-unsolicited-mwi-notify" value="false"/>
    <param name="context" value="public"/>
    <param name="rfc2833-pt" value="101"/>
    <param name="sip-port" value="5060"/>
    <param name="dialplan" value="XML"/>
    <param name="dtmf-duration" value="2000"/>
    <param name="inbound-codec-prefs" value="$${global_codec_prefs}"/>
    <param name="outbound-codec-prefs" value="$${global_codec_prefs}"/>
    <param name="rtp-timer-name" value="soft"/>
    <param name="rtp-ip" value="2.2.2.2"/>
    <param name="sip-ip" value="2.2.2.2"/>
    <param name="hold-music" value="$${hold_music}"/>
    <param name="apply-nat-acl" value="nat.auto"/>
    <param name="apply-inbound-acl" value="domains"/>
    <param name="local-network-acl" value="localnet.auto"/>
    <param name="record-path" value="$${recordings_dir}"/>
    <param name="record-template" value="${caller_id_number}.${target_domain}.${strftime(%Y-%m-%d-%H-%M-%S)}.wav"/>
    <param name="manage-presence" value="true"/>
    <param name="presence-hosts" value="$${domain},2.2.2.2"/>
    <param name="presence-privacy" value="$${presence_privacy}"/>
    <param name="inbound-codec-negotiation" value="generous"/>
    <param name="tls" value="$${internal_ssl_enable}"/>
    <param name="tls-only" value="false"/>
    <param name="tls-bind-params" value="transport=tls"/>
    <param name="tls-sip-port" value="5061"/>
    <param name="tls-passphrase" value=""/>
    <param name="tls-verify-date" value="true"/>
    <param name="tls-verify-policy" value="none"/>
    <param name="tls-verify-depth" value="2"/>
    <param name="tls-verify-in-subjects" value=""/>
    <param name="tls-version" value="$${sip_tls_version}"/>
    <param name="tls-ciphers" value="$${sip_tls_ciphers}"/>
    <param name="inbound-late-negotiation" value="true"/>
    <param name="inbound-zrtp-passthru" value="true"/>
    <param name="nonce-ttl" value="60"/>
    <param name="auth-calls" value="$${internal_auth_calls}"/>
    <param name="inbound-reg-force-matching-username" value="true"/>
    <param name="auth-all-packets" value="false"/>
    <param name="ext-rtp-ip" value="2.2.2.2"/>
    <param name="ext-sip-ip" value="2.2.2.2"/>
    <param name="rtp-timeout-sec" value="300"/>
    <param name="rtp-hold-timeout-sec" value="1800"/>
    <param name="force-register-domain" value="$${domain}"/>
    <param name="force-subscription-domain" value="$${domain}"/>
    <param name="force-register-db-domain" value="$${domain}"/>
    <param name="ws-binding"  value=":5066"/>
    <param name="wss-binding" value=":7443"/>
    <param name="challenge-realm" value="auto_from"/>
  </settings>
</profile>

para que el servicio tome la nueva configuración, es necesario reiniciar el servicio de freeswitch

systemctl restart freeswitch

Gateways

Para agregar un gw, basta con agregarlo al directorio que corresponde de acuerdo al sip propfile/troncal donde deseamos agregarlo, es decir, si nuestro sip profile se llama troncal, hay que agregar el siguiente archivo en /etc/freeswitch/sip_profiles/troncal/gw1.xml

<gateway name="gw1">
  <param name="realm" value="asterisk.com"/>
  <!--<param name="username" value="usuario"/>-->
  <!--<param name="password" value="contrasena"/>-->
  <param name="register" value="false"/>
  <param name="ping" value="25"/>
</gateway>

Conclusión

Existen varios metodos para recibir y enviar trafico a travez de freeswitch,  para mas información sobre endpoints, acl, registro, etc. consultar la  documentacion oficial de freeswitch.


Julio Carranza