[SIP]kamailio (Open SER)のインストール及び設定


SIPサーバーのkamailioのインストール方法
SIPサーバーを動作させ通信できるようにできましたので忘備録として手順を記載します。

環境
以下の環境で動作を確認しました。
ubuntu 15.04 server
kamailio 4.2.0-2ubuntu1

インストール
1. kamailioに関連するパッケージをインストールする
apt-get install kamailio kamailio-mysql-modules kamailio-tls-modules

2. MySqlのパッケージをインストールする
kamailioが使うデータベースエンジンとしてMySqlをインストールします。

apt-get install mysql-server

インストール時にMySQLのrootのパスワードを求められるので設定する必要があります。
3.rtpproxyのパッケージをインストールする
ルータを経由してアクセスできるようにrtpproxyをインストールします。
apt-get install rtpproxy

設定
1. /etc/default/kamailio を編集します。

RUN_KAMAILIO=yes

この変更をしないとkamailioは動作しません。
2. /etc/kamailio/kamailio.cfgを編集します。
先頭に以下を追加し、MySQL, 認証機能、NAT対応、TLS対応を有効にします。
#!KAMAILIO
#!define WITH_MYSQL
#!define WITH_AUTH
#!define WITH_USRLOCDB
#!define WITH_NAT
#!define WITH_TLS
#

tcp_connection_lifetime=3605を追加します。
/* port to listen to
* - can be specified more than once if needed to listen on many ports */
port=5060
#!ifdef WITH_TLS
enable_tls=yes
#!endif
tcp_connection_lifetime=3605

rtpproxyの設定を変更します
#!ifdef WITH_NAT
# ----- rtpproxy params -----
# modparam("rtpproxy", "rtpproxy_sock", "udp:127.0.0.1:7722")
modparam("rtpproxy", "rtpproxy_sock", "unix:/var/run/rtpproxy/rtpproxy.sock")
setflag(FLT_NATS);を追加します。

# Caller NAT detection
route[NATDETECT] {
#!ifdef WITH_NAT
force_rport();
setflag(FLT_NATS);

3. /etc/kamailio/tls.cfgを編集します。
/etc/kamailio/に自己証明書がインストールされているのでその指定を行います。
[server:default]
method = SSLv23
verify_certificate = no
require_certificate = no
private_key = /etc/kamailio/kamailio-selfsigned.key
certificate = /etc/kamailio/kamailio-selfsigned.pem

4. /etc/kamailio/kamctlrcを編集します。
SIP_DOMAIN=<サーバーのIPアドレス or ホスト名>
DBENGINE=MYSQL

※サーバーがNAT配下にある場合は、グローバルIPを設定する必要があります。
5. kamdbctl を実行しMySQLにkamailio用のテーブルを作成します。
kamdbctl create

これでkamdbctlを使用してユーザーを追加できるようになります。
ユーザーは以下のように追加します。
kamctl add <ユーザーID> <パスワード>

実行時にパスワードを求めれます。パスワードは以下です。
kamailiorw

ログ出力
kamailioのログ出力は以下のように設定します。
1./etc/rsyslog.confに以下を追加します。
###############
#### RULES ####
###############
local0.* -/var/log/kamailio.log

2. syslogを再起動します。
/etc/init.d/rsyslog restart

動作確認
1. kamailioを起動します。
/etc/init.d/kamailio start

このコマンドで起動するはずなのですが、私の環境では起動できませんでした。
以下で起動を行うことができました。
sudo kamailio

2. SIPクライアントをクライアントPCにインストールします。
http://www.jitsi.org/からクライアントPCの用のjitsiをダウンロードしインストールします。
3. 起動画面が表示された後にアカウントを登録する画面が表示されますので、kamdbctlを使用して登録したユーザーを以下のように入力します。
<user-id>@<server ip address>

jitsi_001.png

4. 以下のように起動し、オンラインとなることが確認できます。
jitsi_002.png

2台クライアントPCを用意すれば、通話/チャットを試すことができます。
jitsi_003.png

備考
この記事で作成した設定ファイルは以下から入手できます。
kamailio_config_4.2.zip
kamailioにはWeb画面で設定を行えるツール siremis が開発されています。
以下から入手できます。
http://siremis.asipto.com/
追記
Linuxを再起動すると以下がなくなり起動できなくなります。
/var/run/kamailio/
上記のディレクトリを作り直せば、起動できます。
kamailioをNAT以下に配置すると以下のログの通り、自分への接続と認識できず接続されません。
Oct 24 15:24:45 odmdhsip kamailio[1763]: DEBUG: <core> [socket_info.c:583]: grep_sock_info(): grep_sock_info - checking if host==us: 13==9 && [40.74.139.170] == [127.0.0.1]
Oct 24 15:24:45 odmdhsip kamailio[1763]: DEBUG: <core> [socket_info.c:587]: grep_sock_info(): grep_sock_info - checking if port 5060 (advertise 0) matches port 5060
Oct 24 15:24:45 odmdhsip kamailio[1763]: DEBUG: <core> [socket_info.c:583]: grep_sock_info(): grep_sock_info - checking if host==us: 13==12 && [40.74.139.170] == [100.79.48.84]
Oct 24 15:24:45 odmdhsip kamailio[1763]: DEBUG: <core> [socket_info.c:587]: grep_sock_info(): grep_sock_info - checking if port 5060 (advertise 0) matches port 5060
Oct 24 15:24:45 odmdhsip kamailio[1763]: DEBUG: <core> [socket_info.c:583]: grep_sock_info(): grep_sock_info - checking if host==us: 13==9 && [40.74.139.170] == [127.0.0.1]
Oct 24 15:24:45 odmdhsip kamailio[1763]: DEBUG: <core> [socket_info.c:587]: grep_sock_info(): grep_sock_info - checking if port 5060 (advertise 0) matches port 5060
Oct 24 15:24:45 odmdhsip kamailio[1763]: DEBUG: <core> [socket_info.c:583]: grep_sock_info(): grep_sock_info - checking if host==us: 13==12 && [40.74.139.170] == [100.79.48.84]
Oct 24 15:24:45 odmdhsip kamailio[1763]: DEBUG: <core> [socket_info.c:587]: grep_sock_info(): grep_sock_info - checking if port 5060 (advertise 0) matches port 5060
Oct 24 15:24:45 odmdhsip kamailio[1763]: DEBUG: <core> [socket_info.c:583]: grep_sock_info(): grep_sock_info - checking if host==us: 13==9 && [40.74.139.170] == [127.0.0.1]
Oct 24 15:24:45 odmdhsip kamailio[1763]: DEBUG: <core> [socket_info.c:587]: grep_sock_info(): grep_sock_info - checking if port 5061 (advertise 0) matches port 5060
Oct 24 15:24:45 odmdhsip kamailio[1763]: DEBUG: <core> [socket_info.c:583]: grep_sock_info(): grep_sock_info - checking if host==us: 13==12 && [40.74.139.170] == [100.79.48.84]
Oct 24 15:24:45 odmdhsip kamailio[1763]: DEBUG: <core> [socket_info.c:587]: grep_sock_info(): grep_sock_info - checking if port 5061 (advertise 0) matches port 5060
Oct 24 15:24:45 odmdhsip kamailio[1763]: DEBUG: <core> [forward.c:448]: check_self(): check_self: host != me

この問題は、/etc/kamailio/kamctlrcをドメインに対してグローバルIPを設定することで解決しました。
SIP_DOMAIN=<サーバーのグローバルIP>

グローバル/NAT越えで使う場合は、グローバル上にSTUNサーバーを用意する必要があります。
また、SIPクライアントがSTUNプロトコルに対応している必要があります。
追記2
Ver.4.3.2に組み込まれている /etc/init.d/kamailio は問題があるのかLinux起動時に/var/run/kamailioを作成できず動作しません。
Ver.4.2の同ファイルを使うと動作します。
修正したスクリプトは以下です。
etc_initd.zip

0 件のコメント :

コメントを投稿