TairaDPI: Neden GoodbyeDPI'a Arayüzlü Bir Alternatif Yazdım?

October 22, 2026🇹🇷 Türkçe

TairaDPI: Neden GoodbyeDPI'a Arayüzlü Bir Alternatif Yazdım?

Türkiye'de internet kullanan herhangi birinin bir sabah uyanıp Discord'a, Roblox'a veya iş için kullandığı bir servise erişemediğini görmesi artık maalesef sıradan bir gün başlangıcı haline geldi. Her engelleme dalgasında olduğu gibi son dönemde de çoğumuzun ilk başvurduğu kurtarıcı ValdikSS'in geliştirdiği efsanevi GoodbyeDPI ve topluluğun hazırladığı Türkiye paketleri oldu. Haklarını yemeyelim; GoodbyeDPI yıllardır bu coğrafyada sansürü delmek için yazılmış en pratik ve zarif araçlardan biri.

Ama dürüst olmak gerekirse: 2026 yılındayız ve bu aracı günlük hayatta kullanmak bazen tam bir sabır testine dönüşüyor.


Uç Birimden Bıkkınlık: Neden Böyle Bir Şeye İhtiyaç Duydum?

GoodbyeDPI kullanan herkes muhtemelen şu senaryoyu defalarca yaşamıştır: İndirdiğiniz klasörde onlarca .cmd ve .bat dosyası vardır. Servis modu mu çalıştıracaksınız, konsol modu mu? Servisi kurdunuz diyelim; Discord açılmadı. Hangi profili deneyeceksiniz? service_install_russia_blacklist.cmd mi, turkey_dnsredir.cmd mi? Bir ayar değiştirmek için dosyayı sağ tıklayıp Notepad ile açarsınız, parametrelerden -5'i silip -7 yazarsınız ya da TTL değerleriyle tek tek oynarsınız.

Daha da kötüsü: Arkada siyah bir CMD penceresi asılı kalır. Kazara o pencereyi kapatırsanız bağlantınız düşer. Servis olarak kurduysanız, o an motorun gerçekten çalışıp çalışmadığını, paket işleyip işlemediğini ancak Görev Yöneticisi'ne girip proses avlayarak anlayabilirsiniz. Normal bir bilgisayar kullanıcısı için bu süreç zaten korkutucu; biz geliştiriciler içinse gereksiz bir sürtünme kaynağı.

Kendi kendime şu soruyu sordum: "Neden bunun modern, derli toplu, tek tıkla açılıp kapanan, ayarları ve profilleri arayüzden yönetilebilen ve arka planda ne yaptığını anlık olarak gösteren bir masaüstü uygulaması yok?"

İşte TairaDPI tam olarak bu bıkkınlıktan doğdu.


Neden Sadece Bir Arayüz (Wrapper) Giydirmedim?

İlk başta en kolay yol şu gibi görünebilir: "Al GoodbyeDPI'ın exe dosyasını, etrafına Electron veya Python ile iki butonluk bir kabuk yaz, bitsin."

Ama işin içine girdiğinizde bu yaklaşımın ciddi mimari ve güvenlik problemleri doğurduğunu görüyorsunuz:

  1. Güvenlik ve Yetki Çıkmazı: WinDivert sürücüsüyle ağ paketlerini yakalamak için yönetici (Admin) yetkisi şarttır. Eğer uygulamanızı basit bir wrapper yaparsanız, tüm arayüzü (koskoca Web tabanlı tarayıcı motorunu) Windows üzerinde Admin yetkisiyle koşturmanız gerekir. Bu güvenlik açısından kabul edilebilir bir şey değil.
  2. Kör Uçuş (Gözlemlenebilirlik Yok): Dışarıdan bir exe'yi subprocess olarak çağırdığınızda paket düzeyinde ne olup bittiğini bilemezsiniz. Kaç paket bölündü? Sahte paket gönderildi mi? TCP bağlantısı sıfırlandı mı? Bunların hiçbirini kullanıcıya yansıtamazsınız.

Bu yüzden kolaya kaçmayıp projeyi iki ayrı katman halinde sıfırdan tasarladım:

  • Arka Plan Windows Hizmeti: Sadece paket yakalama ve manipülasyon işini yapan, LocalSystem yetkisiyle çalışan bağımsız bir servis.
  • Masaüstü Arayüzü: Hiçbir yönetici yetkisine ihtiyaç duymadan, sıradan kullanıcı haklarıyla çalışan, sistem tepsisine küçülebilen hafif bir Tauri 2 + React uygulaması.

Bu iki parça birbiriyle Windows'un Named Pipe IPC mekanizması üzerinden konuşuyor. Arayüz servise sadece "DPI'ı başlat", "şu profili uygula" gibi komutlar gönderiyor; servis ise anlık olarak işlenen paket sayısını, çalışma süresini ve durumunu arayüze iletiyor. Hem güvenli hem de izlenebilir bir mimari.


Motorun Kalbi: Neden Rust?

TairaDPI'ın paket motorunu yazarken C/C++ yerine doğrudan Rust tercih ettim. Ağ seviyesinde bayt bayt paket ayrıştırdığınız, TCP başlıklarıyla oynadığınız ve tampon bellek (buffer) yönettiğiniz bir senaryoda Rust'ın sunduğu bellek güvenliği (memory safety) paha biçilemez.

Paket yakalama katmanında resmi WinDivert 2.2.2-A x64 sürücüsünü kullandım (çekirdek seviyesinde sürücü imzalamak ayrı bir bürokrasi olduğu için tekerleği yeniden icat etmeye gerek yoktu). Ancak WinDivert'in yukarısındaki tüm mantığı; yani TCP paketlerini ayrıştırma, TLS ClientHello SNI okuma, paket bölme ve sahte paket üretme algoritmalarını Rust ile sıfırdan yazdım. GoodbyeDPI'ın C kodundan tek bir satır kopyalamadım; sadece GoodbyeDPI'ın ve ilgili RFC'lerin temel aldığı DPI bypass konseptlerini referans aldım.

Ayrıca güvenlik tarafında şunları özellikle sağladım:

  • WinDivert sürücüsü yüklenmeden önce sabit SHA-256 sağlama toplamı kontrol ediliyor; araya sahte bir DLL veya sürücü enjekte edilmesi engelleniyor.
  • IPC hattı yalnızca aynı yerel kullanıcı SID'sine yanıt veriyor, dışarıdan veya uzak ağdan gelen pipe istekleri doğrudan reddediliyor.
  • Uygulamada tek bir satır dahi telemetri, log kaydı, analiz aracı veya reklam kütüphanesi bulunmuyor. CDN fontu bile kullanmadım; her şey tamamen yerel ve çevrimdışı.

Peki Bu DPI Bypass İşi Pratikte Nasıl Çalışıyor?

Öncelikle netleştirelim: TairaDPI bir VPN değildir. IP adresinizi değiştirmez, trafiğinizi uzak bir sunucuya tünellemez. Yaptığı tek şey, servis sağlayıcınızın (ISS) araya koyduğu DPI (Deep Packet Inspection) filtreleme kutularının kafasını karıştırmaktır.

Normalde siz HTTPS ile bir siteye (örneğin Discord'a) bağlanırken bilgisayarınız ilk olarak bir ClientHello paketi yollar. Bu paketin içinde bağlanmak istediğiniz sunucunun adı (SNI) açık metin olarak yer alır. Sansür kutusu bu paketi yakalar, listede yasaklı bir isim görürse bağlantıya anında bir RST (bağlantı sıfırlama) paketi fırlatır.

TairaDPI ise araya girip bu paketi çeşitli numaralarla DPI cihazına "okunamaz" hale getirir:

  • TCP Parçalama (Fragmentation): ClientHello paketini TCP seviyesinde 2 baytlık minik bir parça ve kalan kısım olarak ikiye böler. Karşıdaki web sunucusu bu iki parçayı kusursuzca birleştirirken, DPI kutusu ilk iki baytı görünce SNI'ı okuyamaz ve paketi es geçer.
  • Ters Sıralı Gönderim (Reverse Fragmentation): İkinci parçayı ilk parçadan önce hatta basar. TCP protokolü gereği alıcı sunucu sırayı numaralardan (Sequence Number) bildiği için doğru sırada birleştirir; fakat stateless veya basit DPI cihazları ters gelen paketi anlamlandıramaz.
  • Sahte Paket & Bozuk Checksum: Gerçek paketten hemen önce bilerek bozuk checksum değerine veya düşük TTL değerine sahip sahte bir ClientHello fırlatır. DPI kutusu sahte paketi görüp kuralı işletir veya kafası karışır; asıl hedef sunucu ise hatalı checksum'a sahip sahte paketi doğrudan çöpe atıp arkasından gelen temiz paketi işler.

İşte TairaDPI arayüzündeki profiller bu yöntemlerin farklı kombinasyonlarını tek bir tıkla seçebilmenizi sağlıyor.


Gerçek Dünya Testi: Discord ve Roblox Üzerinde Ne Oldu?

Teoride her şey güzel görünür, ama asıl mesele sahada ne olduğudur. 17 Eylül'de kendi Windows 10 x64 makineme TairaDPI 0.3.0 alpha sürümünü kurdum ve Türkiye'deki mevcut ev interneti hattımda doğrudan test ettim.

Motor kapalıyken curl ile Discord ve Roblox hedeflerine istek attığımda beklendiği gibi anında bağlantı sıfırlama (TLS connection reset - error 35) aldım.

Farklı profilleri denediğimde şu sonuçları gözlemledim:

  • Standart ters sıra / 2 bayt: Cloudflare gibi engelsiz hedefler açıldı ama Discord ve Roblox'ta reset yemeye devam ettim. Çünkü yerel DPI kutusu basit bölmeleri artık yakalayabiliyor.
  • Ters sıra + Hatalı Checksum: İşte kritik nokta burası oldu. Bu profili seçtiğim anda hem Discord hem de Roblox API uç noktaları tek seferde HTTP 200 yanıtı döndürdü!

Aynı testi motoru kapatıp açarak iki tur tekrarladım. Motor kapalıyken sıfırlanan bağlantı, motor açıldığı anda hiçbir proxy veya VPN gecikmesi olmaksızın kendi hattımın tam bant genişliğiyle açıldı.


Masaüstü Deneyimi: Tauri 2 ile Hafif ve Sessiz

Uygulamanın görsel tarafında Tauri 2 kullanmamın sebebi tam olarak hafiflikti. Electron tabanlı uygulamaların boşta 200-300 MB RAM tüketmesinden her zaman rahatsız olmuşumdur. TairaDPI arka planda sistem tepsisinde sessizce otururken neredeyse hiç kaynak tüketmiyor.

Arayüzde şatafatlı, göz yoran animasyonlar veya sürekli GPU sömüren WebGL döngüleri yerine sade, 320 ms geçişli, Windows'un erişilebilirlik ve hareket azaltma tercihlerine saygı duyan temiz bir tasarım dili tercih ettim. Ayrıca arayüzde anlık olarak kaç paketin işlendiğini ve motorun ne kadar süredir çalıştığını görebileceğiniz sayaçlar ekledim; böylece bir şeyin çalışıp çalışmadığını anlamak için şüpheye düşmüyorsunuz.


Sonuç ve Yol Haritası

TairaDPI şu an 0.3.0 alpha aşamasında. Henüz kat etmesi gereken yol var; kod imzalama sertifikası olmadığı için ilk kurulumda PowerShell betiği üzerinden tek seferlik hizmet kurulumu gerektiriyor, farklı DNS yönlendirme seçenekleri ve kural optimizasyonları üzerinde çalışmaya devam ediyorum.

Ama en azından artık masaüstümde açık kalan siyah konsol pencereleriyle ya da Notepad ile düzenlediğim .bat dosyalarıyla uğraşmak zorunda değilim. Tek bir arayüzden her şeyi görebiliyor, istediğim zaman tek tıkla motoru durdurup başlatabiliyorum.

Projeyi GitHub üzerinde tamamen açık kaynak (MIT lisansıyla) olarak paylaştım. İncelemek, derlemek veya fikirlerinizi paylaşmak isterseniz repoya buradan göz atabilirsiniz:

👉 github.com/mustafawiped/TairaDPI

Geri bildirimleriniz ve katkılarınız her zaman çok kıymetli. Bir sonraki yazıda görüşmek üzere!