专栏名称: hryou0922
目录
相关文章推荐
51好读  ›  专栏  ›  hryou0922

freeswitch系列二 kamailio 5.0安装及实现kamailio集成freeswitch

hryou0922  · 掘金  ·  · 2018-01-25 02:15

正文

1. 概述

kamailio是个纯粹的SIP服务器。本文介绍先如何在debian8下安装debian5.0,然后详细介绍如何实现使用kamailio做freeswitch均衡负载。kamailio同时实现做为代理服务器、注册服务器、重定向服务器。

2. 在debian 8 安装debian 5.0

2.1. 安装环境

这里的安装在和 freeswitch系列一 在debian中安装freeswitch1.6 相同的服务器上。

2.2. 安装kamailio

配置kamailio软件源, 创建文件: /etc/apt/sources.list.d/kamailio.list 并加入如下信息

deb http://deb.kamailio.org/kamailio jessie main
deb-src http://deb.kamailio.org/kamailio jessie main

配置公钥

apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xfb40d3e6508ea4c8
// 执行安装apt-get更新 
apt-get update

安装数据库 : 安装mysql不是必须,下文需要用到mysql,所以这里进行安装

apt-get install mysql-server

安装 kamailio 和kamailio的msqyl模块

apt-get install kamailio kamailio-mysql-modules

服务控制命令

systemctl status kamailio
systemctl start kamailio
systemctl stop kamailio
systemctl restart kamailio

2.3. 重定义日志文件

对/etc/rsyslog.d/kamailio.conf 做如下改动,重启rsyslog( service rsyslog restart)和Kamailio。这样所有Kamailio的日志将会输出到上面指定的文件(/var/log/kamailio.log)。

*.*;auth,authpriv.none,local0.none    -/var/log/syslog
if $syslogfacility-text=='local0' then -/var/log/kamailio.log

2.4. kamailio重要目录

  • /usr/lib/x86_64-linux-gnu/kamailio/modules/:modules so目录, 定义在kamailio配置文件的mpath里
  • /run/kamailio:运行时生成的临时文件
  • /etc/init.d/kamailio:启动脚本
  • /etc/default/kamailio:启动使用此文件做为配置文件
  • /etc/kamailio/:主目录
    • /etc/kamailio/kamctlrc:是kamctl 和 kamdbctl的配置文件
    • kamailio.cfg:kamailio主要配置文件
  • /lib/systemd/system/kamailio.service: systemctl 的启动配置文件

3. Kamailio 集成freeswitch

下面介绍kamailio做2台freeswitch的均衡负载。此时kamailio扮演代理服务器、注册服务器、重定向服务器的角色

4. freeswitch的配置

为了集成到kamailio,freeswitch也需要做相应的修改

4.1. 修改freeswitch 则witch端口

在上文安装完毕,如果同一服务器上先启动了freeswitch, 则kamailio会启动失败。因为freeswitch和kamailio都默认使用同一端口5060。这里我们修改freeswitch的默认端口。 修改 /etc/freeswitch/vars.xml,把其中的5060,5080也改成其它的,如5260,5280。修改internal_auth_calls为false,关闭权限检查

  <!-- Internal SIP Profile -->
  <X-PRE-PROCESS cmd="set" data="internal_auth_calls=false"/>
  <X-PRE-PROCESS cmd="set" data="internal_sip_port=5260"/>
  <X-PRE-PROCESS cmd="set" data="internal_tls_port=5061"/>
  <X-PRE-PROCESS cmd="set" data="internal_ssl_enable=false"/>

  <!-- External SIP Profile -->
  <X-PRE-PROCESS cmd="set" data="external_auth_calls=false"/>
  <X-PRE-PROCESS cmd="set" data="external_sip_port=5280"/>
  <X-PRE-PROCESS cmd="set" data="external_tls_port=5081"/>
  <X-PRE-PROCESS cmd="set" data="external_ssl_enable=false"/>

4.2. 配置ACL

配置ACL:配置白名单访问,配置Kamailio访问 修改/etc/freeswitch/autoload_configs/acl.conf.xml,修为domains里的node为kamailio的ip.

    <list name="domains" default="deny">
      <!-- domain= is special it scans the domain from the directory to build the ACL -->
      <node type="allow" domain="$${domain}"/>
      <!-- use cidr= if you wish to allow ip ranges to this domains acl. -->
      <!-- <node type="allow" cidr="192.168.0.0/24"/> -->
      <node type="allow" cidr="10.240.80.153"/>
      <node type="allow" cidr="127.0.0.1"/>
    </list>

4.3. 配置拨号计划

在dialplan/public.xml里开始地方加入如下配置,表示1080-1089号码直接转到default.xml计划中

<!-- 1080 - 1089 for test -->
<extension name="from_kamailio">
    <condition field="destination_number" expression="^(10[8][0-9])$">
      <action application="transfer" data="$1 XML default"/>
    </condition>
</extension>

修改dialplan/default.xml:关键修改bridge的部分的data内容为sofia/internal/[email protected]

<extension name="Local_Extension_kamalio">
      <condition field="destination_number" expression="^(10[8][0-9])$">
        <action application="export" data="dialed_extension=$1"/>
        <!-- bind_meta_app can have these args <key> [a|b|ab] [a|b|o|s] <app> -->
        <action application="bind_meta_app" data="1 b s execute_extension::dx XML features"/>
        <action application="bind_meta_app" data="2 b s record_session::$${recordings_dir}/${caller_id_number}.${strftime(%Y-%m-%d-%H-%M-%S)}.wav"/>
        <action application="bind_meta_app" data="3 b s execute_extension::cf XML features"/>
        <action application="bind_meta_app" data="4 b s execute_extension::att_xfer XML features"/>
        <action application="set" data="ringback=${us-ring}"/>
        <action application="set" data="transfer_ringback=$${hold_music}"/>
        <action application="set" data="call_timeout=30"/>
        <!-- <action application="set" data="sip_exclude_contact=${network_addr}"/> -->
        <action application="set" data="hangup_after_bridge=true"/>
        <!--<action application="set" data="continue_on_fail=NORMAL_TEMPORARY_FAILURE,USER_BUSY,NO_ANSWER,TIMEOUT,NO_ROUTE_DESTINATION"/> -->
        <action application="set" data="continue_on_fail=true"/>
        <action application="hash" data="insert/${domain_name}-call_return/${dialed_extension}/${caller_id_number}"/>
        <action application="hash" data="insert/${domain_name}-last_dial_ext/${dialed_extension}/${uuid}"/>
        <action application="set" data="called_party_callgroup=${user_data(${dialed_extension}@${domain_name} var callgroup)}"/>
        <action application="hash" data="insert/${domain_name}-last_dial_ext/${called_party_callgroup}/${uuid}"/>
        <action application="hash" data="insert/${domain_name}-last_dial_ext/global/${uuid}"/>
        <!--<action application="export" data="nolocal:rtp_secure_media=${user_data(${dialed_extension}@${domain_name} var rtp_secure_media)}"/>-->
        <action application="log" data="INFO in to extension public-ex user/$${dialed_extension}@$${domain_name}"/>
        <action application="hash" data="insert/${domain_name}-last_dial/${called_party_callgroup}/${uuid}"/>
        <!-- 修改这部分内容,其中10.240.80.153为kamilio的IP -->
        <action application="bridge" data="sofia/internal/[email protected]"/>

        <action application="answer"/>
        <action application="sleep" data="1000"/>
        <!--
        <action application="bridge" data="loopback/app=voicemail:default ${domain_name} ${dialed_extension}"/>
        -->
      </condition>
    </extension>

4.4. 重启 freeswitch

重启 freeswitch







请到「今天看啥」查看全文