اليوم
سوف نقوم بتنصيب kamailio sip proxy من git مع إضافة
websocket
حتى
تواصل خطوات التنصيب بدون مشاكل يجب أن
تكون root , أولا
نحتا ج لتنصيب الأدوات التالية
yum
install git gcc flex bison mysql-devel make openssl-devel
libcurl-devel libxml2-devel pcre-devel libunistring flex libunistring-devel
بالنسبة
libunistring
فهي غير ضرورية إذا لم تكن تريد تنصيب
إضافة websocket
الخطوة
الأولى
ألان
عليك إنشاء ملف لتحمل عليه السورس كود من git
mkdir
-p /usr/local/src/kamailio-4.0
cd /usr/local/src/kamailio-4.0
وألان
نقوم بتحميل السوسر من git
git
clone --depth 1 --no-single-branch
git://git.sip-router.org/sip-router kamailio
cd kamailio
git checkout -b 4.0 origin/4.0
إذا
كان إصدار git لا يدعم
--no-single-branch
قم
بحذفها
إعداد
التنصيب
وألان
نقوم بإعداد السوسر للتنصيب
make cfg
الخطوة
التالي هي إضافة المكتبات التي نريد
إضافتها kamailio
وهنا
سنختار mysql و
websocket
طبعا mysql لاغنا عنها أما websocket
فسنستخدها لاحقا في تطبيقات الويب وإذا
لم تكن تريد العمل على مشروع ويب فهي غير
ضرورية
nano -w modules.lst
سيفتح
لنا محرر النصوص وألان قم بتغير قيمة
include_modules
للتالي
include_modules=
db_mysql websocket
أو
يمكنك القيام بذالك من دون فتح أي ملف من
خلال الأمر التالي
make
include_modules="db_mysql websocket" cfg
وبعد
ذالك ننصب البرنامج بشكل طبيعي
make all
make install
ولان
تم تنصيب ملفات التنفيذ في المسار التالي
/usr/local/sbin
وهي
Kamailio
وهو سيرفر الكمائيليو
Kamdbctlسيكريبت
التحكم في قواعد البيانات
Kamctl
سيكربت التحكم في
سيرفرر كمائيليو
Sercmd
سطر أوامر الكمائيليو
المكتبات
والأدوات في موجود في المسار التالي
32-Bit
/usr/local/lib/kamailio/modules/
/usr/local/lib/kamailio/modules_k/
64-Bit
/usr/local/lib64/kamailio/modules/
/usr/local/lib64/kamailio/modules_k/
ملف
الإعداد
/usr/local/etc/kamailio/kamailio.cfg
وألان
نأتي لتنصيب قاعدة البيانات عن طريق
تعديل ملف
kamctlrc
nano -w /usr/local/etc/kamailio/kamctlrc
قم
بتغير قيمة
DBENGINE
إلىmysql
DBENGINE=MYSQL
وألان
يمكنك إنشاء قاعدة البيانات الخاصة kamailio من خلال الأمر التالي
/usr/local/sbin/kamdbctl create
وألان
نقوم بالتعديل على ملف الإعداد ليتوافق
مع الإضافات التي تم تنصيبها
/usr/local/etc/kamailio/kamailio.cfg
أضف
ألا سطر التالية إلى ملف الإعداد إذا لم
تجدها فيه
#!define
WITH_MYSQL
#!define
WITH_AUTH
#!define
WITH_USRLOCDB
وألان
أبحث عن قسم with defined وقم
بإضافة الأسطر التالية
#!substdef
"!MY_IP_ADDR!<SERVER_IP>!g"
#!substdef
"!MY_DOMAIN!<SERVER_IP>!g"
#!substdef
"!MY_WS_PORT!8080!g"
#!substdef
"!MY_WSS_PORT!4443!g"
#!substdef
"!MY_WS_ADDR!tcp:MY_IP_ADDR:MY_WS_PORT!g"
#!substdef
"!MY_WSS_ADDR!tls:MY_IP_ADDR:MY_WSS_PORT!g"
#!define
WITH_WEBSOCKETS
أستبدل <server_ip> بالايبي تبع الخادم
أبحث
عن القسم global parameters وأضف الأسطر
التالية
listen=MY_IP_ADDR
#!ifdef
WITH_WEBSOCKETS
listen=MY_WS_ADDR
#!ifdef
WITH_TLS
listen=MY_WSS_ADDR
#!endif
#!endif
tcp_connection_lifetime=3604
tcp_accept_no_cl=yes
tcp_rd_buf_size=16384
And
comment line:
#tcp_connection_lifetime=3605
أبحث
عن القسم ويب modules وأضف الأسطر التالية
#!ifdef
WITH_WEBSOCKETS
loadmodule
"xhttp.so"
loadmodule
"websocket.so"
loadmodule
"nathelper.so"
#!endif
في
قسم setting module-specific parameters اضف الاسطر
التالية
#!ifdef
WITH_WEBSOCKETS
#
----- nathelper params -----#
modparam("nathelper|registrar",
"received_avp", "$avp(RECEIVED)")
#
Note: leaving NAT pings turned off here as nathelper is _only_ being
used for
#
WebSocket connections. NAT pings are not needed as WebSockets
have
#
their own keep-alives.
#!endif
في
قسم routing-logic داخل جز ء request_route we
أضف الأسطر التالية
request_route
{
#
per request initial checks
route(REQINIT);
#!ifdef
WITH_WEBSOCKETS
if
(nat_uac_test(64)) {
#
Do NAT traversal stuff for requests from a WebSocket
#
connection - even if it is not behind a NAT!
#
This won't be needed in the future if Kamailio and the
#
WebSocket client support Outbound and Path.
force_rport();
if (is_method("REGISTER")) {
fix_nated_register();
}
else {
fix_nated_contact();
if (!add_contact_alias()) {
xlog("L_ERR", "Error aliasing contact <$ct>\n");
sl_send_reply("400", "Bad Request");
exit;
}
}
}
#!endif
....
نضيف
الأسطر التالية لقسم route[WITHINDLG]
route[WITHINDLG]
{
if
(has_totag()) {
#
sequential request withing a dialog should
#
take the path determined by record-routing
if (loose_route()) {
#!ifdef
WITH_WEBSOCKETS
if ($du == "") {
if (!handle_ruri_alias()) {
xlog("L_ERR", "Bad alias <$ru>\n");
sl_send_reply("400", "Bad Request");
exit;
}
}
#!endif
....
وفي
نهاية ملف الإعداد نضيف
#!ifdef
WITH_WEBSOCKETS
onreply_route
{
if
((($Rp == MY_WS_PORT || $Rp == MY_WSS_PORT)
&& !(proto == WS || proto == WSS))) {
xlog("L_WARN", "SIP response received on $Rp\n");
drop;
exit;
}
if
(nat_uac_test(64)) {
#
Do NAT traversal stuff for replies to a WebSocket connection
#
- even if it is not behind a NAT!
#
This won't be needed in the future if Kamailio and the
#
WebSocket client support Outbound and Path.
add_contact_alias();
}
}
event_route[xhttp:request]
{
set_reply_close();
set_reply_no_connect();
if
($Rp != MY_WS_PORT
#!ifdef
WITH_TLS
&& $Rp != MY_WSS_PORT
#!endif
) {
xlog("L_WARN", "HTTP request received on $Rp\n");
xhttp_reply("403", "Forbidden", "",
"");
exit;
}
xlog("L_DBG",
"HTTP Request Received\n");
if
($hdr(Upgrade)=~"websocket"
&& $hdr(Connection)=~"Upgrade"
&& $rm=~"GET") {
#
Validate Host - make sure the client is using the correct
#
alias for WebSockets
if ($hdr(Host) == $null || !is_myself("sip:" + $hdr(Host)))
{
xlog("L_WARN", "Bad host $hdr(Host)\n");
xhttp_reply("403", "Forbidden", "",
"");
exit;
}
#
Optional... validate Origin - make sure the client is from an
#
authorised website. For example,
#
#
if ($hdr(Origin) != "http://communicator.MY_DOMAIN"
#
&& $hdr(Origin) != "https://communicator.MY_DOMAIN")
{
#
xlog("L_WARN", "Unauthorised client $hdr(Origin)\n");
#
xhttp_reply("403", "Forbidden", "",
"");
#
exit;
#
}
#
Optional... perform HTTP authentication
#
ws_handle_handshake() exits (no further configuration file
#
processing of the request) when complete.
if (ws_handle_handshake())
{
# Optional... cache some information about the
# successful connection
exit;
}
}
xhttp_reply("404",
"Not Found", "", "");
}
event_route[websocket:closed]
{
xlog("L_INFO",
"WebSocket connection from $si:$sp has closed\n");
}
#!endif
ولان
قم بحفظ الملف وقم بكتبة السطر الاتي
للتاكد من عدم وجود اخطاء في الملف
kamailio
-c kamailio.cfg
إذا
لم تحدث أخطاء يمكننا ألان تشغيل kamailio
بواسطة
الأمر kamactl start
إذا حدثة معك الكثير من الاخطاء وﻻ يهمك حمل الملف جاهز من الرابط التالي وﻻكن بشرط ان ﻻتنسى تغير الservice ip
kamailio.cfg
إذا حدثة معك الكثير من الاخطاء وﻻ يهمك حمل الملف جاهز من الرابط التالي وﻻكن بشرط ان ﻻتنسى تغير الservice ip
kamailio.cfg
إذا
كان كل شيء على ما يرام ستكون النتيجة
كالتالي
Listening
on
udp:
192.168.1.13:5060
tcp: 192.168.1.13:5060
tcp: 192.168.1.13:8080
Aliases:
tcp: debi.local:8080
tcp: debi.local:5060
udp: debi.local:5060
تهانينا
لقد قمة بتنصيب kamailio بنجاح
0 التعليقات