Browsed by
Kategori: Video Konferans

Video konferans teknolojileri ve çözümleri ile ilgili yazılar.

Jitsi Meet Ubuntu’ya Nasıl Kurulur?

Jitsi Meet Ubuntu’ya Nasıl Kurulur?

Kısa Not: Jitsi Meet kurulumu ile ilgili profesyonel hizmet almak isterseniz bana iletişim linkinden ulaşabilirsiniz.

Jitsi Meet, çok kullanışlı ve basit, WebRTC tabanlı açık kaynaklı çok platformlu bir video konferans çözümüdür. Jitsi Meet’i bulut tabanlı veya kendi sunucularınızda da kullanabilirsiniz. Bu blog yazımda, Jitsi sunucusunu Ubuntu tabanlı linux platformunuza nasıl kuracağınızı açıklayacağım.

Jitsi Meet’i Ubuntu linux platformuna kurmak oldukça kolaydır. Bu kılavuzda, Jitsi sunucusunu Ubuntu 18.04 üzerinde .deb paketlerini kullanarak nasıl kurulacağını bulabilirsiniz.

Bu kurulum yazısında sizin Ubuntu’yu kurabileceğinizi farz ediyorum ve Jitsi kurulumuna temel kurulum noktasından devam edeceğim.

Öncelikle, sudo & ssh gibi temel paketleri kuralım. Konsoldan root olarak oturum açın, ardından gerekli paketleri kurun.

apt-get install -y ssh sudo ufw apt-transport-https

Root olmayan kullanıcınızı (benimki ferikci) /etc/sudoers dosyasına ekleyin.

ferikci  ALL=(ALL:ALL) ALL

Artık sudo komutlarını kullanarak mevcut kullanıcınızla devam edebilirsiniz.

Opsiyonel: UFW güvenlik duvarını etkinleştirin ve gereken portları açın:

sudo ufw allow in ssh 
sudo ufw allow in http 
sudo  ufw allow in https 
sudo  ufw allow in 10000/udp 
sudo  ufw enable 

Eğer linux makinenize SSH ile bağlıysanız, “ufw allow ssh” komutunu girdikten sonra “ufw enable” komutunu girin, aksi takdirde mevcut SSH bağlantınızı kaybedebilirsiniz.

Eğer Jitsi sunucusunu bir hostname ile kullanacaksanız /etc/hosts dosyasında ilgili hostname in blunduğuna emin olun:

127.0.0.1 localhost jitsi.test.local

Ardından linux makinenizi yeniden başlatın:

reboot

Şimdi kurulumun geri kalanında mevcut kullanıcınızla SSH üzerinden tekrar oturum açın.

Jitsi GPG anahtarını ekleyin.

 wget -qO - https://download.jitsi.org/jitsi-key.gpg.key | sudo apt-key add - 

Ubuntu sistemlerinde Jitsi, Ubuntu’nun “universe” paketi deposundan bağımlılıklar gerektirir. Bunun için aşağıdaki komutla universe reposunu da ekleyin:

apt-add-repository universe

Daha sonra Jitsi deposunu ekleyin ve apt yi güncelleyin

sudo sh -c "echo 'deb https://download.jitsi.org stable/' > /etc/apt/sources.list.d/jitsi-stable.list"
sudo apt-get -y update 

Jitsi-Meet Kurulumu

Artık Jitsi sunucu kurulumuna hazırsınız. Jitsi-meet’i bağımlılıklarıyla birlikte kurmak için aşağıdaki komutu kullanın:

sudo apt-get -y install jitsi-meet

Kurulum esnasında bilgisayar adınız (hostname) sorulacak ancak, sadece bilgisayar adınızı yazmayın, bu alana bilgisayar adınızı FQDN olarak yazmalısınız, aksi takdirde bağlantı ile ilgili sorunlarla karşılaşabilirsiniz. Bu arada, FQDN’nin DNS sunucuları tarafından çözüğlebildiğinden emin olun. (Ya da FQDN’i bilgisayarınızın hosts dosyanıza ekleyebilirsiniz.).

Jitsi Hostname (FQDN) Ayarları

Kurulumda bundan sonra sertifika istenecektir. Ben bu kurulumda kendinden imzalı SSL sertifikası kullanacağım, bu yüzden ilk seçeneği seçiyorum.

Jitsi SSL Sertifika Konfigürasyon Menüsü

Kurulum bir süre sonra tamamlanacak ve komut istemine geçecektir.

Şimdi video konferans GUI’nize bağlanma zamanı geldi. Jitsi sunucusunun ana sayfasına gitmek için https://FQDN adresini kullanın:

https://jitsi.test.local

Oda adı giriş alanına sahip bir ana sayfa göreceksiniz. Bir oda adı girin ve Go düğmesine tıklayın.

Jitsi Meet Ana Sayfa

Hepsi bu kadar! Aynı prosedürle veya https://FQDN/odaadı URL’sini kullanarak odanıza daha fazla katılımcı ekleyebilirsiniz.

https://jitsi.test.local/testroom
Ve Jitsi Meet Çalışır

Jitsi’yi Bir NAT Arkasında Çalıştırmak

Jitsi sunucunuzu iç IP ile bir NAT arkasında kullanmak istiyorsanız, yönlendiricinizi aşağıdaki portları Jitsi Meet sunucunuza yönlendirecek şekilde yapılandırmanız (port forwarding) gerekir:

  • 80/TCP
  • 443/TCP
  • 10000/UDP

Ardından /etc/jitsi/videobridge/sip-communicator.properties dosyasına iç ve dış IPlerinizi içeren aşağıdaki satırları eklemeniz gerekir:

org.ice4j.ice.harvest.NAT_HARVESTER_LOCAL_ADDRESS=[İÇ.IP.ADRESİ]
org.ice4j.ice.harvest.NAT_HARVESTER_PUBLIC_ADDRESS=[DIŞ.IP.ADDRESİ]

Örnek olarak kendi konfigürasyonum şöyle:

org.ice4j.ice.harvest.NAT_HARVESTER_LOCAL_ADDRESS=192.168.1.20
org.ice4j.ice.harvest.NAT_HARVESTER_PUBLIC_ADDRESS=95.9.74.32

Coronavirus e Karşı Ücretsiz Video Konferans Hizmeti

Coronavirus e Karşı Ücretsiz Video Konferans Hizmeti

Tüm dünyayı tehdit eden Coronavirüs ün (COVID-19) yayılmasını önlemek için, seyahat etmeden uzaktan çalışmak / işbirliği yapmak, ya da sevdikleriniz ile görüntülü görüşmek için iyi bir zaman. Aşağıdaki linkte herkesin hizmetine sunduğum video konferans sunucusu ile bunu yapabilirsiniz.

Kayıt olmanıza, her hangi bir kullanıcı bilgisi girmenize gerek yok. Aşağıdaki bağlantıyı tıklayarak kolayca görüntülü arama odası oluşturabilirsiniz:

https://fatiherikci.com/videocall/

Bir video görüşmesi odası oluşturup katıldıktan sonra, tarayıcınızdaki sayfa URL’ini seçip kopyalayabilir ve aynı odaya katılabilmeleri için diğer katılımcılarla paylaşabilirsiniz. 🙂

Not: Bu sayfa en iyi Chrome / Chromium ve Opera ile çalışır.

Cisco Webex Room USB İnceleme

Cisco Webex Room USB İnceleme

Video konferans ve işbirliği teknolojilerinde bildiğiniz üzere Cisco en yüksek pazar payına sahip olan bir donanım ve yazılım üreticisi. Ancak geçtiğimiz 1-2 yıl içinde yazılım tabanlı çözümler çıktıkça tümleşik video konferans cihazlarının yanında ses ve görüntü alıcı verici donanımlarına da rağbet artmaya başladı. Bu pazarda başı Logitech çekerken piyasaya bir çok yenilikçi ürün de çıkmıştı (Hatta bunların arasından bence en inovatif olan Jabra Panacast i de bu yazımda incelemiştim). Cisco da bu pazarda pay almak istiyor olacak ki geçtiğimiz Ocak ayında yeni adlandırdığı ürünü olan Webex Room USB ile ciddi bir giriş yaptı.

Cisco Webex Room USB, her hangi bir uç noktayı (Laptop, Desktop, SFF PC vb.) bir video işbirliği merkezine dönüştüren bir cihaz. Kullandığınız yazılımın Cisco olmasına bile gerek yok, herhangi bir işbirliği platformu (Microsoft Teams, S4B, Zoom, Slack, Jitsi vb.) ile bu cihazı kullanabilirsiniz. Dilerseniz Cisco Webex Room USB’nin özelliklerini daha ayrıntılı olarak inceleyelim.

Cisco Webex Room USB Özellikleri

Cisco Webex Room USB, 120 derecelik görüş açısına sahip kamerası sayesinde 2-5 katılımcılı toplantı odaları için oldukça ideal bir cihaz. Temel olarak cihaz gömülü kameraya sahip bir soundbar biçiminde ve ekranın üzerine yerleştiriliyor. Bunun dışında bir uzaktan kumandası ve bir USB kablosu var. Bunların yanında ekran ve duvara montaj için aparatlar, kamera için fiziksel bir gizlilik kapağı ve HDMI ve Ethernet bağlantısı için iki kablo da mevcut. Cihazın öne çıkan teknik özellikleri ise şu şekilde:

  • Kamera Kalitesi : Cisco Webex Room USB, saniyede 60 kare hızında video çekebilen bir 4K UltraHD kameraya sahiptir. 8MP görüntü sensörü ile desteklenen parlaklık ve beyaz dengesini maksimum netlik için otomatik olarak ayarlayabilir. İçerdiği yapay zeka teknolojisi ile toplantı katılımcılarını otomatik olarak algılayarak herkesin açıkça görülebilmesi için görüntüyü akıllıca çerçeveleme özelliğine ve toplantılar için bir takım analitik fonksiyonlara sahiptir.
  • Ses Kalitesi : Cihazın üzerinde entegre mikrofonlar ve hoparlörler bulunur. Otomatik gürültü azaltma özelliği sayesinde kağıt hışırtısı, çay karıştırma sesi gibi genelde dikkati dağıtan ortam seslerini filtreleyebilir. Hoparlör tasarımı sayesinde özellikle insan sesinin ağırlıklı bulunduğu pes frekanslarda daha doygun bir ses deneyimi sunar. Diğer üreticiler (Logitech) ile aradaki ses farkını dinlemek için bu linkteki videoya bakabilirsiniz.
  • Dijital Tabela Ekranı : Bu özellik sanırım Cisco Webex Room USB’nin diğer rakiplerinden ayıran en önemli özelliği. Cihaz kullanımda değilken, bağlı PC ekranlarını dijital bir tabelaya dönüştürmek için kullanılabilir. Kurumsal haberleri paylaşmak, marka bilinci oluşturmak vb. işler için bunu kullanabilirsiniz.
  • İçerik Paylaşımı : Cisco Webex Room USB, 4K içerik paylaşımını ve ayrıca cihaz browser üzerinden kablosuz içerik paylaşımını destekliyor. Bu sayede içeriğinizi kolay bir şekilde ekrana yansıtma imkanı bulabilirsiniz.
Webex Room USB’yi Bir Dijital Tabela Ekranı Olarak Da Kullanabilirsiniz

Bunların dışında daha detaylı teknik özelliklere bu linkteki datasheet üzerinden erişebilirsiniz.

Başta da dediğim gibi bu pazarda başta Logitech olmak üzere birkaç oyuncu mevcut. Aşağıdaki tabloda ise en çok bilinen iki cihaz ile karşılaştırmayı bulabilirsiniz:

Ürün / ÖzellikCisco Webex Room USBLogitech MeetUpPoly Studio
USB Kamera, Hoparlör ve MikrofonVar Var Var
Akıllı Kamera ve Ses Var Yok Yok
Cihaz Ayarları Var (Webex Control HUB ile) Yok Yok
Tarayıcı üzerinden Kablosuz İçerik Paylaşımı Var (Webex veya web browser ile) Yok Yok
Dijital Tabela Ekranı Var Var (Webex Control HUB ile) Yok Yok

Aşağıdaki videoda Webex Room USB’yi bilgisayarınıza bağlayıp nasıl ses ve video cihazı olarak kullanabileceğinizi görebilirsiniz:

Cisco Webex Room Kit Mini USB

Cisco Webex Room USB Fiyatı

Eğer video görüşmeleriniz için bir yazılım çözümünüz veya bir servis üyeliğiniz varsa Webex Room Kit Mini kalitesinde bir görüşme deneyimi sağlayan bu cihaza 2.750$ lık bir liste fiyatı (tabi ki gerçek satış fiyatı bu değil) ile sahip olabilirsiniz. Webex Room Kit Mini ile kıyasladığımızda Webex Room USB’nin fiyatı Mini fiyatının yarısının da altında.

Son Söz

Küçük ölçekli işletmeler ve video iletişimine geçmek isteyen kuruluşlar için Cisco Webex Room USB ile başlamak ve daha sonrasında bir yükseltme kiti ile Room Kit Mini’ye dönüştürmek iyi bir fikir olabilir. Bu sayede hem başlangıç yatırımlarını oldukça düşük tutabilir hem de görüşme deneyimini en üst seviyede sağlayacak bir çözüme sahip olabilirsiniz.

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.