openSIPS Kurulum Adımları

openSIPS Kurulum Adımları

OpenSIPS, bir çok telefon servis sağlayıcı tarafından kullanılan ve Class 4, Class 5, toptan satış VoIP, kurumsal PBX, sanal PBX, SBC, yük dengeleyici IMS platformları, çağrı merkezleri ve daha pek özellikler sunan çok amaçlı bir SIP sunucusudur. Bu yazımda Debian 10 üzerinde openSIPS‘in kurulum adımlarını bulabilirsiniz.

openSIPS, Linux üzerinde çalışan, oldukça az kaynak ihtiyacı olan ve yüksek performanslı bir SIP sunucusudur. Bu yüzden bir çok telekom operatörü openSIPS ile çözümler geliştirmektedir. Eğer siz de VoIP uygulamalarınızda openSIPS kullanmak isterseniz aşağıdaki kurulum yönergesini takip edebilirsiniz.

openSIPS Kurulum Adımları

1. openSIPS Kurulumunda Kullanılan Bileşenler ve Versiyonları:

  • Debian v10 (Buster) x64 minimal install (netinst)
  • OpenSips v3.0
  • OpenSips GUI v8.3.0
  • Apache v2.4
  • PHP v7.3
  • MariaDB v10

2. Ön Hazırlıklar

openSIPS kurulumu için öncelikle bir Debian kurulumuna ihtiyacınız olacak. Bu linkten amd64 netinst CD imajını indirip kurabilirsiniz. Debian’ın kurulumu oldukça kolay, dilerseniz hazırlamış olduğum bu videoyu takip ederek de kurabilirsiniz.

Debian’ın kurulumundan sonra aşağıdaki paketlerin kurulumunu tamamlayın:

apt update && apt upgrade -y && apt -y install m4 git nano sudo curl dbus apache2 lsb-release

Normalde monitoring için opsiyonel olarak “monit” paketini de kurabilirsiniz fakat yazıyı yazdığım tarihte monit üzerinde bulunan bir takım açıklardan dolayı repolardan kaldırıldı. Durum değişirse diye yine ilgili kurulum komutunu aşağıda bulabilirsiniz:

apt -y install monit

3. PHP Kurulumu

Önce bağımlı paketleri kurun:

apt -y install curl apt-transport-https ca-certificates

PHP reposunu ekleyin:

wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > \ /etc/apt/sources.list.d/php.list 

Daha sonra PHP paketlerini kurun:

apt update && apt -y install php7.3 php7.3-gd php7.3-mysql php7.3-xmlrpc php-pear php7.3-cli php-apcu php7.3-curl php7.3-xml libapache2-mod-php7.3 

Pear ile PHP MDB2 kütüphanesini kurun:

pear install MDB2#mysql

PHP.ini dosyasını düzenleyerek short_open_tag değişkenini On yapın:

sed -i "s#short_open_tag = Off#short_open_tag = On#g" /etc/php/7.3/apache2/php.ini

4. MariaDB Kurulumu

MariaDB kurulumu için gpg keylerini alıp ilgili paketleri kurun:

apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8 curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash apt update && apt -y install mariadb-server 

Daha sonra my.cnf dosyasını aşağıdaki gibi değiştirin:

nano /etc/mysql/my.cnf

Strict modu devre dışı bırakmak ve openSIPS varsayılan latin1 karakter setini kullanmak için [mysqld] başlığının altına aşağıdaki satırları ekleyin:

sql_mode='' 
character-set-server = latin1 

MariaDB servisini restart edin:

systemctl restart mariadb

5. openSIPS Kurulumu

gpg keyi ekleyin:

apt -y install dirmngr && apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 049AD65B

openSIPS repolarını ekleyin:

echo "deb https://apt.opensips.org $(lsb_release -sc) 3.0-releases" >/etc/apt/sources.list.d/opensips.list 
echo "deb https://apt.opensips.org $(lsb_release -sc) cli-nightly" >/etc/apt/sources.list.d/opensips-cli.list 

Aşağıdaki komutla openSIPS paketlerini kurun:

apt update && apt -y install opensips opensips-cli opensips-*-module opensips-*-modules python3-mysqldb python3-sqlalchemy python3-sqlalchemy-utils 

6. Database Kurulumu

MariaDB üzerinde opensips kullanıcısını oluşturun ve ilgili hakları verin:

mysql -p 
> 
CREATE USER 'opensips'@'localhost' IDENTIFIED BY 'opensipsrw'; 
GRANT ALL PRIVILEGES ON opensips.* TO 'opensips'@'localhost'; 
FLUSH PRIVILEGES; 
exit 

Database kurulum scriptini çalıştırın:

opensips-cli -x database create 

script size database URL ini soracak. mysql://opensips:opensipsrw@localhost olarak girin ve default u (install all tables) seçin.

7. Konfig Dosyasının Üretilmesi

Konfig dosyasını üretmek için aşağıdaki scripti çalıştırın:

/usr/sbin/osipsconfig 

GenerateOpenSIPS Script > Residential Script > Configure Residential Script i seçin. Spacebar ı kullanarak TLS dışında kalan tüm seçenekleri seçin. Q tuşuna basarak bir önceki menüye gidin ve Generate Residential Script i seçin. Script ilgili dosyayı üretecek ve size dosyanın adını ekranda gösterecektir. İlgili dosyayı opensips.cfg dosyayı ile değiştirin ve gerekli okuma haklarını verin:

mv /etc/opensips/opensips.cfg /etc/opensips/opensips.cfg.orig 
cp /etc/opensips/[üretilen konfig dosyası] /etc/opensips/opensips.cfg 
chmod 644 /etc/opensips/opensips.cfg 

8. Ek Konfigürasyonlar:

opensips.cfg dosyasında sunucunun dinleyeceği interface IP lerini girin:

nano /etc/opensips/opensips.cfg

listen= ile başlayan iki satırı sunucunun IP adresi ile değiştirin:

listen=udp:192.168.0.1:5060
listen=tcp:192.168.0.1:5060

Daha sonra oluşturulan konfigürasyon dosyasının uygun olup olmadığını kontrol edin:

opensips -C /etc/opensips 

Eğer dosyada hata varsa ekranda gözükecektir. Hata varsa düzeltin, yoksa aşağıdaki komut ile yeni konfigürasyon dosyası ile opensips servisini tekrar çalıştırın:

systemctl restart opensips 

9. Arayüz (GUI) Kurulumu

Git kullanarak openSIPS arayüzünü indirin:

git clone -b 8.3.0 https://github.com/OpenSIPS/opensips-cp.git /var/www/opensips-cp

Database üzerinde openSIPS arayüz tablosunu oluşturun:

cd /var/www/opensips-cp/config 
mysql -p opensips < db_schema.mysql 

10. İstatistiklerin Düzenli Toplanması

İlgili scripti cron.d klasörüne ekleyin ve cron servisini tekrar başlatın:

cd /var/www/opensips-cp/config
cp tools/system/smonitor/opensips_stats_cron /etc/cron.d/
systemctl restart cron

11. Monit Konfigürasyonu (Opsiyonel)

monitrc dosyasına aşağıdaki gibi ilgili satırı ekleyin ve servisi tekrar başlatın:

echo -e "set httpd port 2812 and\nallow localhost" >> /etc/monit/monitrc
systemctl restart monit

12. Global Konfigürasyon

GUI konfigürasyon php dosyasını açın ve aşağıdaki gibi düzenleyin:

nano +30 /var/www/opensips-cp/config/boxes.global.inc.php 
// monit host:port 
$boxes[$box_id]['monit']['conn']="127.0.0.1:2812"; 
$boxes[$box_id]['monit']['user']="admin"; 
$boxes[$box_id]['monit']['pass']="admin"; 
$boxes[$box_id]['monit']['has_ssl']=0;

13. Apache Konfigürasyonu

Aşağıdaki komutu kullanarak Apache üzerinde Virtual Host tanımlarını yapın:

cat >> /etc/apache2/sites-available/opensips.conf << EOF 
<VirtualHost *:80> 

DocumentRoot /var/www/opensips-cp 

<Directory /var/www/opensips-cp/web>
     Options Indexes FollowSymLinks MultiViews
     AllowOverride None
     Require all granted 
</Directory> 

<Directory /var/www/opensips-cp>
     Options Indexes FollowSymLinks MultiViews
     AllowOverride None
     Require all denied 
</Directory> 
Alias /cp /var/www/opensips-cp/web 

<DirectoryMatch "/var/www/opensips-cp/web/tools/.*/.*/(template|custom_actions|lib)/">
      Require all denied 
</DirectoryMatch> 

</VirtualHost> 

EOF 

Apache üzerinde default web sayfasını kapatın, openSIPS GUI sayfasını açın, klasörün ownerını değiştirip Apache yi restart edin:

a2dissite 000-default 
a2ensite opensips 
chown -R www-data. /var/www/opensips-cp 
systemctl restart apache2 

Sonunda kurulum tamamlanmış oldu. http://ipadresi/cp URL ini kullanarak admin / opensips kullanıcı adı ve şifresiyle openSIPS arayüzüne erişebilirsiniz.

SIP Mesajları ve Açıklamaları

SIP Mesajları ve Açıklamaları

SIP, HTTP’ye oldukça benzeyen bir iletişim protokolüdür ve bu protokol içindeki SIP mesajları HTTP mesajlarına çok benzer. Aynı HTTP’de olduğu gibi SIP mesajları da 2,3,4,5 ve 6 rakamları ile başlayan 3 haneli kodlara sahiptirler. İsterseniz bu mesajların detaylı açıklamalarına geçmeden önce en çok karşılaşılan ve kullanılan SIP mesajlarını inceleyelim :

En Çok Kullanılan SIP Mesajları ve Anlamları

REGISTERTo başlığı alanında listelenen URI’yi bir SIP sunucusuna kaydetmek ve Contact başlığı alanında verilen ağ adresiyle ilişkilendirmek içindir.
INVITEArama yapmak için bir iletişim başlatır. İstek bir kullanıcı istemcisi (ör. IP telefon) tarafından bir SIP sunucusuna gönderilir. Hali hazırda kurulmuş bir iletişim sırasında gönderildiğinde (RE-INVITE), oturumu değiştirir (ör. çağrıyı beklemeye alma).
ACKBir INVITE isteğine son bir yanıt aldığını doğrulamak için kullanılır.
BYEBir iletişimin sonlandırıldığını bildirir ve çağrıyı bitirir.
CANCELBekleyen tüm istekleri iptal eder. Hala çalan bir çağrıyı cevaplamadan önce, sonlandırmak için kullanılır.
UPDATEİletişim durumunu değiştirmeden oturumun durumunu değiştirir
REFERAlıcıdan çağrıyı aktarmak amacıyla bir talepte bulunmasını ister.
PRACKGeçici onay. Geçici bir yanıta yanıt olarak gönderilir.
SUBSCRIBEBir bildirimden gelen olayların bildirilmesi için bir abonelik başlatır.
NOTIFYYeni bir etkinliğin bildirimlerini bir aboneye bildirmek için kullanılır.
PUBLISHBir etkinliği bildirim sunucusunda yayınlamak için kullanılır.
MESSAGEKısa mesaj gönderir. Anlık mesajlaşma uygulamalarında kullanılır.
INFOOturum durumunu değiştirmeyen oturum ortası bilgileri göndermek için kullanılır. Bu yöntem genellikle DTMF rölesi için kullanılır.
OPTIONSBir uç noktanın yeteneklerini sorgular. Genellikle NAT ve keepalive için kullanılır.

Bunların dışında diğer 3 haneli kodlara sahip SIP mesajlarını da aşağıda bulabilirsiniz:

1XX ile Başlayan SIP Mesajları

Bilgi içerikli yanıtlardır. Talebin geçerli olduğunu ve işleme alındığını bildirir. “Deniyor”, “Çalıyor” gibi geçici durumları bildirmek için kullanılır.

  • 100 Trying : INVITE mesajına karşılık olarak gönderilir. Hedefin nerede olduğunu bulmak biraz zaman alabilir, bu nedenle SIP proxy bu yanıtı gönderir.
  • 180 Ringing : Hedef kullanıcı aracısı (aranan numara) INVITE aldı ve telefonu çaldırıyor.
  • 181 Call Is Being Forwarded : Sunucular isteğe bağlı olarak bir çağrının yönlendirildiğini belirtmek için bu yanıtı gönderebilir.
  • 182 Queued : Hedefin geçici olarak kullanılamadığını gösterir, bu nedenle sunucu, hedef kullanılabilir olana kadar çağrıyı kuyruğa (beklemeye) almıştır. Bir sunucu kuyruğun ilerlemesini güncellemek adına birden fazla 182 yanıtı gönderebilir.
  • 183 Session Progress : Bu yanıt, halen kurulmakta olan bir çağrı için ek bilgi göndermek amacıyla kullanılır.
  • 199 Early Dialog Terminated : Bir User Agent Server tarafından, yukarı akıştaki SIP varlıklarına erken bir iletişimin sonlandırıldığını belirtmek için kullanılır.

2XX ile Başlayan SIP Mesajları

İsteğin başarıyla tamamlandığını belirtir. Bir INVITE mesajına cevap olarak, bir çağrının yapıldığını gösterir. Bir son başarı durumunu belirtir. En yaygın görülen kod 200 OK dir.

  • 200 OK : İsteğin başarılı olduğunu belirtir.
  • 202 Accepted : İsteğin işlenmek üzere kabul edildiğini, ancak işlemin tamamlanmadığını gösterir.
  • 204 No Notification : İsteğin başarılı olduğunu, ancak karşılığında bir yanıt alınmayacağını belirtir.

3XX ile Başlayan SIP Mesajları

İsteğin tamamlanması için çağrı yönlendirmesi gerekiyorsa bu kodlar kullanılır. Bu kodlar ile istek yeni bir hedefte tamamlanacak demektir. Ayrıca bir arıza durumunu belirtmek için de kullanılır, ancak kullanıcının yeni konumu veya aramayı cevaplayabilecek alternatif yerler hakkında bilgi de içerir. Bunlar telefonda “Tüm Çağrıları Yönlendir” veya “Rahatsız Etmeyin” gibi özellikler etkinleştirildiğinde IP telefonlar tarafından oluşturulan tipik yanıtlardır.

  • 300 Multiple Options : Adres, ileti gövdesinde veya iletinin Contact alanlarında listelenen kullanıcının veya istemcinin aralarından seçim yapabileceği çeşitli seçeneklerden birine çözümlendiğini belirtir.
  • 301 Moved Permanently : Orijinal istek URI’ın artık geçerli olmadığını belirtir ve yeni adresi Contact başlığı alanında verilr. İstemci orijinal istek URI kayıtlarını yeni değerle güncellemelidir.
  • 302 Moved Temporarily : İstek, Contact alanındaki adres ile tekrar denemelidir. Bir Expires alanı varsa, istemci sonucu bu süre boyunca önbelleğe alabilir.
  • 305 Use Proxy : Contact alanında istenen hedefe erişmek için kullanılması gereken bir proxy olduğunu belirtir.
  • 380 Alternative Service : Çağrının başarısız olduğunu, ancak mesaj gövdesinde alternatifler olduğunu belirtir.

4XX ile Başlayan SIP Mesajları

En kalabalık mesaj kod ailesidir. Gelen istek, sunucuda çeşitli nedenlerle tamamlanamıyor ise hata durumunu belirtmek için kullanılır, ancak bu mesajı üreten SIP Proxy’sinden kaynaklanan bir durumdur. Yani varsa diğer bazı SIP Proxy’lerin isteği başarıyla işleyebileceğini gösterir.

  • 400 Bad Request : İstek, hatalı biçimlendirilmiş sözdizimi nedeniyle anlaşılamadığında gönderilir.
  • 401 Unauthorized : İstek için kullanıcı kimlik doğrulaması gerektiğinde gönderilir. Bu yanıt UAS ve SIP registrar tarafından verilir.
  • 402 Payment Required: İlgili istek için ödeme yapılması gerektiğinde gönderilir. (gelecekte kullanılmak üzere ayrılmıştır)
  • 403 Forbidden : Sunucu isteği anladığında, ancak yerine getirmeyi reddettiğinde gönderilir. Bazen aramanın alıcı tarafından reddedildiği anlamına da gelebilir.
  • 404 Not Found : Sunucu, kullanıcının Request-URI’ında belirtilen etki alanında (domain) bulunmadığı durumda bu mesajı gönderir. Bu durum, Request URI’ındaki etki alanı, isteğin alıcısı tarafından işlenen etki alanlarından hiçbiriyle eşleşmezse de döndürülür.
  • 405 Method Not Allowed : Request-Line’da belirtilen metot anlaşıldığı ancak RequestURI’ı tarafından tanımlanan adres için izin verilmediği durumda gönderilir.
  • 406 Not Acceptable : İstekte gönderilen Accept header bilgisine göre göre kabul edilemeyen bir durum olduğunda gönderilir.
  • 407 Proxy Authentication Required : İstek için kullanıcı kimlik doğrulaması gerektiğinde gönderilir. Bu yanıt proxy’ler tarafından verilir.
  • 408 Request Timeout: İstekte belirtilen kullanıcı gerekli süre içerisinde bulunamadığında gönderilir. İstemci, istediği zaman değişiklik yapmadan isteği tekrarlayabilir.
  • 409 Conflict : Kullanıcı zaten kayıtlı olduğu durumda gönderilir.(sonraki RFC’lerden çıkarılması nedeniyle kullanımdan kaldırılmıştır.)
  • 410 Gone: Bir zamanlar var olan bu kullanıcının artık olmadığı durumda gönderilir.
  • 411 Length Required : Sunucu, geçerli bir Content-Length olmadan isteği kabul etmeyeceği durumda gönderilir. (sonraki RFC’lerden çıkarılması nedeniyle kullanımdan kaldırılmıştır.)
  • 412 Conditional Request Failed : Belirtilen ön koşul karşılanmadığı durumda gönderilir.
  • 413 Request Entity Too Large : İstek mesajının gövdesi çok büyük olduğu durumda gönderilir.
  • 414 Request URI Too Long : Request-URI’I, sunucunun yorumlayabildiğinden daha uzun olduğu durumda sunucunun bu hizmete hizmet vermeyi reddettiğini belirtmek için gönderilir.
  • 415 Unsupported Media Type : İstek mesajının gövdesi desteklenmeyen bir biçimde olduğunda gönderilir.
  • 416 Unsupported URL Scheme : İstek-URI’ı sunucu tarafından desteklenmediği durumda gönderilir.
  • 420 Bad Extension: Geçersiz SIP Protokol uzantısı kullanıldığında, sunucu tarafından anlaşılmadığında gönderilir.
  • 421 Extension Required : Sunucunun, Supported headerında listelenmeyen belirli bir uzantıya ihtiyacı olduğunda gönderilir.
  • 422 Session Interval Too Small : Alınan istek, minimum timer değerinin altında bir süreye sahip bir Session-Expires header alanı içerdiğinde gönderilir.
  • 423 Interval Too Brief : Kaynağın Expiration süresi çok kısa olduğunda gönderilir.
  • 424 Bad Location Information : İsteğin konum içeriği yanlış biçimlendirilmiş veya başka şekilde yetersiz olduğu durumda gönderilir.
  • 428 Use Identity Header : Sunucu yapılandırması bir Identity header üstbilgisi gerektirdiğinde ve istekte bu değer sağlanmadığında gönderilir.
  • 429 Provide Referrer Identity : Sunucu, istek üzerine geçerli bir Referred-By token ı almadığında gönderilir.
  • 430 Flow Failed : Diğer akışlar başarılı iken, bir kullanıcı aracısının belirli bir akışı başarısız olduğunda gönderilir. Bu yanıt proxy cihazları arasında kullanılmak üzere tasarlanmıştır ve uç cihaz tarafında görülmemelidir (eğer tarafından görülüyorsa 400 Bad Request olarak değerlendirilmelidir).
  • 433 Anonymity Disallowed : İsteğin anonim olduğu için reddedildiğini belirtir.
  • 436 Bad Identity-Info : İsteğin bir Identity-Info headerının olduğu ve bu headerdaki URI şeması kaydının anlaşılmadığı durumda gönderilir.
  • 437 Unsupported Certificate : Sunucunun, isteği imzalayan etki alanı için bir sertifikayı doğrulayamadığı durumda gönderilir.
  • 438 Invalid Identity Header : Sunucunun, talebin imzalanması için talepe ait geçerli bir sertifikaya sahip olduğu ancak ancak bu imzayı doğrulayamadığı durumda gönderilir.
  • 439 First Hop Lacks Outbound Support : Kullanıcının kaydolmaya çalıştığı ilk outbound proxynin, registrarın desteklemesine rağmen RFC 5626’nın “outbound” özelliğini desteklemediği durumda gönderilir.
  • 440 Max-Breadth Exceeded : Bir SIP proxy’si bir yanıt contextinin istenen bir paralel fork yürütmek için yetersiz Incoming Max-Breadth değerine sahip olduğunu belirlerse ve proxy, seri olarak çatallayarak veya bir yönlendirme göndererek telafi etmek istemez veya telafi edemezse, bu proxynin 440 yanıtı göndermesi gerekir. 440 yanıtını alan bir istemci, isteğinin olası tüm hedeflere ulaşamamasına neden olabilir.
  • 469 Bad Info Package : If a SIP UA receives an INFO request associated with an Info Package that the UA has not indicated willingness to receive, the UA MUST send a 469 response, which contains a Recv-Info header field with Info Packages for which the UA is willing to receive INFO requests.
  • 470 Consent Needed : Talebin kaynağının alıcı için böyle bir talepte bulunma izni olmadığı durumda gönderilir.
  • 480 Temporarily Unavailable : Aranan numaraya geçici olarak ulaşılamadığında bu mesaj gönderilir.
  • 481 Call/Transaction Does Not Exist : Sunucunun, isteği hiçbir iletişim kutusu veya işlemle eşleştiremediği bir istek aldığında gönderilir.
  • 482 Loop Detected : Sunucu bir döngü (loop) tespit ettiğinde gönderilir.
  • 483 Too Many Hops : Çağrı yönlendirilirken çok fazla hop üzerinden geçtiğinde (Max-Forward headerı ‘0’ değerine ulaştığında) gönderilir.
  • 484 Address Incomplete : Request-URI header ı eksik ise gönderilir.
  • 485 Ambigious : Request-URI header ı belirsiz ise gönderilir.
  • 486 Busy Here : Aranan numara meşgulse gönderilir.
  • 487 Request Terminated : İstek BYE veya CANCEL ile sonlandırıldığında gönderilir.
  • 488 Not Acceptable Here : Session Description veya Request-URI parametreleri kabul edilmediğinde gönderilir.
  • 489 Bad Event : Sunucu Event headerındaki bir olay paketini anlamadığı durumda gönderilir.
  • 491 Request Pending : Sunucunun aynı iletişim kutusundan beklemede olan başka istekleri olduğunda gönderilir.
  • 493 Undecipherable: Sunucunun gelen istekteki MIME gövdesinin şifresini çözemediği durumda gönderilir.
  • 494 Security Agreement Required : Sunucu, anlaşmalı bir güvenlik mekanizması gerektiren bir istek aldığında ve yanıtın, istekte bulunanın seçebileceği uygun güvenlik mekanizmalarının listesini veya digest authentication sorununu içerdiğinde gönderilir.

5XX ile Başlayan SIP Mesajları

Sunucu, sunucu iç hataları da dahil olmak üzere, geçerli bir isteği yerine getiremediğinde alınan mesajlardır. PBX sunucusunun bir iç hatayla karşılaştığını belirtmek için kullanılır.

  • 500 Internal Server Error : Sunucu beklenmedik bir durum nedeniyle isteği yerine getiremediğinde gönderilir.
  • 501 Not Implemented : Sunucu, istek yöntemini tanımadığı için isteği yerine getirme yeteneğine sahip değil ise bu mesajı gönderir.
  • 502 Bad Gateway : Sunucu, ağ geçidi veya proxy gibi davranıyor ve isteği yerine getirmeye çalışırken bir alt sunucudan geçersiz bir yanıt aldıysa bu mesajı gönderebilir.
  • 503 Service Unavailable : Sunucu bakımda veya geçici olarak aşırı yüklenmiş ve bu nedenle isteği işleyemiyor ise bu mesajı gönderir. Sunuu Retry-After headerı ile istemcinin isteğini ne zaman tekrar deneyebileceğini belirtebilir.
  • 504 Server Timeout : Sunucu, isteği işleme koymaya çalışırken başka bir sunucuya erişmeye çalıştı ve bir yanıt almadıysa bu mesajı gönderir.
  • 505 Version Not Supported : Sunucu, SIP protokolünün bu sürümünü desteklemiyor ise bu mesajı gönderir.
  • 513 Message Too Large : Sunucu istek mesajının uzunluğu sunucunun işleyebileceğinden daha uzun ise bu mesajı gönderir.
  • 555 Push Notification Service Not Supported : Sunucu, bir ‘pn provider’ SIP URI parametresinde tanımlanan push bildirim hizmetini desteklemiyorsa bu mesajı gönderir.
  • 580 Precondition Failure : Sunucu teklifte belirtilen bazı kısıtlamaları karşılamak için yetersiz veya isteksiz olduğunda bu mesajı gönderir

6XX ile Başlayan SIP Mesajları

Hedef tarafından çağrının reddedilmesi de dahil olmak üzere genel bir hata olduğunu belirtir. Final bir hata durumunu belirtmek ve bu durumun genel nitelikte olduğunu belirtmek için kullanılır ve bu isteğin hiçbir durumda başka bir SIP Proxy’si tarafından ele alınamayacağını gösterir.

  • 600 Busy Everywhere : Tüm olası yerler meşgul. 486 yanıtından farklı olarak, bu yanıt, hedefin çağrıyı kabul edebilecek alternatif hedeflerin (sesli posta sunucusu gibi) olmadığını bildiğini gösterir.
  • 603 Decline : Hedef aramaya katılmak istemez veya aramayı gerçekleştireme ve ayrıca hedef, aramayı kabul etmek isteyen alternatif hedeflerin (sesli posta sunucusu gibi) olmadığını bildiği zaman bu mesajı gönderir. Yanıt içinde Retry-After header alanında daha iyi bir arama belirtilir.
  • 604 Does Not Exist Anywhere : Sunucu, istenen kullanıcının hiçbir yerde bulunmadığını biliyorsa bu mesajı gönderir.
  • 606 Not Acceptable : Kullanıcının aracısıyla başarılı bir şekilde iletişim kurulduğunnu, ancak oturum açıklamasının istenen medya, bant genişliği veya adresleme stili gibi bazı değerlerin kabul edilemez olduğunu belirtir.
  • 607 Unwanted : Aranan taraf arayan tarafın bu çağrısını istemiyor ise bu mesaj gönderilir. Arayan tarafın gelecekteki girişimlerinin de benzer şekilde reddedilmesi muhtemeldir.
  • 608 Rejected : Bir aracı makine veya süreç çağrı girişimini reddettiğinde bu mesaj iletilir. Bu, aranan tarafın çağrıyı reddettiği 607 (Unwanted) SIP yanıt kodundan farklıdır. Yanıt, Call-Info headerında bulunan çağrıyı engelleyen kişi bilgilerini içerebilir.
coTURN Kurulum ve Yapılandırma Adımları

coTURN Kurulum ve Yapılandırma Adımları

Bu blog sayfası, SIP veya WebRTC projeleriniz (Jitsi Meet gibi) için güvenlik duvarlarının veya proxy’lerin arkasındaki kullanıcıların bağlanmasına izin vermek için coTURN sunucusunun kurulum ve yapılandırma adımları kapsar.

TURN Nedir?

TURN, Traversal Using Relays around NAT‘ın kısaltmasıdır. STUN’a benzer şekilde, Internet’teki eşler arasında iletişim kurmak için olası yolların keşfedilmesine yardımcı olmak için kullanılan bir ağ protokolü / paket biçimidir (IETF RFC 5766). Paketleri eşler arasında aktarmak için ortak bir röle sunucusu kullanması nedeniyle STUN’dan farklıdır. TURN, başka bir seçenek olmadığında medya paketlerini eşler arasında ulaştırmak için bir ara sunucu olarak kullanılır. TURN’ün kullanılması durumunda artık bağlantı p2p olmayacağından sunucu kaynakları tüketilir ve eşler arası bağlantıda fazladan bir hop eklenmesi nedeniyle gecikme süresi (latency) artar.

TURN’ü eşlerden birinin simetrik bir NAT’ın arkasında, diğeri ise simetrik bir NAT’ın veya port tabanlı NAT’ın arkasında olduğunda kullanmanız gerekir. Bu durum genelde toplam bağlantıların %10’unda karşımıza çıkar. Geri kalan bağlantıların çoğunda STUN tek başına yeterlidir.

CoTURN Sunucusunu Yüklemek

Ses / Video tabanlı servisler, WebRTC için kullanılan çeşitli UDP portlarını kullanır. NAT arkasındaki ya da sunucunuza doğru UDP bağlantılarını kısıtlayan bir güvenlik duvarı kullanımının olduğu bazı ağlarda kullanıcılar medya sunucunuzla UDP üzerinden bağlantı kuramayabilir.

TURN protokolü, istemciyi TURN sunucusuna bağlanmaya zorlayarak UDP iletişim akışlarının NAT veya güvenlik duvarlarını atlamasına izin vermek ve ardından TURN sunucusunun hedeflerine kendi adına bağlanması için tasarlanmıştır.

Kontrolünüz altında bir TURN sunucusu kullanmak, multimedya uygulamanızla olan bağlantıların başarısını ve aynı zamanda bir proxy gibi davrandığından kullanıcı gizliliğini artırır; böylece eşlerin IP adres bilgilerini artık halka açık bir STUN sunucusuna göndermemiş olursunuz.

Gerekli Donanım

TURN protokolü çok fazla CPU veya RAM’e ihtiyaç duymaz. Buna ek olarak, yalnızca bağlantı kurulumu sırasında (STUN için) kullanıldığında bant genişliği gereksinimleri yüksek değildir. TURN sunucunuz bir medya proxy olarak kullanıldığında eşlerin gönderdiği akışlar kadar giriş ve çıkış bant genişliği ihtiyacı olacaktır. Orta sayıda bağlantı için, tek bir küçük VPS yapılandırması genellikle yeterlidir. CoTURN kurulum için kaynak önerilerimi aşağıda bulabilirsiniz:

  • En az iki vCPU
  • 4GB RAM.
  • 20GB HDD. SSD kullanılabilir, ancak zorunlu değildir.
  • Ağ performansı:
    • Düşük jitter (30ms’den az)
    • Düşük gecikme süresi (latency) (150ms’den az)
    • Her iki yöndeki medya akışlarını karşılayabilmek için yeterli bant genişliği.

Sunucunun NAT arkasında olmasında (Amazon EC2’de olduğu gibi) bir sorun yoktur, ancak herhangi bir porta (TCP 80 & 443, UDP 3478, 10000-20000) gelen tüm UDP ve TCP bağlantılarının coTURN sunucusuna iletilmesi gerekmektedir.

coTURN Gerekli Yazılım ve Kurulum Adımları

coTURN için Debian Netinst veya Ubuntu ile minimal bir sunucu kurulumu işinizi görecektir. CoTURN yazılımı TCP 443 portunu kullandığından, coTURN’ün yükleneceği sunucuda çalışan başka bir web uygulaması olamaz. (farklı bir portta olabilir tabi :))

coTURN, Debian ve Ubuntu repolarında mevcuttur ve apt-get ile kurulabilir:

$ sudo apt-get update
$ sudo apt-get install coturn

coTURN konfigürasyonu tamamlanıncaya kadar coTURN’un otomatik olarak başlamayacağını lütfen unutmayın. Konfigürasyon adımlarını aşağıda bulabilirsiniz.

CoTURN İçin DNS Girişi

CoTURN sunucunuzun harici IP adresini çözen tam bir alanı adı (FQDN) ayarlamanız gerekir. Aynı zamanda bir TLS sertifikası oluşturmak için de bu alanı adını kullanacaksınız.

TLS Sertifikaları Üretmek

Ücretsiz bir TLS sertifikası oluşturmak için Let’s Encrypt’i kullanan certbot‘u kullanabilirsiniz. Certbot’u kurmak için coTURN sunucunuzda aşağıdaki komutları girin:

$ sudo add-apt-repository ppa:certbot/certbot 
$ sudo apt-get update 
$ sudo apt-get install certbot

Daha sonra, TURN sunucunuza sertifikayı oluşturmak için alan adı adresinizi kullanarak aşağıdaki gibi bir certbot komutu çalıştırabilirsiniz:

$ sudo certbot certonly --standalone --preferred-challenges http \
    --deploy-hook "systemctl restart coturn" \
    -d turn.fatiherikci.com

Certbot komutunun mevcut sürümleri varsayılan olarak sertifikalarınızı otomatik olarak yeniler. Certbot sertifikayı yenilediğinde, coTURN servisini yeniden başlatacağını, böylece coTURN’nin güncellenmiş sertifika dosyalarını kullanmaya başlayacağını unutmayın. Bu işlem, sunucunuzun aktif olarak üzerinden geçirdiği TURN bağlantılarında kesintiye neden olacaktır. Bu durumu engellemek için isterseniz, sertifika yenileme zamanlamasını değiştirebilir veya otomatik yenilemeyi devre dışı bırakabilirsiniz.

CoTURN’ü Yapılandırmak

coTURN yapılandırması /etc/turnserver.conf dosyasında depolanır. Bu dosya için çok fazla seçenek mevcuttur ve bu seçenekler ile ilgili açıklamaları yorum satırlarında bulmanız mümkündür. Aşağıdaki örnekte, önerilen ayarlar olarak yorumların yanı sıra, özelleştirmenin gerekli olduğu yerlerde notların bulunduğu örnek bir yapılandırmayı bulabilirsiniz.

/etc/turnserver.conf dosyasının içeriğini aşağıdaki dosyayla değiştirebilir ve aşağıdaki değişiklikleri yapabilirsiniz:

  • turn.fatiherikci.com adresini TURN sunucunuzun ana bilgisayar adıyla değiştirin.
  • Diğer kalın harfler ile belirtilen satırları kendi sunucunuza göre değiştirin.

Aşağıda bir örnek yapılandırma dosyası görebilirsiniz:

server-name=turn.fatiherikci.com
realm=turn.fatiherikci.com
cert=/etc/letsencrypt/live/turn.fatiherikci.com/cert.pem
pkey=/etc/letsencrypt/live/turn.fatiherikci.com/privkey.pem
fingerprint 
listening-ip=0.0.0.0 
external-ip= 1.2.3.4/192.168.0.1 #ya da sadece dış IP yazın
listening-port=3478 
min-port=10000 
max-port=20000 
log-file=/var/log/turnserver.log 
verbose 
user=myusername:mypassword 
lt-cred-mech

Konfigürasyonu tamamladıktan sonra coTURN’ü çalıştırmak için aşağıdaki komutu kullanabilirsiniz:

$ systemctl start ​​coturn

CoTURN’u Servis Olarak Çalıştırmak

Debian / Ubuntu için olan coTURN paketini başlangıçta etkinleştirmek için /etc/default/coturn dosyasını açarak aşağıdaki satırın commentini açın:

TURNSERVER_ENABLED = 1

Bu kadar! coTURN kurulum adımlarımız tamamlandı. Artık çalışır durumda bir TURN sunucunuz var!

TURN Sunucunuzu Test Etmek

CoTURN sunucunuzu test etmek için Trickle-Ice test aracını kullanabilirsiniz. Trickle ICE’ın web sayfasına gidin ve aşağıdakileri girin:

  • STUN veya TURN URI: turn:PublicIPAdresiniz:3478
  • TURN username: kullanıcıadı
  • TURN password: şifre

Ardından Add Server düğmesini ve ardından Gather Candidates düğmesini tıklayın. Her şey yolunda giderse, sonuç olarak Done görmelisiniz.

ENUM Nedir? ENUM Sözdizimi

ENUM Nedir? ENUM Sözdizimi

ENUM (Telephone Number Mapping, E.164 Number to URI Mapping), telefon numaralarını URI formatına (isim@domain) çeviren bir adresleme protokolüdür. Bu sayede bir telefon numarasını çevirerek bir SIP, H.323 veya başka bir İnternet telefon kullanıcısına erişebilirsiniz.

ENUM fonksiyonunu kullanıcıların dünyanın her yerinde aynı numarayla, en kaliteli ve en ucuz yolla, ulaşılabilir olmasını amaçlar. ENUM, bir telefon numarasını DNS sisteminde bulunan bir İnternet adresi ile eşleştirir. Böylece, bir ENUM numarasına sahip olan bir kullanıcı, çağrının yönlendirileceği DNS kaydını yayınlayabilir. Hatta farklı arama türleri için (faks, video vb.) farklı yollar tanımlanabilir.

Bir ENUM kaydını bir alan adı alır gibi edinmeniz mümkün. Günümüzde pek çok kayıt hizmeti veren yer ve VoIP servis sağlayıcıları üzerinden bu kaydı ücretsiz olarak edinebilirsiniz.

ENUM Sözdizimi

ENUM, normal telefon (E.164) numaralarının, e164.arpa ile biten DNS adları olarak gösterilmesini sağlar. Bir numara önceden tanımlanmış bir veya daha fazla servis için çözülebilir.

Örneğin, +90-312-555-1234 telefon numarası, aşağıdaki kuralları RFC 3761‘de tanımlanan ve aşağıda belirtilen kurallardan geçtikten sonra 4.3.2.1.5.5.5.2.1.3.0.9.e164.arpa olarak gösterilir:

  1. Rakamlar hariç tüm karakterleri kaldırılır. (“+90-312-555-1234”, “903125551234” olur)
  2. Her sayı arasına nokta (“.”) koyulur. (“9.0.3.1.2.5.5.5.1.2.3.4”)
  3. Rakamların sırası ters çevirilir. (“4.3.2.1.5.5.5.2.1.3.0.9”)
  4. Dizinin sonuna “.e164.arpa” eklenir. (“4.3.2.1.5.5.5.2.1.3.0.9.arpa”)

Bu sözdiziminin cevaplandırılabilmesi için DNS sunucusunda şuna benzer bir kaydın bulunması gerekir:

$ORIGIN 4.3.2.1.5.5.5.2.1.3.0.9.arpa.
   NAPTR 10 100 "u" "E2U+sip" "!^.*$!sip:fatih.erikci@fatiherikci.com!" .
   NAPTR 10 101 "u" "E2U+h323" "!^.*$!h323:fatih.erikci@fatiherikci.com!" .
   NAPTR 10 102 "u" "E2U+msg" "!^.*$!mailto:fatih.erikci@fatiherikci.com!" . 

Bu kayıtta 4.3.2.1.5.5.5.2.1.3.0.9.arpa alanı için sıralı olarak üç farklı yönlendirme görüyorsunuz. 1. olarak SIP, ikinci H.323 ve üçüncü olarak SMTP cevabı dönmektedir, ilgili cihaz bu kayıtları kullanarak hangi servis ile iletişim kuracağını seçer.

Nasıl Çalışır?

ENUM’ın çalışma prensibi aslında Internet’te sürekli kullandığımız DNS sorgularına benzer. Sorgularda DNS NAPTR kaynak kayıtları kullanılır.

Bir ENUM Sorgusu ve Çağrısı
Bir ENUM Sorgusu ve Çağrısı
  1. Telefon bir E.164 numarası arar (+90-312-555-1234)
  2. Gateway bunu bir sözdizimine çevirir (4.3.2.1.5.5.5.2.1.3.0.9.e164.arpa) ve DNS sunucusuna sorar.
  3. DNS sunucusu bu sorguya bir URI (sip:fatih.erikci@fatiherikci.com) ile karşılık verir.
  4. Gateway artık çağrıyı bir SIP URI çağrısı olarak SIP sunucusuna gönderir.
  5. SIP sunucusu URI ile kayıtlı olan IP telefonu çaldırır.
Cisco Headset 730 Kulaklık

Cisco Headset 730 Kulaklık

Cisco 2019 Partner Summit’te yeni Webex serisi işbirliği ürünlerinin yanı sıra 700 serisi kulaklıklarını da tanıttı.

Bildiğiniz üzere, tümleşik iletişim alanında bir çok ürün ve teknoloji sunan Cisco, geçtiğimiz yıllarda 500 serisi ile Jabra, Plantronics ve Sennheiser gibi büyük oyuncuların olduğu telefon kulaklık pazarına giriş yapmıştı. Bu yıl da iş ortakları zirvesinde biraz daha mobil çalışan segmentini hedefleyen 700 serisini tanıtmış oldu.

Cisco Headset 730 Özellikleri

700 serisi kulaklıklar temel olarak seyahat eden mobil çalışanları hedefleyen bir seri. Özellikle kalabalık ortamlarda, gürültü önleme mekanizmaları ile hem kulaklığı kullanan hem de görüşme yapılan karşı taraf için oldukça temiz berrak bir iletişim sağlanabiliyor. Bunun yanı sıra BT 5.0, çoklu bağlantı gibi ek özellikler sunan Cisco 700 serisi kulaklıkların detaylı özelliklerini bulabilirsiniz:

  • Bluetooth 5.0 , USB-A ve 3.5mm Üzerinden Bağlantı
  • Premium Kodek Desteği (SBC, AAC, aptX, aptXHD)
  • 4 Mikrofon ile Aktif Arka Plan Gürültü Azaltma
  • 2 Elektret Kondenser Mikrofon ile Berrak Ses İletimi
  • Akıllı Sensör Teknolojisi (Kulaklığı Çıkarınca Sessize Alma)
  • Patlama Önleyici Mikrofon
  • Kulak Üstü Kontrolleri
  • Sesle Aktive Edilebilen Yapay Zeka
  • Özelleştirilmiş Deneyim için Cisco Headset Uygulaması (App Store & Google Play)
  • Otomatik Ürün Yazılım Yükseltmeleri

Cisco 700 serisi kulaklıkların 500 serisi ile karşılaştırmasının olduğu tabloyu aşağıda bulabilirsiniz:

700 Serisi500 Serisi
Kimler İçin Uygun?Mobil / Ofis ÇalışanlarıOfis / Çağrı Merkezi Çalışanları
Ana Bağlantı TürüBluetooth 5.0Kablo / DECT
Konuşma Süresi15+ Saat9 Saat
Eş Zamanlı Bağlantı Sayısı 2 BT + 1 USBBaz İstasyonuna Bağlı
Kablosuz Kapsama Alanı65+ mt.90+ mt.
Kulağa Takma BiçimiSadece Binaural Binaural & Monaural
Renk SeçenekleriPlatin & Karbon SiyahSiyah
Aktif Gürültü EngellemeVarYok
Gürültü Azaltıcı MikrofonVarVar
RJ-9 BağlantıYokVar
Cisco 730 Serisi Kulaklıklar 2 Renk Seçeneği ile Geliyor

Daha detaylı bilgi için Cisco 730 serisi kulaklıkların datasheet sayfasına buradan ulaşabilirsiniz.

Fiyatı

Henüz çok yeni tanıtılan Cisco 730 serisi kulaklığın fiyatı belirlenmiş değil ama 560 serisi kablosuz kulaklıkların liste fiyatının 600$ seviyesinde olduğunu düşünürsek, kendi tahminimce liste fiyatı 800$ – 900$ bandında olacaktır.

Son Söz

Cisco 730 serisi kulaklığı ile hem tüketici pazarını hedefleyen hem de iş amaçlı kullanılabilecek profesyonel bir çözüm sağlamış. Özellikle sık seyahat edenler için oldukça kullanışlı bir ürün olmuş.