# 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.


## Açıklama.
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.
Özel (Private) IP adresleri:
10.0.0.0 ile 10.255.255.254
172.16.0.0. ile 172.31.255.254
192.168.0.0 ile 192.168.255.254 arasındadır.
NAT private adresslerin internete çıkmasına olanak sağlayan teknolojidir. 
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.
NAT özel bir IP adresi kullanarak yüzlerce cihazın internet ortamında haberleşmesini sağlar. Böylece IP adresi sıkıntısı kısmen önlenmiş olur.


## NAT Avantajları.
-Az sayıda IP kullanarak birçok istemciyi internete çıkarabilirsiniz. Hem parasal olarak kazanç sağlar hem de IP adresi azalmasını yavaşlatmış olur.
-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.
-Güvenlik sağlar. Yerel ağınızla internet arasında bir çeşit firewall gibi durur. Dışarıdan gelenler siz izin vermediğiniz sürece içeriye erişemezler.
-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.


## NAT Türleri.
### Basit NAT (Basic NAT).
Bu sadece IP adres çevirimini sağlar, port haritalamayı sağlamaz. Sabit NAT da denir.


### Değişken NAT (Dynamic NAT).
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.
Sabit ve Değişken NAT işlemi şu sıra ile gerçekleşir;
1- İç taraftan bir istemci dış taraftan bir web sunucusuna bağlanmak ister.
2- İlk paket yönlendiriciye geldiğinde, yönlendirici NAT tablosuna bakar.
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.
5- Yönlendirici, tablosundaki iç taraf – dış taraf eşlemelerine bakar ve bu paketi iç taraftaki gerekli yere yönlendirir.
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.


### Port Adres Çevirimi (Port Address Translation).
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.
PAT işlemi şu sıra ile gerçekleşir;
1- İç taraftan bir istemci dış taraftan bir HTTP sunucusuna bağlanmak ister.
2- İlk paket yönlendiriciye geldiğinde, yönlendirici NAT tablosuna bakar.
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.
5- Yönlendirici, tablosundaki iç taraf - dış taraf eşlemelerine bakar ve bu paketi iç taraftaki gerekli yere yönlendirir.
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.


### Örtüşüm (Overlapping).
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.


## NAT Tipleri.
Ağ adresi çevirimi farklı protokollerin etkileşimi, port numaraları, dönüşüm adresi ve şemasının yapısına göre çeşitlidir. 


## NAT ve TCP/UDP.
Ç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.


## Hedef Ağ Adresi Çevirisi (DNAT).
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.


## SNAT.
Snat'ın terim olarak kullanımı satıcıya göre değişir. Birçok satıcı SNAT için özel tanımları vardır.