Ofiste yüz bilgisayar var ama internet servis sağlayıcısı size tek bir genel IP adresi verdi. Yüz cihaz aynı anda internete çıkıyor ve gelen yanıtlar hiç karışmadan doğru bilgisayara ulaşıyor. Bunu yapan NAT’tır.
Temel fikir
NAT, paketin üzerindeki adresi değiştirir. İç ağdaki bir bilgisayar 192.168.1.50 adresinden bir isteğe çıktığında, yönlendirici o adresi kendi genel adresiyle değiştirip paketi dışarı gönderir. Yanıt geldiğinde ters çeviriyi yapıp doğru bilgisayara iletir.
Bunun mümkün olmasının nedeni, yönlendiricinin bir çeviri tablosu tutmasıdır: hangi iç adres hangi bağlantıyı açtı, yanıt kime gidecek.
İç adreslerin internette yönlendirilmeyen özel bloklardan seçilmesi bu yüzdendir; blokların hangileri olduğu alt ağ nedir yazısında.
Portlar olmasa çalışmazdı
Tek bir genel adresi yüz cihazın paylaşabilmesi, adresin yanına port numarasının da yazılmasıyla mümkün olur. Buna teknik olarak PAT denir, günlük dilde herkes NAT der.
Yönlendirici her bağlantıya kendi genel adresi üzerinde farklı bir kaynak portu atar. Tablo şöyle görünür: iç 192.168.1.50:51000 → dış 203.0.113.10:40001. Başka bir bilgisayarın bağlantısı 40002 alır. Yanıtlar port numarasına bakılarak ayrıştırılır.
Bir genel adres üzerinde teorik olarak on binlerce eşzamanlı bağlantı taşınabilir. Pratikte sınır, yönlendiricinin tablo kapasitesidir.
Hangi portun hangi hizmete ait olduğunu hatırlamak için port sözlüğü aracına bakabilirsiniz.
Dışarıdan içeri: port yönlendirme
NAT doğal olarak tek yönlüdür: içeriden başlayan bağlantılar çalışır, dışarıdan gelenler çalışmaz. Çünkü dışarıdan gelen bir paket geldiğinde tabloda karşılığı yoktur; yönlendirici onu kime vereceğini bilemez ve düşürür.
İçeride bir sunucu barındırıyorsanız kuralı elle yazmanız gerekir: “dış adresimin 443 portuna gelen her şeyi 192.168.1.10’un 443 portuna ilet”. Buna port yönlendirme denir.
Aynı dış port iki farklı iç sunucuya yönlendirilemez. İki web sitesi barındıracaksanız ya farklı portlar kullanırsınız ya da önüne bir ters vekil sunucu koyarsınız.
NAT güvenlik duvarı değildir
Bu, en yaygın yanlış anlamadır. “Dışarıdan bağlantı kurulamıyor” özelliği bir yan etkidir, bir güvenlik politikası değil.
Farkı şurada görünür: NAT giden trafiği hiç denetlemez. İçerideki bir makine zararlı yazılıma bulaştıysa dışarıya istediği bağlantıyı açar ve NAT buna izin verir — hatta yardım eder, çünkü işi tam olarak budur.
Gerçek koruma için giden trafiğin de kurala bağlanması gerekir. Kural setinin nasıl okunabilir tutulacağı güvenlik duvarı kural seti rehberinde.
Kaynak NAT ve hedef NAT
İki yön ayrı adlandırılır ve karıştırılınca yapılandırma anlaşılmaz olur.
Kaynak NAT giden trafikte kaynak adresi değiştirir — yukarıda anlatılan klasik durum.
Hedef NAT gelen trafikte hedef adresi değiştirir — port yönlendirme bunun bir biçimidir.
Yük dengeleyiciler ve ters vekiller de hedef NAT yapar: dışarıdan tek bir adres görünür, arkada birden çok sunucu vardır.
CGNAT ve uçtaki sorunlar
IPv4 adresleri tükendiği için birçok servis sağlayıcı artık aboneye de genel adres vermiyor; kendi ağında ikinci bir NAT katmanı işletiyor. Buna operatör düzeyinde NAT (CGNAT) denir.
Sonucu pratikte hissedilir: abonenin gerçek bir genel adresi yoktur, dolayısıyla port yönlendirme yapamaz. Evden erişilen bir kamera sistemi ya da uzak masaüstü bu yüzden kurulamaz. Site-to-site VPN kurulumlarında da aynı engel çıkar; seçenekler VPN seçimi rehberinde karşılaştırılıyor.
Çift NAT ayrıca teşhisi zorlaştırır: günlüklerde gördüğünüz IP, gerçek kaynağı göstermez.
Neden bazı uygulamalar NAT’tan hoşlanmaz
Bazı protokoller IP adresini yalnızca paketin başlığında değil, veri içinde de taşır. NAT başlığı çevirir ama içerideki adresi göremez; sonuçta uygulama karşı tarafa çevrilmemiş bir iç adres bildirir ve bağlantı kurulamaz.
Klasik örnekler eski dosya aktarım protokolleri ve bazı sesli görüşme sistemleridir. Yönlendiriciler bunun için özel yardımcılar çalıştırır: veri içindeki adresi de tanıyıp çevirirler.
Modern uygulamalar sorunu farklı çözer. Karşılıklı bağlantı gereken durumlarda, iki taraf da dışarıdaki bir aracıya bağlanır ve trafik oradan akar; ya da her iki taraf aynı anda dışarı bağlantı açarak NAT tablosunda karşılıklı giriş oluşturur.
Bunun pratik anlamı şudur: NAT arkasında bir sunucu barındırmak zordur, ama bir istemci çalıştırmak kolaydır.
Çeviri tablosu da bir kaynaktır
Yönlendirici her bağlantı için tabloda bir satır tutar ve o satır belirli bir süre sonra temizlenir. Bağlantı sayısı tablo kapasitesini aştığında yeni bağlantılar kurulamaz.
Belirti kafa karıştırıcıdır: bant genişliği boştur, sunucular sağlıklıdır, ama bağlantılar rastgele başarısız olur. Çok sayıda kısa ömürlü bağlantı açan uygulamalar bu sınıra beklenenden erken dayanır.
IPv6 ile ilişkisi
IPv6’da adres sıkıntısı yoktur; her cihaz genel adres alabilir. Dolayısıyla NAT’a ihtiyaç da yoktur ve tasarımda yer almaz.
Bu, alışkanlık değiştirmeyi gerektirir: IPv6’da “NAT arkasındayım, güvendeyim” varsayımı geçersizdir. Koruma yalnızca güvenlik duvarı kurallarından gelir. Adresleme ve kısaltma kuralları için IPv6 aracı var.
Kısaca
NAT, adres kıtlığına bulunmuş pratik bir çözümdür: iç adresleri dış adrese, port numaraları yardımıyla haritalar. Bağlantıyı içeriden başlatmak gerekir; dışarıdan erişim için kural yazılır.
Sağladığı yalıtımı güvenlik sanmayın — giden trafiği denetlemeyen bir yapı, koruma sağlamaz.