Bu ileri bir yontemtir.
Her zaman kendi servislerini barındırmayı (self-hosting) seven biri oldum, ancak daha önce VoIP ile ilgili bir projeye girişmemiştim. Kısa süre önce birkaç IP telefon satın aldım ve Asterisk kullanarak evimde kişisel bir telefon ağı kurdum. Bu rehber, açık kaynaklı araçlar kullanarak kendi dijital telefon sisteminizi oluşturmanıza yardımcı olacaktır.
Bu rehber, self-hosting konusunda deneyimli ancak VoIP hakkında pek bilgisi olmayan kişiler için yazılmıştır. Bu nedenle, kısa ve öz kalabilmek adına bazı teknik ayrıntıları yüzeysel geçeceğim.
SIP: Kısa Bir Giriş
Telefon yapılandırmalarına ve Asterisk dialplan’larına geçmeden önce, kullanılan temel ağ protokollerini anlamakta fayda vardır. Bu bilgi, ileride sesli görüşmeler sırasında karşılaşacağınız bağlantı sorunlarını çözmede işinizi oldukça kolaylaştıracaktır.
Session Initiation Protocol (SIP), son yirmi yılda üretilen neredeyse tüm dijital telefon cihazlarında kullanılan bir sinyalleşme protokolüdür. VoIP telefonları, yazılım tabanlı telefonlar (softphone), konferans cihazları ve daha fazlası SIP kullanır. SIP hem TCP hem de UDP üzerinden çalışabilir ve genellikle 5060 numaralı portu dinler.
SIP hakkında bilmeniz gereken iki önemli nokta vardır:
- SIP ses verisini taşımaz. Yalnızca sinyalleşme amacıyla kullanılır. Ses akışının hangi IP adresi, port ve ses kodeği üzerinden gerçekleşeceğini belirler.
- SIP, 1999 yılında geliştirildiğinde her cihazın genel (public) bir IP adresine sahip olduğu varsayılmıştı. IPv6'nın NAT'ı ortadan kaldıracağı düşünülüyordu. Ancak işler beklendiği gibi gelişmedi.
Örneğin, aynı yerel ağdaki iki VoIP telefonunun birbirini aradığını düşünelim:
- Telefon A: “Merhaba 192.168.1.6, G.711 kodeğiyle görüşme yapmak istiyorum. Ses paketlerini 192.168.1.5 adresindeki 20000 portuna gönder.”
- Telefon B: “Tamam, G.711 destekliyorum. Sen de ses paketlerini 192.168.1.6 adresindeki 30000 portuna gönder.”
SIP görüşmesi tamamlandıktan sonra telefonlar ses verisini
RTP (Real-Time Transport Protocol) kullanarak birbirlerine gönderirler. Aynı ağda oldukları için her şey sorunsuz çalışır.
NAT Problemleri
Şimdi yerel ağ dışındaki bir kişiyi aradığımızı düşünelim.
Yönlendiricimizin genel IP adresi 203.0.113.8 olsun. Arkadaşımız Alice ise 198.51.100.7 adresinde bulunsun.
- Biz: “Merhaba 198.51.100.7, Alice orada mı? Ses paketlerini bana 192.168.1.5 adresindeki 20000 portundan gönder.”
- Alice: “Kaynak IP adresin 203.0.113.8 görünüyor ama bana 192.168.1.5 diyorsun. İlginç... Tamam, ses paketlerini 198.51.100.7 adresindeki 30000 portuna gönder.”
NAT sayesinde SIP bağlantısı kurulabilir. Ancak genellikle ses yalnızca tek yönde çalışır.
Bunun iki nedeni vardır:
- Alice'e yerel IP adresimizi göndermiş oluruz. Bu adres internet üzerinden yönlendirilemez.
- Yönlendiricimiz Alice'ten gelen RTP paketlerini hangi iç istemciye ileteceğini bilemez ve bu paketleri sessizce düşürür.
NAT Çözümleri
Bu sorunu çözmenin üç yolu vardır:
1. Her SIP cihazına genel IP vermek
Pratikte çoğu kullanıcı için mümkün değildir.
2. SIP ALG kullanmak
Bazı yönlendiricilerde bulunan SIP Application Layer Gateway özelliği SIP paketlerini inceleyip gerekli NAT kurallarını otomatik oluşturur.
Ancak:
- Genellikle hatalı çalışır.
- TLS ile şifrelenmiş SIP trafiğinde işe yaramaz.
- Birçok VoIP uzmanı tarafından önerilmez.
3. Statik RTP portları kullanmak
En mantıklı yöntem budur.
Her cihaz için belirli RTP port aralıkları tanımlanır ve yönlendiricide bu portlar ilgili cihazlara yönlendirilir.
Asterisk kullanıyorsanız tüm ses trafiğini Asterisk üzerinden geçirerek yalnızca tek bir port yönlendirme kuralı oluşturabilirsiniz.
Asterisk Nedir?
Asterisk, açık kaynaklı bir
PBX (Private Branch Exchange) yazılımıdır.
PBX, özel telefon ağlarının merkezi yönetim sistemidir.
Görevleri şunlardır:
- Dahili telefonların birbirini aramasını sağlamak
- PSTN (geleneksel telefon ağı) bağlantılarını yönetmek
- Sesli mesaj (voicemail)
- Çağrı kuyrukları
- Otomatik karşılama menüleri
- Çağrı yönlendirme
Geçmişte PBX sistemleri büyük fiziksel cihazlardı. Günümüzde ise Ethernet ağları üzerinde çalışan yazılım tabanlı çözümler kullanılmaktadır. Asterisk, açık kaynak dünyasında fiili standart haline gelmiştir.
Temel Terimler
Extension (Dahili Numara)
Genellikle 6001 gibi dahili telefon numaralarını ifade eder.
Queue (Kuyruk)
Gelen çağrıların hangi telefonlara yönlendirileceğini belirler.
SIP Trunk
VoIP servis sağlayıcınızla olan bağlantıdır.
Örneğin:
Bu servisler size:
- Telefon numarası
- SIP sunucusu adresi
- Kullanıcı adı
- Şifre
sağlar.
DID
Public telefon numarasının teknik adıdır.
Context
Asterisk'te her çağrı bir context içinde işlenir.
Örnek:
Dialplan
Asterisk'in çağrı mantığını tanımlayan betik sistemidir.
Codec
Sesin ağ üzerinden hangi formatta taşınacağını belirler.
Yaygın kodekler:
- G.711 (evrensel destek)
- G.722 (yüksek kalite)
- Opus
BLF (Busy Lamp Field)
Telefon üzerindeki LED göstergenin başka bir hattın meşgul olup olmadığını göstermesini sağlar.
PJSIP
Günümüzde Asterisk için önerilen SIP altyapısıdır.
Eski chan_sip modülü artık tercih edilmez.
Adım 1: Bir IP Telefon Edinin
SIP destekleyen herhangi bir cihaz kullanılabilir.
Başlangıç için önerilen modeller:
- Yealink T54W
- Yealink W73P
Fiziksel telefon almak istemiyorsanız:
gibi softphone uygulamalarını kullanabilirsiniz.
Adım 2: Bir VoIP Sağlayıcısına Abone Olun
PSTN ile görüşebilmek için bir VoIP sağlayıcısına ihtiyacınız vardır.
Genellikle aylık maliyet:
karşılığında:
- Telefon numarası (DID)
- SIP hesabı
elde edilir.
Önerilen sağlayıcılar:
VOIP.ms
Avantajları:
- ABD, Kanada ve Avrupa sunucuları
- TLS/SRTP desteği
- Düşük maliyet
JMP.chat
Avantajları:
- XMPP tabanlı yapı
- SMS/MMS desteği
- Tamamen açık kaynak ekosistem
Adım 3: Asterisk Kurulumu
RHEL tabanlı sistemlerde:
dnf install asterisk asterisk-pjsip asterisk-voicemail-plain<br>
Ses dosyalarını yüklemek için:
for codec in g722 g729 gsm sln16 ulaw wav; do<br> curl -sL "
https://downloads.asterisk.org/pub/telephony/sounds/asterisk-core-sounds-en-${codec}-current.tar.gz" \<br> | tar xvz -C /usr/share/asterisk/sounds<br>done<br>
Ağ Yapılandırması
/etc/asterisk/pjsip.conf dosyasında:
- Yerel ağlar tanımlanır.
- NAT ayarları yapılır.
- Harici IP belirtilir.
Örnek:
external_media_address = 203.0.113.8<br>external_signaling_address = 203.0.113.8<br>
RTP Portları
/etc/asterisk/rtp.conf
[general]<br>rtpstart=20000<br>rtpend=20999<br>
Bu UDP port aralığının yönlendiricide Asterisk sunucusuna yönlendirilmesi gerekir.
Aksi halde tek yönlü ses problemi yaşanır.
SIP Trunk Yapılandırması
pjsip_wizard.conf içinde SIP sağlayıcınızın:
- Sunucu adresi
- Kullanıcı adı
- Şifresi
tanımlanır.
Örnek:
remote_hosts = atlanta2.voip.ms:5060<br><br>outbound_auth/username = 555555<br>outbound_auth/password = s3cret<br>
Dahili SIP Hesapları
Her telefon için bir extension oluşturulur:
- 6001 → Salon telefonu
- 6002 → Mutfak telefonu
- 6003 → Android telefon (Linphone)
Her hesap için:
inbound_auth/username = 6001<br>inbound_auth/password = s3cret<br>
tanımlanır.
Sesli Mesaj (Voicemail)
voicemail.conf dosyasında yapılandırılır.
Örnek:
[default]<br>6000 => 1234,John Doe,
[email protected]<br>
Bu yapı sayesinde:
- Sesli mesaj bırakılabilir
- E-posta bildirimi gönderilebilir
- Ses dosyaları sunucuda saklanabilir
Çağrı Kuyrukları
Tüm telefonların aynı anda çalması için:
strategy = ringall<br>
kullanılır.
Bu yapı gelen çağrıları:
- Salon telefonu
- Mutfak telefonu
- Mobil telefon
gibi tüm cihazlara aynı anda yönlendirir.
Dialplan
Dialplan, Asterisk'in en güçlü ve aynı zamanda en karmaşık bölümüdür.
Örnek:
[from-home]<br><br>exten => _6XXX,1,Dial(PJSIP/${EXTEN})<br> same => n,Hangup()<br>
Bu kural:
gibi dahili numaraların birbirini aramasını sağlar.
Makaledeki tam dialplan şu özellikleri sunmaktadır:
- Dahili aramalar
- PSTN aramaları
- Sesli mesaj erişimi (*99)
- BLF desteği
- Tüm telefonların aynı anda çalması
- Ev içi interkom sistemi
Sorun Giderme
Asterisk'i yeniden başlatın:
systemctl restart asterisk<br>
Logları inceleyin:
journalctl -u asterisk<br>
Asterisk konsoluna bağlanın:
asterisk -rvvvvv<br>
SIP hata ayıklama:
pjsip set logger on<br>
Adım 4: IP Telefonların Yapılandırılması
Örnek olarak Yealink cihazı:
SIP Hesabı
- Register Name: 6001
- Username: 6001
- Password: s3cret
- Server Host: Asterisk sunucusu
- Port: 5060
- Transport: UDP
Codec Sırası
- G722
- PCMU (ulaw)
Voicemail Tuşu
*99<br>
BLF
İzlemek istediğiniz dahili numarayı BLF olarak ekleyin.
Intercom
Auto-answer özelliğini etkinleştirin.
Android'de Linphone Kullanımı
Android 12 sonrasında yerleşik SIP istemcisi kaldırılmıştır.
Önerilen uygulama:
Linphone
Önerilen ayarlar:
- Username: 6003
- Password: SIP şifresi
- Domain: Asterisk sunucusu
- Transport: TCP
- Expire: 3600
Ek ayarlar:
- Echo Cancellation: Kapalı
- Adaptive Rate Control: Açık
- Codec Bitrate Limit: 128 kbit/s
- Bluetooth entegrasyonu: Açık
- Voice Mail URI: *99
- Start at Boot: Açık
Pil optimizasyonlarının kapatılması da önerilir.
Sonuç
Bu yapılandırmayı birkaç aydır birincil telefon numaram için kullanıyorum ve sonuçlardan oldukça memnunum.
Kendi VoIP altyapınızı barındırmayı düşünüyorsanız:
- QoS yapılandırması yapın.
- RTP trafiğine öncelik verin.
- Gecikme ve paket kaybını azaltın.
- İsterseniz SIP TLS ve SRTP ile görüşmeleri şifreleyin.
Her ne kadar PSTN'e bağlandığınız anda görüşmeler yine açık metin hâline gelse de, yerel ağ ve SIP bağlantılarının şifrelenmesi ek güvenlik sağlayabilir.