正文
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