NAT

Network Address Translation (NAT) (Türkçe: Ağ Adresi Dönüştürme), TCP/IP ağındaki bir bilgisayarın yönlendirme cihazı ile başka bir ağa çıkarken adres uzayındaki bir IP ile yeniden haritalandırma yaparak IP paket başlığındaki ağ adres bilgisini değiştirme sürecidir.

NAT, Ağ maskelemeyle (ya da IP maskelemeyle) birlikte, bir adres uzayını gizlemek için kullanılan teknik bir terimdir. Çoğu kez private network adreslerinden ibarettir (RFC 1918). Genellikle tek bir ip adresinin arkasında küçük bir adres uzayı bulunur. Bu mekanizma, yönlendirici cihazın kullandığı adreslerin haritalarını içeren, durum çeviri tabloları kullanır ve giden ip paketlerini haritalama yapar. Böylece yönlendirici kaynağı görüntülenir. İletişim tersten yapıldığında, geri haritalandırma yaparak IP adresleriyle karşılaştırma yapar ve sonuç durum çeviri tablolarında saklanır. Çevirici tablo içindeki bu yöntemde, kayıtlar trafikteki durumu yenilendikten sonra silinirler.

Bu çeviri tabloları kullanıldıktan sonra, ağ maskelemesi içinde iletişim oluştururken metoda, sadece yönlendirici aracılığıyla imkân verilir. Örneğin, maskelenmiş ağdaki bir web tarayıcısı ile dışarıdan bir web taraması yapılabilir, ama maskelenmiş ağ içerisindeki web sitesinde web tarayıcısı ile arama yapılamaz. Fakat, bugün çoğu NAT aygıtlarının ağ yöneticisi sürekli kullanım için çeviri tablosu girdilerini ayarlamanızı sağlar.

Bu tekniğin popularitesiyle, NAT terimi neredeyse IP maskelendirilme yöntemi ile eşanlamlı hale gelmiştir. NAT'ın ciddi sonuçları (Sakıncaları, Avantajları) vardır. İnternet kalitesine, bağlantısına ve uygulama detaylarına dikkat etmeyi gerektirir. Sonuç olarak, birçok yöntem gibi sorunlarla karşılaşılmış ve hafifletmek için icat edilmiştir.

IP adres uzayı gün geçtikçe azalmaktadır. Bu azalmanın hızını yavaşlatmak için bazı yöntemler denenmiştir. IPv4′ün sayısının muhtemel yetersizliğini engellemek içinde kurumlar, ev kullanıcıları vs. için NAT, servis sağlayıcılar ve yönlendirmede kullananlar içinde CIDR gibi teknolojiler geliştirilmiştir (CIDR– Classless Inter Domain Routing – Sınıfsız Alanlar arası Yönlendirme).

İnterneti etkin kullanabilmek için IP adresleri kullanılır. Ama her IP adresini internet ortamında kullanamaz. Bazı özel IP adresleri vardır. Bu adresler(IP adres aralıkları), kendi yerel ağlarımızda kullanmamız için ayrılmıştır. Bunlar Address Allocation for Private Internets (özel internetler için adres payı) diye tanımlanır ve Private Adresses denir. İnternette kullandığımız IP adreslerine ise Public Adresses denir.

NAT mantığı oluşması için evde kullandığımız ADSL yönlendiricilerimizi düşünelim. Servis sağlayıcımıza (Türk Telekom) ait ADSL kullanıcılarına sabit (statik) veya değişken (dinamik) olarak dağıtılan belli IP aralıkları vardır. Buraya Dış taraf (Outside)denir. ADSL yönlendiricisine, bilgisayara veya ağ üzerinden haberleşen başka bir cihaza özel IP verilir. Buraya da iç taraf (Inside) denir. Yerel ağdaki adresler birbirleriyle haberleşir. İnternete çıkarken ise NAT devreye girer.

İstek gönderdiğimizde bu istek ADSL yönlendircisinin Ethernet (eth0) arayüzüne gelir ve NAT bunu çevirip diğer arayüze yönlendirir, o bağlantı için NAT tablosunda bir kayıt tutulur. Yerel ağ tarafında birden fazla cihaz internete çıktıklarında servis sağlayıcısının verdiği bir tane IP adresini kullanacaklardır.

-Yerel ağımızı istediğimiz gibi tasarlamanıza da olanak sağlar. Yeni istemciler ekleyebilir. Adreslerini değiştirebiliriz veya yeni yerel ağlar ekleyebiliriz. Tek değiştirmeniz gereken NAT ayarlarıdır.

-Bunların yanında dezavantajları da var. Bazı uygulamalar NAT kullanırken zorluklar yaşayabilir (FTP- Dosya aktarım iletişim kuralı gibi). IPsec kullanıyorsak yine sorunlar yaşayabiliriz.

Basit NAT’a benzer. Bu tip NAT ayarında bir IP adres havuzumu bulunur. Örneğin, ISP'den gidip 85.99.230.10 ile 85.99.230.20 aralığını aldığımızı düşünelim. İçeride de 50 tane kullanıcı olduğunu varsayarsak internete çıkmak isteyenler boşta olan herhangi bir IP adresinden dışarı çıkacaklardır. Kullanıcılar hangi IP adresinden çıkacaklarına karar verme yetkisine sahip değildirler. Yoğunluğa göre NAT ayarı yapılan cihaz buna karar verir.

3-Statik olarak eşleme yapılırsa, yönlendirici ilgili IP adresi ile çevirme işlemini yapar ve gerekli yere yönlendirir. Statik eşleme yapılmazsa, IP adresi havuzumuzdan boşta duran bir IP adresi ile eşleştirir. Bu durumda sadece geçerli olan bağlantı için tabloya bir eşleme kaydı girilir.

4- Web sunucu paketi alır ve dış taraftaki ilgili IP adresine cevap gönderir çünkü çevirim olmuştur ve web sunucusunun bizim iç taraftaki ağımızdan haberi yoktur.

6- Bundan sonra bağlantı bitene kadar bu şekilde devam edecektir. Bittiğinde değişken (dynamic) NAT yapılmışsa bu kayıt bir dahaki bağlantıya kadar tablodan silinir.

Diğer bir ismi de Overloading’ dir (Aşırı yükleme). Bir tane public IP adresi vardır ve içeride bulunan istemciler dışarı bu IP adresini kullanarak çıkarlar. Burada tek fark iç tarafın kullandığı port ile NAT işleminden sonra dış tarafın kullandığı port (kapı) numarasının birbirlerinden farklı olmasıdır.

Normalde istemciler bir yer ile bağlantı kurduğunda (HTTP sunucusu) onun 80 numaralı portuna (kapı) gider. Buna hedef port (destination port) denir. Buraya giderken kendilerinden de bir port açarlar. Buna da kaynak port (source port) denir. Kaynak port 1024 ile 65535 arasında herhangi bir port olabilir. Bu TCP oturumu (TCP Session) kurulması için bu gereklidir.

3- Yönlendirici (router) iç tarafın IP adresini ve port numarasını NAT tablosuna yazar. Sonra yönlendirici iç taraftaki IP adresi ile port numarasını dış taraftaki ile çevirime sokar. Bu işlemden sonra artık HTTP sunucuna giden IP adresi ve kaynak port farklı olacaktır.

4- HTTP sunucu paketi alır ve dış taraftaki ilgili IP adresine cevap gönderir çünkü çevirim (translation) olmuştur ve HTTP sunucusunun bizim iç taraftaki ağımızdan haberi yoktur.

6- Bundan sonra bağlantı bitene kadar bu şekilde devam edecektir. Bittiğinde bu kayıt bir dahaki bağlantıya kadar veya farklı bir bağlantı isteği gelene kadar tablodan silinir.

Bulunduğumuz yerdeki bir IP adresinin internette veya başka bir ağda da kullanılmasından kaynaklanan karışıklığı önlemek için kullanıyoruz. Bunun için bir DNS sunucusu ile veya sabit/değişken NAT ile beraber kullanmak gerekir.

Çevrimin içindeki veya dışındaki bir sunucu tarafından veri taşıyan kısmın yorumlanmış olup olmadığına bağlı olarak "Pure NAT", IPyi tek başına yönetir. IP bilgisi ile ilgili protokoller doğru bir şekilde ayırabilir veya ayıramaz(ICMP gibi). NAT ağ katmanı ötesinde kullanılmıyorsa protokol yığını hatta TCP ve UDP gibi temel protokoller bile bozulur.

Her IP başlığında o başlığın hatalı olup olmadığını algılamayı sağlayan bir checksum vardır. IP datagramları parçalanmış olabilir ve daha yüksek seviye checksumların doğru hesaplanması ve hangi paketlerin hangi bağlantıya ait olduğunun doğru izlenmesini sağlamak için NAT'ın bunları tekrar birleştirmesi gereklidir.

Ana taşıma katmanı protokollerinden TCP ve UDP taşıdıkları veriyi koruyan bir checksuma sahiptir. Bununla birlikte TCP/UDP başlığını taşıyan paketin kaynak ve hedef ip adreslerinin olduğu bir “psuedo header ” vardır. TCP/UDP başlığı checksumı, çevrilen ip adreslerine göre tekrar hesaplamalıdır ve bu checksumın parçalanmış paketlern içindeki ilk paketin TCP/UDP başlığına koymalıdır. Alıcı NAT mutlaka hedef sunucuya geçen tüm paketlerin ip checksumlarını tekrar hesaplamalıdır ve ayrıca tekrar çevrilmiş adresleri ve psuedo başlıkları kullanan TCP/UDP başlıklarını tanımalı ve tekrar hesaplamalıdır. Bu tamamen çözülmüş bir problem değildir. Tüm segmentin tekrar birleştirmesi ve sonra tüm paketler üzerinden hesaplanmış bir checksumın tekrar hesaplanması alıcı NAT için bir çözümdür.

Bir En-route paketinin hedef ip adresini şeffaf bir şekilde değiştirmek için bir tekniktir ve herhangi bir cevap üzerinden tersden de çalışabilir. 2 uç arasındaki her yönlendirici (router) bu çevrimi yapabilir.