DPI nedir? Siteler nasıl engelleniyor?

DPI, internet sağlayıcısının bağlantıların içine bakıp hangi siteye gittiğini anlamasını sağlayan teknoloji. Discord engeli de büyük ölçüde buna dayanıyor.

Taşıma bandındaki veri paketleri bir güvenlik tarayıcısından geçiyor, biri ikiye bölünmüş halde fark edilmeden geçiyor

DPI kısaca

İnternette gönderdiğin her şey küçük paketlere bölünür. Her paketin bir zarfı (nereden nereye gittiği) ve bir de içeriği vardır. Sıradan ağ cihazları yalnızca zarfa bakar. Derin paket inceleme (Deep Packet Inspection, DPI) yapan cihazlar ise içeriğe de bakar ve bağlantının hangi siteye ya da uygulamaya ait olduğunu anlamaya çalışır.

Sağlayıcılar DPI’ı trafik yönetimi, saldırı tespiti ve erişim engellerini uygulamak için kullanır. Türkiye’de mahkeme ya da idari kararla erişime kapatılan siteleri internet sağlayıcıları engeller; Discord da 9 Ekim 2024’ten beri bu şekilde engelli.

Birinci katman: DNS engeli

Bir siteye girmek için bilgisayarın önce adresini sorar: “discord.com’un IP adresi ne?” Bu sorguya DNS sorgusu denir ve genelde sağlayıcının DNS sunucusuna, 53 numaralı porta gider. Engel varsa sağlayıcı yanlış bir adres döndürür ya da hiç cevap vermez.

DNS’i Cloudflare ya da Google gibi başka bir sunucuyla değiştirmek bazen yeter. Ama bazı sağlayıcılar 53 numaralı porttan geçen bütün sorguları yakalayıp kendi sunucusuna yönlendirir. GoodbyeDPI bu yüzden sorguları Yandex DNS’in standart dışı 1253 numaralı portuna gönderir; bu port genelde denetlenmez.

İkinci katman: SNI ve ilk paket

Adres doğru gelse bile iş bitmez. HTTPS bağlantısı kurulurken tarayıcının gönderdiği ilk paket (TLS ClientHello) şifreleme başlamadan önce gider ve içinde gitmek istediğin sitenin adı açıkça yazar. Bu alana SNI (Server Name Indication) denir. DPI cihazı bu adı okur ve engelli listesindeyse bağlantıyı keser.

0000  16 03 01 02 00 01 00 01  fc 03 03 9a 8f a7 6a 5d   ..............j]
  ⋮
0070  01 00 01 92 00 00 00 10  00 0e 00 00 0b 64 69 73   .............dis
0080  63 6f 72 64 2e 63 6f 6d  00 17 00 00 ff 01 00 01   cord.com........
Bir ClientHello paketinin başı ve SNI bölümü, 16’lık sistemde. Sağ sütunda “discord.com” açıkça okunuyor.

Pasif ve aktif DPI

GoodbyeDPI’ın belgeleri iki tür DPI’dan söz eder:

  • Pasif DPI trafiğin bir kopyasını izler. Engelli bir siteye gittiğini görünce asıl siteden önce davranıp sana sahte bir yönlendirme ya da bağlantıyı koparan bir paket (TCP RST) gönderir.
  • Aktif DPI trafiğin tam ortasında durur ve engellenen paketleri doğrudan düşürür.

GoodbyeDPI bunları nasıl aşıyor?

GoodbyeDPI sitenin adını gizlemez; DPI cihazının onu okumasını zorlaştırır. Türkiye’de en sık kullanılan -9 modunun yaptıkları:

YöntemParametreNe işe yarar
Paketi bölmek-e 2HTTPS’in ilk paketini ilk 2 bayttan böler. DPI ilk parçada bir TLS isteği tanıyamaz.
Ters sıra--reverse-fragParçaları ters sırayla gönderir. Sunucu onları birleştirir, DPI ise karışır.
Sahte paket--wrong-chksum, --wrong-seqGerçek paketten önce içinde www.w3.org yazan sahte bir ClientHello yollar. Sağlama toplamı ve sıra numarası bozuk olduğu için sunucu onu atar, DPI ise yanılır.
DNS yönlendirme--dns-addr, --dns-portAdres sorgularını denetlenmeyen bir porta gönderir.
QUIC engeli-qHTTP/3 bağlantılarını kapatır; tarayıcı, GoodbyeDPI’ın işleyebildiği normal HTTPS’e geçer.

Türkiye ayarındaki --set-ttl ise sahte paketi düşük bir “yaşam süresiyle” (TTL) gönderir. Paket sağlayıcının DPI cihazına ulaşır ama sunucuya varmadan yolda düşer.

Gelecek: şifreli ClientHello (ECH)

TLS’nin yeni bir özelliği olan Encrypted Client Hello (ECH), SNI dahil ilk paketin içeriğini şifreler. Yaygınlaştıkça SNI’ye bakan DPI yöntemleri zorlaşacak. Güncel Chrome ve Firefox ECH’yi destekliyor, Cloudflare de destekleyen sunucular arasında. Ama ECH’nin çalışması için hem sitenin hem tarayıcının hem de DNS ayarının buna uygun olması gerekiyor; bu yüzden bugün her bağlantıda devrede değil.

Kaynaklar

  1. GoodbyeDPI resmi belgeleri: nasıl çalışır
  2. GoodbyeDPI kaynak kodu: sahte paketler (fakepackets.c)
  3. RFC 6066: Server Name Indication
  4. Cloudflare: Encrypted Client Hello
  5. NTV: Discord'a erişim engeli kararı