SIM Kartta Bir Public IP: 4G Üzerinden WebRTC (2/4)
Statik public IP neden catio'nun kendi hücresel bağlantısına ait, neyi çözüyor, neyi çözmüyor ve dünyanın öbür ucundaki bir tarayıcı sakız paketi boyundaki bir kartla canlı yayını nasıl pazarlık ediyor.
On Bir Kedi, Bir Akıllı Kamera · 2/4 · Saha
Kedilerim Fethiye’de. Tarayıcım binlerce kilometre ötede olabilir. Arada: bir mobil ağ, küçük bir gömülü bilgisayar ve yanlış çıkmayı bekleyen koca bir ağ varsayımları koleksiyonu.
Sezonun ortasında geliyorsanız: 1. Bölüm kadroyu (catio’da on bir kedi), formayı (Sony sensörlü ve donanım H.265 kodlayıcılı bir Orange Pi Zero 3W) ve ölçülmeden hiçbir şeyin sayılmayacağı ev kuralını tanıttı. Bu bölüm saha hakkında: oyunun oynandığı ağ.
Mimari tercih belirli ve bir kez söyleyeceğim ki tekrarlamak zorunda kalmayayım: catio’daki hücresel modem, operatörün atadığı statik bir public IP adresi taşıyor. Adres SIM’in üzerinde, gömülü sistemin kendi bağlantısında, kafeste yaşıyor. Başka bir yerde kameraymış gibi davranan bulut sunucusu, ters vekil ya da tünel ucu yok.
Bu, ilk bakışta göründüğünden daha güçlü bir kısıt. Ünlü bir sorunu ortadan kaldırıyor ve kibarca birkaç yenisini tanıştırıyor.
Çoğu SIM kart neden sunucu olamaz
Modeme bir SIM takın, bağlanın; bir IP adresi alırsınız. Neredeyse hiçbir zaman sizin değildir. Mobil operatörlerin IPv4 adresleri yıllar önce tükendi; bu yüzden binlerce müşteriyi operatör sınıfı NAT‘ın (CGNAT) arkasına koydular: bir kalabalığın paylaştığı tek bir public adres ve kimin hangi konuşmayı başlattığını takip eden operatör ekipmanı. [1]
Tek bir sokak adresi ve çok katı bir kapıcısı olan bir apartman düşünün. Sakinler çıkıp geri gelebilir; kendi başlattıkları konuşmaların yanıtları içeri alınır. Ama dışarıdan hiç kimse belirli bir dairenin zilini çalamaz, çünkü dairelerin kendi adresi yoktur. CGNAT budur ve sıradan bir SIM’in arkasındaki kameranın dış dünyadan bağlantı kabul edememesinin nedeni de budur. Yalnızca dışarı arayabilir.
Statik public IP bunun tam tersi düzenleme: herkesin görebileceği şekilde sahaya çizilmiş kendi sokak adresiniz. Turkcell, örneğin, bunu faturalı hatlarda (bireysel müşteriler için faturalı internet hatlarında) özel bir APN (mgbs) üzerinden hat başına bir ek hizmet olarak, mütevazı bir aylık ücretle satıyor; ön ödemeli hatlarda ve Eşkart’ta yok. [2] Telefonunuzdaki bireysel SIM’de bu yok ve modemde yapılacak hiçbir ayar onu yoktan var edemez.
Burada iki kelimeyi ayırmak gerekiyor. Statik, adresin oturumlar arasında değişmemesi demek. Public, internetin ona yönlendirebilmesi demek. Operatörler kurumsal bir APN ya da VPN içinde statik özel adresler de satar; bu, POS cihazı filoları için harika, bu proje için işe yaramaz bir üründür. Tek satır kod yazılmadan önce operatör ve modemle üç gerçeğin teyit edilmesi gerekiyor: adres gerçekten public, gelen trafiğe izin var ve ihtiyaç duyduğum UDP ve TCP portları filtrelenmiyor. Bir adres statik olup yine de ulaşılamaz olabilir.
Adres aslında nereye iniyor
İnsanlara bir hafta sonuna mal olan bir ayrıntı: public adres beklediğiniz yere inmeyebilir.
USB üzerindeki bir LTE modem (olağan adaylar Quectel EC25 ve SIMCom SIM7600-H varyantları; ikisi de LTE Kategori 4, H’siz SIM7600 parçaları yalnızca Kategori 1, ve ikisi de Linux’ta ModemManager tarafından tanınıyor) kendini ana makineye birden fazla biçimde sunabilir. QMI ya da MBIM modunda ana makine ham bir IP arayüzü alır, tipik olarak wwan0, ve operatörün adresi doğrudan onun üzerinde görünür. RNDIS ya da ECM modunda ise modem minik bir ev yönlendiricisi gibi davranır: public adresi kendine saklar, kendi NAT’ını çalıştırır ve Orange Pi’ye 192.168.225.2 gibi bir şey verir. Statik public IP o zaman gerçektir, parası ödenmiştir ve ikinci bir NAT’ın yanlış tarafında oturmaktadır.
Yani “IP modemin üzerinde” cümlesi bir cümle daha hassasiyet istiyor: catio’nun hücresel bağlantısı public adresin sahibi ve o adreste cevap veren şey Orange Pi olmalı; ya adres doğrudan wwan0 üzerinde olduğu için ya da modem doğru portları yönlendirdiği için. İlki daha basit. İkincisi çalışır. Üçüncü seçenek, fark etmemek, çalışmaz.
WebRTC bir video soketinden fazlası
WebRTC tarayıcıya olgun bir gerçek zamanlı medya yığını verir: teklif-yanıt pazarlığı, bağlantı denemeleri, şifreleme, jitter tamponları, tıkanıklık geri bildirimi ve oynatma. Bilerek vermediği şey sinyalleşme: iki tarafın açıklamalarını ve aday adreslerini değiş tokuş ettiği adım. Bunun nerede çalışacağı sizin kararınız.
İlk sürüm için bunu Orange Pi üzerindeki küçük, kimlik doğrulamalı bir HTTPS/WSS servisi üstleniyor: tarayıcı giriş yapar, bir teklif gönderir, bir yanıt alır ve iki taraf ICE adaylarını değiş tokuş eder. Sonra bağlantı deneme protokolü ICE, biri çalışana kadar aday çiftlerini dener. [3]
Public adresin ücretini hak ettiği yer burası. Catio ucunun bütün internetin ulaşabileceği bir host adayı var; dolayısıyla tarayıcı tarafı, ne kadar kötü NAT’lanmış olursa olsun (otel Wi-Fi’ı, ofis güvenlik duvarı, başka operatördeki bir telefon), ona dışarı doğru bağlanıverir; buna dünyadaki her NAT izin verir. STUN yine de tarayıcının kendi dışa dönük adresini öğrenmesine yardım eder; son çare aktarıcı TURN ise yalnızca UDP’yi tamamen engelleyen ağlar için gerekir ve o zaman genellikle 443 portunda TCP ya da TLS üzerinden aktarır. [4] Bir ucun public adresi olduğunda bu durumun bile daha ucuz bir cevabı var: catio’nun kendisindeki bir ICE-TCP adayı, UDP’si engellenmiş bir izleyiciye hiç aktarıcı olmadan hizmet verebilir. TURN, oyunun izleyici tarafı için bir uyumluluk bileşenidir; catio’nun adresinin yaşadığı yer değil.
Medyanın kendisi WebRTC’nin zorunlu kıldığı DTLS-SRTP üzerinden akar: yayın catio ile tarayıcı arasında uçtan uca şifrelidir. [5] Bu düşünceyi güvenlik bölümüne kadar aklınızda tutun; çünkü bu hikâyenin sonu değil, başlangıcı.
H.265: mükemmel sıkıştırma, karmaşık tarayıcı gerçeği
Allwinner A733, H.265’i donanımda kodluyor ve HEVC aynı görsel kaliteyi H.264’e göre belirgin biçimde daha az bite sığdırıyor; hücresel bir yükleme hattında bütün mesele bu. [6]
Pürüz tarayıcıda. WebRTC standartları her tarayıcının VP8 ve H.264’ü desteklemesini zorunlu kılıyor; HEVC isteğe bağlı ve bir HEVC dosyasını oynatmanın aksine WebRTC içinde HEVC desteği tarayıcılar ve platformlar arasında dengesiz. [7][8] IETF’in WebRTC için H.265 profili bu yazı yazılırken hâlâ bir Internet-Draft. [9] Bir tarayıcı HEVC bir video dosyasını seve seve oynatıp yine de HEVC’yi gerçek zamanlı bir RTP codec’i olarak pazarlık etmeyi reddedebilir.
Dolayısıyla planın bir yedeği var ve yedek de donanım; çünkü A733 ikisini de kodluyor:
- Tarayıcı duyuruyorsa ve pazarlık başarılıysa H.265‘i tercih et.
- Aksi hâlde donanım H.264‘e dön.
- Codec’leri açıkça pazarlık et ve iki yolu da uçtan uca ölç: gecikme, bit hızı, CPU yükü, güç.
Tek yedek, Orange Pi üzerinde yazılımla yeniden kodlama gerektirseydi bu, bir mimari diyagramın içine saklanacak bir şey değil, testte çözülecek bir performans sorunu olurdu.
Mobil veri üzerine kısa bir alıştırma
Ortalama 1 Mb/s’lik bir yayın, protokol yükü hariç saatte yaklaşık 450 MB; 2 Mb/s’de yaklaşık 900 MB. 2 Mb/s’de aylık 10 GB’lık bir paket kabaca on bir saat canlı video eder. Canlı bir bağlantının bir veri paketini yemesi için on bir kedinin hepsinin hareket etmesi gerekmez.
Bu yüzden catio, yapabiliyor diye yayın yapmayacak. İzleyici yok, yayın yok. Boş zamanlarda birkaç dakikada bir sabit kare ve 3. Bölüm’deki küçük olaylar var. Canlı bir oturum videoyu açıkça ister ve sekme kapandığında ya da izleyici etkileşimi bıraktığında bitirir. Hücresel bağlantılar sallandığı için gönderici paket kaybını, gidiş-dönüş süresini ve alıcının tıkanıklık geri bildirimini izler; yükleme hattı zorlanırken ağın veremeyeceği görüntü kalitesinde ısrar etmek yerine bit hızını ve çözünürlüğü düşürür.
Dikkatsiz kullanılırsa public adres bir yükümlülüktür
Adresinizi sahaya çizmek, kalenin nerede olduğunu herkesin görebilmesi demek; davet etmediğiniz insanlar dâhil. Doğrudan erişilebilirlik, bağlantıyı basitleştirirken saldırı yüzeyini aynı hamlede büyütür.
Kimlik doğrulaması olmayan bir kamerayı internete açmayacağım; “geçici olarak, sadece test için” de açmayacağım, çünkü internetin port tarayıcıları mesai saatlerine uymaz. Temel: yalnızca sinyalleşme portunu ve UDP medya aralığını açan, varsayılanı reddeden bir güvenlik duvarı (nftables); sinyalleşme servisinde TLS ve gerçek kimlik doğrulama; girişte hız sınırı; SSH’ye yalnızca bir WireGuard tüneli üzerinden erişim, asla public arayüzden; ve bilinçli, test edilmiş güncellemeler. DTLS-SRTP medyayı korur. Özensiz bir giriş sayfasına ya da çağıranına güvenen bir yönetim API’sine hiçbir faydası yoktur. [5]
Akılda kalıcı bir başarısızlık senaryosu, kediler için güzel bir dedektör kurup yabancılara kazara onların canlı görüntüsünü sunmak olurdu. Bu ne mühendislik zarafeti ne de kedi misafirperverliği.
Fethiye’de kanıtlanması gerekenler
İlk ağ testi “ping atıyor mu” değil. Şu: farklı bir operatördeki yetkili bir tarayıcı, başka bir ülkeden, catio’nun statik adresine karşı bir WebRTC oturumu kurabiliyor, bir codec pazarlık edebiliyor, yükleme hattı dalgalanırken bağlı kalabiliyor ve modem düşüp yeniden bağlandıktan sonra toparlayabiliyor mu?
Sonra kimsenin SIM kart ilanına yazmadığı sorular: public adres modem yeniden bağlandığında hayatta kalıyor mu? Yalnızca aynı operatörden değil, yurt dışından da ulaşılabiliyor mu? Operatör bazı tarifelerde gelen portları filtreleyip bazılarında filtrelemiyor mu? Bunlar ölçülecek, kaydedilecek ve 4. Bölüm’de bir kabul listesine dönüştürülecek sahadaki gerçekler.
Bir ülkedeki tarayıcı başka bir ülkedeki rafı izleyebildiğinde, 3. Bölüm küçük bilgisayarın karelerden gerçekte ne öğrendiğini sorabilir; bir sinir ağının ilk günden her kediyi tanıdığını iddia etmeden.
Kaynaklar
[1] A10 Networks, What is carrier-grade NAT (CGN/CGNAT)?.
[2] Turkcell, IoT ve kurumsal hatlar için Statik IP hizmeti — hat başına abonelik, yalnızca faturalı hatlar, mgbs APN’i üzerinden bağlanınca atanır; ön ödemeli hatlarda ve Eşkart’ta yok.
[3] IETF, RFC 8445: Interactive Connectivity Establishment (ICE).
[4] IETF, RFC 8656: Traversal Using Relays around NAT (TURN).
[5] IETF, RFC 8827: WebRTC Security Architecture — WebRTC medyası için DTLS-SRTP zorunludur.
[6] CNX Software, Orange Pi Zero 3W: Raspberry Pi Zero formunda bir Allwinner A733 SBC (15 Nisan 2026) — video motoru özellikleri.
[7] IETF, RFC 7742: WebRTC Video Processing and Codec Requirements — tarayıcılar için VP8 ve H.264 zorunludur.
[8] MDN, Codecs used by WebRTC.
[9] IETF, H.265 Profile for WebRTC, Internet-Draft draft-ietf-avtcore-hevc-webrtc-10 (20 Ekim 2026).