Ana içeriğe geç

Bölüm 45:Tünelleme ve IPsec

9 dakikalık okumaGüncelleme:

Ağlar'a “Sen”i Katmak yazısının parçası: adres çubuğuna yazdığın tek bir isteğin peşinden bakırla fiberin fiziğine kadar inen uzun bir teknik yolculuk.

Tüm bölümler
  1. Giriş
  2. Adres Çubuğundan İsteğe
  3. Paket Anahtarlamalı Yol
  4. İsimden Adrese
  5. Önbellek, Tazelik ve Güven
  6. Port Numarası ve Soket
  7. Bağlantısız Taşıma: UDP
  8. Üç Adımlı El Sıkışma
  9. Simetrik Şifreleme
  10. Açık Anahtarlı Kriptografi
  11. TLS El Sıkışması
  12. Sertifika Zinciri
  13. HTTP Mesajının Anatomisi
  14. Durum, Çerez ve Oturum
  15. HTTP/2'den HTTP/3'e
  16. İçerik Dağıtım Ağları
  17. Diğer Uygulama Protokolleri
  18. Katmanlı Mimari
  19. Kapsülleme ve Başlıklar
  20. Paket Yakalama ve Çözümleme
  21. Ağ Arayüz Kartı
  22. Fiziksel Adresleme
  23. Hata Sezme ve CRC
  24. Adres Çözümleme: ARP
  25. Anahtarlama ve Ortam Erişimi
  26. Ağ Topolojileri
  27. Sanal Yerel Ağlar
  28. Kablosuz Erişim: 802.11
  29. Radyo Kanalı ve Kapasite
  30. Kablosuz Ağ Güvenliği
  31. Hücresel Ağlar
  32. Spektrum ve Kuşaklar
  33. Hareketlilik ve Aktarma
  34. Adres Kiralama: DHCP
  35. Adresin Anatomisi
  36. Adres Tükenmesi ve IPv6
  37. Yönlendirici Mimarisi
  38. Kuyruk Yönetimi
  39. Cihaz Yapılandırma
  40. Yönlendirme Protokolleri
  41. Kontrol Düzlemi ve SDN
  42. Ağ İzleme ve Yönetimi
  43. Alanlar Arası Yönlendirme
  44. Adres Çevirisi
  45. Ara Kutular
  46. Tünelleme ve IPsec
  47. Güvenlik Duvarları
  48. Operatör ve Metro Ağları
  49. Bitten Sinyale
  50. Çoklama Teknikleri
  51. İletim Ortamları
  52. Kablo Sonlandırma
  53. Fiber Optik İletim
  54. Bakır Erişim Ağı: DSL
  55. Pasif Optik Ağlar
  56. Kablo Erişim Ağları
  57. Denizaltı Kabloları
  58. Veri Merkezi Ağları
  59. Kapsülleme Çözme
  60. Güvenilir Aktarım
  61. Tıkanıklık Denetimi
  62. Trafik Çözümleme
  63. Gecikme Bütçesi
  64. Son Söz

Bir önceki durakta yolun üstündeki kutuları saydık. Hepsi paketimizi görüyordu.

Paketi saklamanın bir yolu yok. Ama onu bir başka paketin içine koymak mümkün. Dıştaki zarfı okuyan kutu, içeridekini hiç göremez. Peki bu nasıl yapılıyor?

Bir paket nasıl başka bir paketin yükü olur?

Tünellemeyi tek cümleye indirebilirsin: bir IP paketi, başka bir IP paketinin yükü hâline geliyor. Dıştaki paket için içteki sıradan bir bayt dizisidir.

Can alıcı ayrıntıyı adreslerde bulacaksın. Dış başlığın kaynağı ile hedefi tünelin iki ucunu gösteriyor; iç başlıktakiler ise asıl göndereni ve asıl alıcıyı. Aynı paketin üstünde aynı anda iki ayrı adres çifti bulunur. Yol üstündeki ara kutuların hepsi bu yüzden dış başlığa bakar ve içerideki adresi hiç göremez.

Bunu mümkün kılan alanı IP başlığında bulabilirsin. Protokol alanı, içerideki yükün ne olduğunu tek baytla ilan ediyor.

protokol alanıiçerideki yük
41IPv6 paketi
47genel yönlendirme kapsüllemesi (GRE)
50şifrelenmiş yük (ESP)
51kimlik doğrulama başlığı (AH)
115ikinci katman tünelleme protokolü (L2TP)

Listedeki 47 numara bir ayrımı da netleştiriyor: GRE’nin tek işi kapsüllemek ve hiçbir şeyi şifrelemiyor. Tünellemekle şifrelemeyi aynı şey sanma.

Tünelin taşıdığı şeyin her zaman bir IP paketi olduğunu da varsayma. İki uzak veri merkezi arasında Ethernet çerçevelerini IP datagramlarının içinde taşıyabiliyorsun; VXLAN’ın segment kimliği 24 bit, dış zarfı UDP ve tahsisli hedef portu 4789.

Tünellemenin doğuş sebebi gayet pratik. İnternette bütün yönlendiricilerin aynı gün yükseltildiği bir bayrak günü yaşanmıyor. Yeni protokolü konuşan ağ parçaları birbirinden kopuk kaldı ve aralarındaki bütün hatlar eski protokolü konuşuyordu. Tünel bu boşluktan doğdu.

Tünelin iki görünümü var ve hangisine baktığın çok şeyi değiştiriyor. Mantıksal görünümde iki uç tek bir sanal bağla bağlıymış gibi duruyor; fiziksel görünümde arada bir sürü yönlendirici sıralanıyor. Kapsülleme her katmanın mecburen yaptığı bir işti; tünel aynı işi bir kat yukarıda ve kasten tekrarlar. Kargo tezgâhı bu kez kutuyu ikinci bir kutuya koyar ve üstüne yeni bir barkod basar. Ayırma merkezi yalnızca yeni barkodu okur.

Dıştaki zarfın içtekini nasıl sardığını adım adım açalım:

Aynı paketin üstündeki iki adres çifti
tünel girişinde üretilen paketiki adres çifti, tek paketdış IP başlığı198.51.100.4→ 198.51.100.9ESP başlığıindeks + sıra8 baytiç paketiç IP başlığı192.0.2.7→ 203.0.113.9iç verikuyrukdolguyol üstündekiler ne okuyortünel girişi198.51.100.4yönlendiriciyönlendiricitünel çıkışı198.51.100.9okunan tek adres çifti dıştakidış zarf soyulur
İç paket olağan bir datagram. Kaynağı 192.0.2.7, hedefi 203.0.113.9. Bu iki adres tünel boyunca hiç değişmez ve yol üstündeki hiçbir yönlendirici onları okumaz.
  1. İç paket olağan bir datagram. Kaynağı 192.0.2.7, hedefi 203.0.113.9. Bu iki adres tünel boyunca hiç değişmez ve yol üstündeki hiçbir yönlendirici onları okumaz.
  2. Kuyruk eklenir, tamamı şifrelenir. Dolgu, dolgu uzunluğu ve sonraki başlık alanları sona eklenir; ardından iç başlık dahil her şey ilişkideki anahtarla şifrelenir.
  3. ESP başlığı öne konur. Sekiz baytlık sabit kısım iki alandan oluşur: güvenlik parametre indeksi ve sıra numarası. Alan uç doğru anahtarı bu indeksle bulur.
  4. Dış başlık tünelin ucunu yazar. Yeni IP başlığının kaynağı ve hedefi tünelin iki ucudur. Aynı paketin üstünde artık iki ayrı adres çifti duruyor.
  5. Yol yalnızca dış zarfı görür. Aradaki yönlendiriciler 198.51.100.4 ile 198.51.100.9 arasında sıradan bir datagram taşıdıklarını sanır; gövdesi onlar için anlamsız bir bayt dizisidir.
  6. Çıkışta dış zarf soyulur. Tünelin ucu doğrulama kodunu sınar, şifreyi çözer ve dış başlığı atar. İç paket kendi adresleriyle kaldığı yerden devam eder.

IPsec zarfı nereden sarmaya başlıyor?

IPsec’in koruması datagram düzeyinde çalışıyor: şifreleme, kimlik doğrulama ve bütünlük doğrudan IP paketine uygulanıyor. Uygulamanın bundan haberi olmasına gerek kalmıyor, çünkü koruma bir katman altta yapılıyor. Kapsam da geniştir: BGP ve DNS gibi kontrol trafiği de aynı zarfın içine girer. Tek tek seçim yok.

IPsec’in iki kipini ayırt etmen gerekiyor. Taşıma kipinde yalnızca yük şifrelenip doğrulanıyor ve orijinal IP başlığı açıkta kalıyor. Tünel kipinde ise başlığı dahil datagramın tamamı şifreleniyor. Aradaki fark, dışarıdan bakan birinin kiminle konuştuğunu görüp göremeyeceğidir.

IPsec’i tek bir protokol olarak da düşünme. Kimlik Doğrulama Başlığı (AH, RFC 4302, protokol numarası 51) kaynak doğrulaması ile bütünlük veriyor ama gizlilik vermiyor. Şifrelenmiş Yük (ESP, RFC 4303, numarası 50) üçünü birden verir ve çok daha yaygın kullanılır.

ESP tünel kipinde sıra hiç değişmiyor. Orijinal datagramın tamamına, başlık alanları dahil, bir kuyruk ekleniyor. Sonuç, ilişkideki algoritma ve anahtarla şifreleniyor. Öne ESP başlığı konuyor ve bir mesaj doğrulama kodu üretilip ekleniyor. En sona, adresleri tünelin ucuna yazılmış yeni bir IP başlığı gelir.

ESP başlığı iki adet 4 baytlık alanla başlar. İndeks ile sıra numarasını taşıyan bu sabit kısım 8 bayt eder. Kuyrukta ise dolgu, dolgu uzunluğu ve sonraki başlık alanları durur. Dolgu 0 ile 255 bayt arasında değişiyor. Blok şifreler bloğu tamamlamak için dolgu istediği için tünelin ek yükünü sabit bir sayı olarak hesaplayamıyorsun.

Sıra numarası tekrar oynatma saldırılarını engelliyor. Her yeni güvenlik ilişkisinde sıfırdan başlıyor ve gönderilen her datagramda bir artıyor. Alan taraf bütün paketleri hatırlamıyor; bir pencere tutuyor ve tekrarı o pencerenin içinde arıyor. Paketin sonundaki doğrulama alanında ise paylaşılan gizli anahtarla üretilmiş bir mesaj doğrulama kodu buluyorsun. Anahtarı bilmeyen biri tek bir biti değiştirse kod tutmuyor ve paket düşüyor; gönderene bir uyarı da gitmiyor.

Kim, hangi anahtarla, hangi yöne?

Burada şaşırtıcı bir ayrıntı var: IP bağlantısız çalışıyor ama IPsec bağlantı yönelimli çalışıyor. Veri gönderilmeden önce iki uç arasında bir güvenlik ilişkisi kuruluyor ve ikisi de durumu bellekte tutuyor.

İlişkinin kimliğini 32 bitlik bir sayı taşıyor ve adına güvenlik parametre indeksi deniyor. Değerini alıcı seçiyor, çünkü tabloyu o tutuyor. Gönderen bu sayıyı pakete yazıyor, alan uç da tablosuna bakıp hangi anahtarla çözeceğini buluyor. İlişki tek yönlüdür; çift yönlü bir tünel için gidişe bir, dönüşe bir tane gerekir. Anahtarları da ayrıdır. Sayının ne kadar hızlı büyüdüğünü görmek için sayalım: dört uçlu tam bir örgüde 6 tünel ve 12 ayrı güvenlik ilişkisi kurman gerekiyor.

IPsec iki ayrı veritabanı tutuyor ve ikisinin işi başka. Güvenlik politikası veritabanı ne yapılacağını söylüyor: bu datagram korunacak mı, düz mü geçecek, atılacak mı. Güvenlik ilişkileri veritabanı nasıl yapılacağını söyler: hangi anahtar, hangi algoritma, hangi sıra numarası. Karar, paketin kaynak adresine, hedef adresine ve protokol numarasına bakılarak verilir. Bölünmüş tünel, yani trafiğin yalnızca bir kısmını tünele sokma kararı, işte bu satırda veriliyor.

Anahtarları elle girmek küçük bir kurulumda işini görüyor ama yüzlerce uçlu kurumsal bir ağda altından kalkamıyorsun. Bu yüzden anahtar kurulumunu İnternet Anahtar Değişimi’ne devrediyorlar. İki taraf kimliğini ya önceden paylaşılmış bir sırla ya da sertifikayla kanıtlar. Ortak sırra Diffie-Hellman anahtar uzlaşmasıyla varılıyordu; tünel o mekanizmayı olduğu gibi devralır.

Anahtar değişiminin kendisi de iki aşamaya bölünmüştür. Önce çift yönlü bir yönetim ilişkisi kurulur. Asıl veri ilişkileri ikinci aşamada, o ilişkinin korumasında pazarlık edilir.

Tünelin iki ucunu üç ayrı biçimde eşleştirebilirsin: iki uç makine, iki yönlendirici, ya da bir yönlendirici ile bir uç makine. Sanal özel ağ (VPN) kurulumunun iki klasik türü, uzaktan erişim ile siteden siteye, bu seçeneklerin ikisine karşılık gelir. Eşleşme tesadüf değil; mimarinin kuralı şu: güvenlik geçidi tünel kipini desteklemek zorundadır, taşıma kipi ise isteğe bağlıdır.

Kurumun gerekçesi ayrıca ekonomiktir: özel hat çekmek yerine interneti omurga olarak kullanır. Bağlanan cihaz uzaktaki ağa fiziksel olarak bağlıymış gibi çalışır. Tünelin güvenliği yolun güvenliğine dayanmaz; ele geçirilen paketler anahtar olmadan çözülemez.

WireGuard aynı işi kaç parçayla yapıyor?

WireGuard’ın kendi tanımı tek satır: IP paketlerini UDP üzerinden güvenli biçimde kapsüller. El sıkışma Noise çerçevesinin IK biçimini kullanır. TCP üstünde tünel kurmanın yarattığı iç içe yeniden gönderim sorunu böylece hiç doğmaz. Alt katman kaybı gizlemez.

Şifre takımı pazarlığı yoktur; IPsec’te pazarlıkla seçilen ne varsa burada sabitlenmiştir. Simetrik şifreleme ChaCha20, doğrulama Poly1305, anahtar uzlaşması Curve25519, özet BLAKE2s. Seçenek listesi olmadığı için yanlış seçenek de yoktur.

Merkezdeki fikre kripto anahtarlı yönlendirme deniyor. Açık anahtarlarla izinli adres listelerinin basit bir eşleşmesidir. Aynı liste iki iş görür: gönderirken yönlendirme tablosu gibi, alırken erişim denetim listesi gibi davranır.

Bölünmüş tünelin somut karşılığı bu listedir. Listeye 0.0.0.0/0 yazılırsa bütün trafik tünele girer. Dar bir önek yazılırsa yalnızca o hedefler girer ve geri kalan her şey yerel çıkışı kullanır.

El sıkışma birkaç dakikada bir tekrarlanır. Anahtarlar döner ve amaç ileri gizliliktir. Zamanlama pakete değil saate bağlıdır, çünkü tasarımın paket kaybına dayanıklı olması gerekir. Tekrar oynatma koruması 64 bitlik, geri sarılamayan bir sayaçla ve yaklaşık 2.000 değerlik kayan bir pencereyle yapılır.

Kılavuz sayfası, adres çevirisinin arkasındaki bir arayüz için 25 saniyelik kalıcı canlı tutma aralığı önerir. Sebep açık: durum tutan kutunun eşlemeyi unutmaması gerekiyor. Unutursa dönüş trafiği düşer.

Her pakette kaç bayt ödüyorsun?

Her bağ, taşıyabileceği en büyük yük boyuyla sınırlıdır; Ethernet’te bu sınır 1.500 bayttır. Tünel bu sınırı değiştirmez. Aynı sınırın içine daha fazla başlık sokar.

Tünel arayüzü de bir arayüzdür ve kendi MTU değerini taşır. Bu değer altındaki bağdan hep daha dardır. Yönlendirici, çıkış arayüzünün MTU’sundan büyük bir paket alırsa onu daha küçük parçalara böler; tünel girişi de bir çıkış arayüzüdür.

Hesap kolay. Dış zarf seçeneksiz bir IPv4 başlığıysa 20 bayt gider. 1.500 baytlık yükte bu %1,3 eder. ESP tünel kipinin asgari ek yükü 30 bayttır. İç pakete 1.470 bayt kalır ve pay %2’ye çıkar. WireGuard’ın IPv4 dış zarflı ek yükü 60 bayttır. İç pakete 1.440 bayt kalır, yani %4. Dış zarf IPv6 ise sabit başlık 40 bayt olduğu için ek yük 80 bayta çıkar ve iç pakete 1.420 bayt kalır.

Aynı hesap, parçalama eşiğiyle birlikte çıkardığımız 1.460 baytlık MSS değerini de aşağı çeker. IPv6 geçiş tünelleri standardı, yani RFC 4213, tünel arayüzünün MTU’sunu tek satırla hesaplar: dış yolun MTU’su eksi kapsülleyen IPv4 başlığının boyu. Aynı standart sabit tünel MTU’sunu 1.280 ile 1.480 bayt arasına hapseder ve varsayılanın 1.280 olmasını önerir.

IPv6 her bağın en az 1.280 baytlık bir MTU taşımasını şart koşar. Buna asgari bağ MTU’su denir. Aynı belge, ayarlanabilir bağların 1.500 bayt ya da daha büyük yapılandırılmasını önerir ve gerekçeyi açıkça yazar: olası kapsüllemelere yer bırakmak.

Doğru boyu gönderenin kendisi ölçer: datagramlarını parçalama yasağı biti kurulu yollar, sığmayan paketi bir yönlendirici atıp geriye parçalanamaz kodlu bir ICMP mesajı gönderdiğinde tahminini küçültür ve yeniden dener. Bu ölçmenin adı yol MTU keşfi, künyesi RFC 1191 ve tünelin varlığında zorunlu hâle geliyor.

Parçalanan bir datagram yalnızca hedef uçta birleştirilir. Tünelde bu kural iki kez işler. Dış paket tünelin çıkışında, iç paket ise asıl hedefte birleştirilir. Kendi makinende ikisini de yoklayabilirsin.

ip link show wg0                      # tünel arayüzünün MTU'su
ping -M do -s 1412 203.0.113.9        # yükü sabitleyip DF biti kurulu gönder
DerinleşmeTünel kuruldu, ping geçiyor, ama büyük dosya hiç gelmiyor: ne oldu?

Gönderen ilk sıçramanın MTU’sunu tahmin olarak alır ve dönen hatalara göre indirir; IPv6’da kaçış yolu büsbütün kapalı, çünkü yol üstündeki yönlendirici parçalama yapmaz ve iş tümüyle gönderen uca kalır. Tahmini besleyen tek şey o hâlde geri dönen ICMP mesajıdır.

Arıza da belgelenmiş. Güvenlik duvarları sık sık bütün ICMP mesajlarını bastıracak biçimde yapılandırılıyor. Hata mesajı dönmeyince gönderen sorunu hiç öğrenemiyor ve tahminini küçültmek için elinde bir sebep kalmıyor. RFC 2923 bu duruma kara delik adını veriyor.

Belirtisi hep aynı biçimde ortaya çıkıyor: ping çalışıyor, küçük istekler çalışıyor, oturum kuruluyor. Ama ilk büyük paketle aktarım durur ve bağlantı zaman aşımına uğrar. Kullanıcı bunu ağın yavaşlığı diye bildirir; oysa yalnızca tek bir boy paket hiç geçmiyor.

Tanısı da ölçmeye dayanıyor. Yükü kademe kademe küçültüp ping -M do denemesini tekrarlarsın; geçen en büyük boy yolun gerçek sınırıdır. Kalıcı çare tünel arayüzünde TCP oturumlarının anlaştığı azami segment boyunu o sınıra sıkıştırmak, yani sorunu el sıkışmada çözmektir.

Özet

Peki, ne öğrendik?

  • Tünel bir adres oyunudur: dış başlık tünelin iki ucunu, iç başlık asıl gönderen ile asıl alıcıyı taşır ve yol üstündekiler yalnızca dıştakini okur.
  • Kapsülleme ile şifreleme ayrı işlerdir: 47 numaralı protokol hiçbir şey şifrelemeden taşır, ESP ise gizlilik, bütünlük ve köken doğrulamasını birlikte verir.
  • IPsec bağlantısız bir katmana durum ekler: tek yönlü güvenlik ilişkileri, 32 bitlik indeksleri ve iki ayrı veritabanıyla tünel bir oturuma dönüşür.
  • WireGuard seçenekleri kaldırarak sadeleşir: tek şifre takımı, UDP taşıma ve izinli adres listesi hem yönlendirme hem erişim denetimi işini görür.
  • Tünelin faturası her pakette kesilir: 1.500 baytlık yükte ek yük %1,3 ile %4 arasında değişir ve iç paketin sınırı hep daha dardır.

Tünelin ucundan çıktın ve paket artık kendi adresleriyle yoluna devam ediyor. Hedef ağın sınırında ise onu hiç tanımayan bir kural kümesi bekliyor. Oradan geçmek hakkın mı, yoksa izin mi?

46. bölüme devam et: Güvenlik Duvarları