IP Santralde Ses Gitmiyor mu? MikroTik SIP ALG ve NAT Çözümü
IP santralde tek yönlü ses ve düşen kaydın en sık nedeni SIP ALG. MikroTik'te service-port sip kapatma, doğru dst-nat, RTP port aralığı ve sniffer ile teşhis.
Erdem Özyurt
Kısa cevap: MikroTik arkasındaki IP santralde tek yönlü ses, hiç gitmeyen ses veya düşen kayıt görüyorsanız ilk şüpheli SIP ALG’dir, MikroTik’teki adıyla SIP helper. /ip firewall service-port set sip disabled=yes ile kapatıp telefonları yeniden kaydettirin; sahada gördüğüm vakaların büyük çoğunluğu burada biter. Bitmeyenler için bu yazıda belirtiden nedene giden tablo, yerinde santral için doğru dst-nat ve RTP aralığı kurulumu, en sonda da sniffer ile teşhis var.
Belirti tablosu: hangi belirti hangi nedeni gösterir?
VoIP sorununda ilk iş belirtiyi doğru okumaktır, çünkü sinyalleşme (SIP) ve ses (RTP) ayrı kanallardır ve her belirti farklı bir katmanı işaret eder. Aşağıdaki tablo teşhisi kısaltır:
| Belirti | En olası neden |
|---|---|
| Arama kuruluyor ama ses tek yönlü (siz duyuyorsunuz, karşı taraf duymuyor veya tersi) | RTP tek yönde NAT’ı geçemiyor: SIP ALG SDP’deki adres bilgisini bozmuş veya RTP port aralığı santrale yönlendirilmemiş |
| Arama kuruluyor, iki tarafta da ses yok | RTP tamamen bloke: yanlış to-addresses, eksik RTP dst-nat’ı veya forward zincirinde drop |
| Arama yaklaşık 30 saniye sonra kopuyor | Karşı tarafın gönderdiği onay (ACK) veya oturum yenilemesi NAT’ı geçemiyor; bozulmuş SIP başlığının klasik izidir |
| Telefon kaydı düşüyor, gelen arama bazen hiç çalmıyor | NAT’taki UDP eşleşmesi zaman aşımına uğruyor: kayıt yenileme süresi çok uzun, keep-alive kapalı |
| Bazı aramalar sorunlu, bazıları değil, davranış rastgele | SIP ALG ile santralin kendi NAT çözümü aynı paketi düzeltmeye çalışıyor; ikisi çakışınca sonuç tahmin edilemez |
Tablo sizi hangi satıra götürdüyse ilgili bölüme atlayın; ama her durumda ilk adım aynı: SIP helper’ı kapatmak.
SIP ALG nedir, MikroTik’te neden kapatılır?
SIP ALG, RouterOS’ta /ip firewall service-port altındaki NAT yardımcılarından biridir ve NAT arkasından geçen SIP paketlerinin içindeki özel IP adreslerini kendince yeniden yazar. Sorun şu: bugünkü santraller ve bulut VoIP servisleri NAT problemini zaten kendi tarafında çözer (dış IP tanımı, kısa kayıt süresi, keep-alive, STUN). İki mekanizma aynı paketi aynı anda düzeltmeye kalkınca ortaya bozuk başlık ve tablodaki rastgele belirtiler çıkar. Bu yüzden santral üreticilerinin kurulum dokümanlarının neredeyse tamamı ilk madde olarak SIP ALG’nin kapatılmasını ister.
/ip firewall service-port print
# mevcut yardımcıları ve durumlarını listeler; sip satırına bakın
/ip firewall service-port set sip disabled=yes
# SIP helper'ı kapatır; kalıcıdır, yeniden başlatma gerekmez
Kapattıktan sonra iki şey daha yapın:
/ip firewall connection remove [find dst-address~":5060"]
# eski SIP bağlantı izlerini temizler; açık kalan izler eski davranışı sürdürür
/ip firewall service-port print
# sip satırının başında X (disabled) görmelisiniz
Telefonları veya santral servisini yeniden başlatın ki temiz kayıtla (REGISTER) gelsinler. Bir not: resmi dokümandaki sip-direct-media ve sip-timeout parametreleri yalnızca helper açıkken anlamlıdır; helper’ı kapattığınızda ikisiyle de uğraşmanıza gerek kalmaz.
Senaryonuza göre: bulut santral mi, yerinde santral mi?
Yapılacak işlem listesi santralin nerede durduğuna göre ikiye ayrılır. Telefonlarınız içeride, santral bir bulut servisindeyse (hosted VoIP) çoğu zaman helper’ı kapatmak yeterlidir; telefonlar bağlantıyı içeriden dışarı kurduğu için port yönlendirmeye gerek yoktur. Santral kendi ağınızın içindeyse (yerinde kurulum, SIP trunk veya dışarıdan bağlanan telefonlar) helper’a ek olarak doğru dst-nat gerekir.
- Bulut santral + içerideki telefonlar: SIP helper’ı kapat, telefonlarda kayıt süresini kısalt (bir sonraki bölümde neden). dst-nat ekleme; gerek yok ve gereksiz açık yüzey yaratır.
- Yerinde santral + SIP trunk veya dış telefonlar: SIP helper’ı kapat, aşağıdaki dst-nat kurulumunu yap, santralde dış IP tanımını kontrol et.
Yerinde santral için doğru dst-nat ve RTP aralığı
Yerinde santralde iki ayrı yönlendirme gerekir: sinyalleşme portu (genelde UDP 5060) ve ses trafiğinin aktığı RTP port aralığı. En sık yapılan hata yalnız 5060’ı yönlendirmektir; arama kurulur, ses gelmez. Genel dst-nat mantığını ve hairpin gibi tamamlayıcıları port yönlendirme rehberimde anlattım; burada VoIP’e özel biçimi kuruyoruz. Örnekte santral 192.168.10.50:
/ip firewall address-list add list=sip-operator address=203.0.113.20 comment="SIP trunk saglayici"
# yalniz operatorunuzun IP'sine izin verin; adresi saglayicinizdan alin
/ip firewall nat add chain=dstnat protocol=udp dst-port=5060 \
src-address-list=sip-operator in-interface-list=WAN \
action=dst-nat to-addresses=192.168.10.50 comment="SIP sinyallesme"
/ip firewall nat add chain=dstnat protocol=udp dst-port=10000-20000 \
src-address-list=sip-operator in-interface-list=WAN \
action=dst-nat to-addresses=192.168.10.50 comment="RTP ses trafigi"
Üç kritik ayrıntı:
- RTP aralığını santralinizden okuyun, tahmin etmeyin. Asterisk ve FreePBX varsayılanı 10000-20000, 3CX varsayılanı 9000-10999’dur; markanıza göre bambaşka olabilir. Kuraldaki aralık santralin ayarıyla birebir aynı olmalı.
src-address-listsatırı pazarlık konusu değil. 5060’ı tüm internete açarsanız SIP tarayıcı botları dakikalar içinde deneme aramaları ve şifre denemeleriyle gelir; bu taramaların yoğunluğunu honeypot verilerimde her gün görüyorum. Operatörünüzün sinyalleşme IP’lerini listeye koyun, gerisi kapı görmesin.- Santralde dış IP tanımlı olmalı. Helper kapalıyken SIP paketlerinin içine doğru genel IP’yi yazmak santralin işidir; ayarlarda “external address”, “public IP” veya “NAT address” alanını WAN adresinizle (dinamik IP’de DDNS adıyla) doldurun. Bu alan boşsa SDP’ye özel IP yazılır ve ses tek yönlü kalır.
Operatörünüz TLS üzerinden sinyalleşme kullanıyorsa (genelde TCP 5061) kuralı protocol=tcp dst-port=5061 olarak uyarlayın. Varsayılan RouterOS firewall’ı dst-nat’lanmış trafiğe izin verir; forward zincirini kendiniz sıkılaştırdıysanız aynı port ve kaynak kısıtıyla bir accept kuralı eklemeyi unutmayın.
Kayıt düşüyor, gelen arama çalmıyor: UDP zaman aşımı
Bu belirtinin nedeni çoğu zaman firewall değil zamanlamadır. Connection tracking, çift yönlü UDP eşleşmesini varsayılan olarak 3 dakika (udp-stream-timeout) sessizlikten sonra düşürür. Telefon kaydını örneğin saatte bir yeniliyorsa aradaki sessiz dönemde NAT eşleşmesi silinir; santral aramayı bildirmek istediğinde paketin dönebileceği bir kapı kalmamıştır. Sonuç: telefon “kayıtlı” görünür ama gelen arama çalmaz.
Çözüm router’da değil uç cihazlarda: telefonların veya santral trunk ayarının kayıt yenileme süresini (register expiration) 60-120 saniyeye çekin ya da cihazlardaki NAT keep-alive özelliğini açın. Eşleşme düzenli trafikle tazelendiği sürece düşmez. Conntrack zaman aşımlarını router tarafında büyütmek de mümkündür ama bunu son çare olarak görün; tüm UDP trafiğinin izleme tablosunda daha uzun yer tutması demektir.
Sorun sürüyorsa: sniffer ile teşhis
Helper kapalı, dst-nat doğru, kayıt süresi kısa ama ses hâlâ sorunluysa artık tahmin bırakılır, paket izlenir. RouterOS’un yerleşik sniffer’ı tam bu iş içindir. Önce hızlı bakış:
/tool sniffer quick port=5060
# SIP sinyallesmesini canli izler; test aramasi yapin
Derin inceleme için trafiği dosyaya kaydedip Wireshark’ta açın:
/tool sniffer set file-name=sip-teshis.pcap filter-port=5060 filter-interface=ether1
# ether1 yerine WAN arayuzunuzu yazin
/tool sniffer start
# test aramasi yapin, 30-60 saniye yeter
/tool sniffer stop
Dosyayı Files bölümünden indirin. Wireshark’ta bakılacak üç şey:
- SDP içindeki adres: INVITE ve 200 OK paketlerinde
c=satırına bakın. Dışarı giden pakette özel IP (192.168.x.x) görüyorsanız santral dış IP’sini bilmiyor demektir; ayarı düzeltin. - Üçlü el sıkışmanın tamamlanması: INVITE, 200 OK ve ACK sırası. ACK karşıya ulaşmıyorsa 30 saniyede kopan arama belirtisinin kaynağını buldunuz.
- RTP yönü: Sinyalleşme tamamsa
filter-portdeğerini RTP aralığınızdan birkaç portla değiştirip aynı yakalamayı tekrarlayın. Paketler yalnız tek yönde akıyorsa eksik olan taraf (dst-nat, santral ayarı veya karşı uç) netleşir.
Hızlı kontrol listesi
Sırayla işaretleyin; çoğu kurulum ilk üç maddede düzelir:
-
/ip firewall service-port printçıktısında sip disabled (X) - Eski bağlantı izleri temizlendi, telefonlar yeniden kaydoldu
- Santralde dış IP / NAT adresi tanımlı (yerinde santralde)
- UDP 5060 ve RTP aralığı dst-nat ile santrale gidiyor, aralık santral ayarıyla birebir aynı
- dst-nat kuralları
src-address-listile operatör IP’lerine kısıtlı - Kayıt yenileme 60-120 sn veya keep-alive açık
- Hâlâ sorunluysa sniffer çıktısında SDP adresi ve RTP yönü kontrol edildi
VoIP, ağdaki en az toleranslı trafiktir: veri aktarımındaki yarım saniyelik aksama fark edilmez, sesteki fark edilir. Çok şubeli santral, SIP trunk yedekliliği veya VLAN’lı ses ağı gibi kurulumlarda yapıyı baştan doğru tasarlamak sonradan teşhisten hep daha ucuzdur; bu tür kurulumlar için MikroTik destek hizmetime ulaşabilirsiniz.
Sıkça Sorulan Sorular
SIP ALG nedir, MikroTik'te kapatmak güvenli mi?
SIP ALG (MikroTik'teki adıyla SIP helper), NAT arkasındaki SIP paketlerinin içindeki özel IP adreslerini yeniden yazan bir NAT yardımcısıdır. Modern santraller kendi NAT çözümünü (dış IP tanımı, keep-alive, STUN) kullandığı için helper'ın müdahalesi paketleri bozar. Kapatmak güvenlidir; santral üreticilerinin neredeyse tamamı zaten kapatılmasını ister.
MikroTik'te SIP ALG nasıl kapatılır?
Terminalden /ip firewall service-port set sip disabled=yes komutu yeterlidir. Ardından telefonları yeniden kaydettirin ve eski bağlantı izlerini /ip firewall connection remove ile temizleyin; mevcut görüşme kayıtları eski davranışla açık kalabilir.
VoIP'te ses neden tek yönlü gelir?
Arama sinyalleşmesi (SIP) ile ses (RTP) ayrı kanallardır ve biri kurulup diğeri NAT'ı geçemeyince arama bağlanır ama ses tek yönde akar. En sık iki neden vardır: SIP ALG'nin SDP içindeki adres bilgisini bozması veya yerinde santralde RTP port aralığının yönlendirilmemiş olması.
RTP portları hangi aralıkta açılmalı?
Santral yazılımına göre değişir: Asterisk ve FreePBX varsayılanı UDP 10000-20000, 3CX varsayılanı UDP 9000-10999 kullanır. Doğru aralığı tahminle değil santralinizin kendi ayar ekranından okuyun ve dst-nat kuralını birebir o aralığa yazın.
SIP ALG'yi kapattım ama sorun sürüyor, ne yapmalıyım?
Sırayla üç şeye bakın: santralde dış IP (external/public address) tanımlı mı, kayıt yenileme süresi NAT'ın UDP zaman aşımından (varsayılan 3 dakika) kısa mı ve RTP aralığı dst-nat ile santrale gidiyor mu. Hâlâ çözülmediyse RouterOS'un yerleşik sniffer aracıyla 5060 trafiğini yakalayıp SDP içindeki adresleri kontrol edin.
Yazan: Erdem Özyurt
Bilişim Danışmanı · ISP Altyapı · Siber Güvenlik
Kablo döşemekten kod yazmaya, ağ tasarımından web geliştirmeye; Layer 1'den Layer 7'ye bütünlük içinde çalışıyorum.
Hakkımda daha fazla →