Nat Nedir ?

Nat

Nat nedir? 10.0.0.x ya da 192.168.1.x gibi IP ler neyin nesidir?  
NAT ne olduğunu, nasıl çalıştığını, ne tür NAT çeşitleri olduğunu merak edenler.

Tabi NAT sadece ADSL yönlendiricilerde vardır diyemeyiz. Sırf NAT yapan cihazlar olduğu gibi büyük yönlendiriciler hatta Windows'ta kullandığımız Internet Bağlantı Paylaşımı (Internet Connection Sharing - ICS) gibi yazılımlar da NAT yapabilir.

Nedir bu NAT (netfwork address translation) sorusuna gelmeden önce NAT'ın nasıl çalıştığını anlamakta fayda var. Zaten ondan sonra ne olduğunu anlayacağız. İnternette TCP/IP iletişim kuralları topluluğunu kullanarak haberleşiriz. Topluluk diyorum çünkü içinde birçok iletişim kuralını barındırır (TCP, UDP, ICMP, IP vs). Bu kuralların da nereye gideceklerini bilmeleri için bir adrese ihtiyaçları olacaktır. Buna da IP adresi diyoruz. IP adresi diyince burada NAT'ı ilgilendiren bölüme geliyoruz.

NAT

İnternette kullandığımız IP adreslerini internet servis sağlayıcılar ICANN adlı kuruluşun (Internet Corporation for Assigned Names and Numbers) akredite ettiği firmalardan satın alırlar. Tabi dünyada 6 milyara yakın insan olduğunu ve her geçen gün insanların ve internete girenlerin sayısını arttığını düşünürsek IP adresleri yetmeyecektir. 90'lı yıllarda bunu görenler zaten şuan IP sürüm 6'yı geliştirmekle uğraşıyorlar. IPv6 trilyonlara varan IP adresi kullanmamıza olanak sağlayacak. Bu biraz uzun sürecek çünkü tüm internet altyapısının değişmesi gerekecek. Biz hali hazırda IP sürüm 4 kullanıyoruz. IPv4 ile 4,294,967,296 IP adresiniz olabilir. Ama IP adreslerinin sınıflara (class) ayrılmış olması, bazı adreslerin çoklu gönderim (Multicasting) için, bazılarının da test amaçlı kullanılmasından dolayı bu sayı 3,2 milyara kadara düşmektedir. Sürüm 5 ise deneysel amaçlarla hazırlanmış fakat kullanılmamıştır. 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 yönlendirmede kullanılan bir teknolojidir - Classless Inter Domain Routing - Sınıfsız Alanlararası Yönlendirme). Peki, nasıl çalışıyor ve bu NAT bize nasıl bir kolaylık getirdi?
İnternette gideceğimiz yeri bulmak için IP adresleri kullanırız. Ama her IP adresini internet ortamında kullanamıyoruz. Bazı özel IP adresleri vardır. Bu adresler, daha doğrusu 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, kısaca Private Adresses (özel adresler) diyoruz. İnternette kullandıklarımıza da Public (Halka Açık) Addresses diyoruz (başka deyişlerde mevcuttur. Mesela Real - Gerçek- IP, Registered-Kayıtlı - IP gibi).

Özel IP adresleri:
10.0.0.0 ile 10.255.255.255
172.16.0.0. ile 172.31.255.255
192.168.0.0 ile 192.168.255.255 arasındadır.
Bunlar dışında da başka amaçlar için özel adresler vardır. Ama bizi ilgilendirmiyor. Hiçbir şekilde internette 10.4.34.98 veya 192.168.40.50 gibi adresler göremezsiniz. NAT bu adreslerin internete çıkmasına olanak sağlayan teknolojidir. Peki, nasıl yapıyor bu işi?
Kafamızda NAT mantığı oluşması açısından evde kullandığımız ADSL yönlendiricilerimizi ele alalım. Öncelikle oyuncularımıza rollerini vermekte yarar var. Servis sağlayıcımıza (Türk Telekom) ait belli IP aralıkları var. Bunları ADSL kullanıcılarına sabit (statik) veya değişken (dinamik) olarak dağıtmakta. Buraya Dış taraf (Outside) diyoruz. Birde biz varız. Bizde kendi ADSL yönlendiricimize, bilgisayarımıza veya ağ üzerinden haberleşen başka bir cihazımıza özel IP veririz. Buraya da iç taraf (Inside) diyoruz. Kendi verdiğimiz adresler içeride kendileri ile haberleşirler. Ama iş internete çıkmaya gelince burada NAT devreye giriyor. NAT ne yapıyor? ADSL yönlendiricimizin 3 tane arayüzü (interface) var. Bunlar PPPoE veya PPPoA (internet), Ethernet (yerel) ve geridöngü (Loopback) arayüzleri. Her 3 arayüzüne de IP adresleri atanır. Internet tarafına siz bağlantı kurduğunuzda servis sağlayıcı tarafından, yerel tarafa ise biz IP atarız. Geridöngü (Loopback) varsayılan olarak 127.0.0.1 alır (burası ile pek işimiz yok). ADSL yönlendiricimiz bize ilk geldiğinde onun ethernet arayüzüne bağlanmak için 10.0.0.2 veya 192.168.1.1 gibi adresleri kullanırız. Bunu sonradan değiştirip başka bir özel IP vermek bizim elimizde. Örnek olarak aşağıda bir ADSL modemin arayüzlerini görebilirsiniz.
Siz bilgisayarınızdan bir istek gönderdiğinizde bu istek ADSL yönlendiricinizin Ethernet (eth0) arayüzüne gelir ve NAT bunu çevirip diğer arayüze yönlendirir ve o bağlantı için NAT tablosunda bir kayıt tutulur. Yerel ağ tarafında isterse yüz bilgisayar olsun internete çıktıklarında bir tane IP adresi ile kullanacaklardır (genelde ADSL yönlendiriciler böyle çalıştığı için bu örneği veriyorum, çeşitlerini biraz sonra göreceğiz). O adreste tabi ki servis sağlayıcının size verdiği adrestir. İşte burada NAT insanlara bir IP adresi kullanarak yüzlerce bilgisayarı internet ortamında haberleşmesini sağlıyor. Böylece IP adresi sıkıntısı bir nebze de olsa önlenmiş oluyor. Eğer NAT olmasaydı ne olurdu? Şirketimizde 100 tane bilgisayar var diyelim. Her birini internete çıkarmak için 100 tane IP ye ihtiyacımız olacaktı. Özel adresleri ve NAT ı kullanarak bunun önüne geçilmiş ve IP yetersizliği önlenmiş oldu. Tabi elbet bir gün yetmeyecek ama IPv6 ile bu sorun ortadan kalkacaktır.
NAT kısaca özel IP'lerin internetteki IP'lerle haberleşmesini sağlıyor. Tabi NAT'ın güvenlik tarafı da var. İçeriden bir istek olmadıkça veya siz izin vermedikten sonra dışarıdan hiç kimse içeriye erişemez. Yukarıda verdiğimiz örnekleri kafamızda biraz NAT mantığı otursun diye verdim. Farklı NAT yapılandırmaları mevcut. Yazımızın devamında bunlara da değineceğiz. Ayrıca gelişmiş yönlendiricilerde birçok arayüz vardır. Bunlar DSL teknolojisi yanında ISDN, Frame Relay, Ethernet, Metro Ethernet vs gibi teknolojilerdir. O yüzden bunlardan bir kaçının bulunduğu bir yönlendiricide farklı arayüzler arasında da NAT yapma şansımız olur.
NAT'ın faydalarını ve avantajlarını kısaca sıralamak gerekirse;

  • Az sayıda IP kullanarak birçok istemciyi internete çıkarabilirsiniz. Hem parasal olarak kazanç sağlar hem de IP adresi kıtlığı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 nevi ateş duvarı gibi durur. Dışarıdan gelenler siz izin vermediğiniz sürece içeriye erişemezler.

Tabi bunların yanında ufak dezavantajları da var. Bazı uygulamalar NAT kullanırken zorlukla yaşayabiliyor (FTP gibi). IPSEC kullanıyorsak yine sorunlar yaşayabiliriz. H.323 kullandığınızda sorunlar yaşayabilirisiniz vs...
Şimdi biraz ayrıntıya girelim. NAT denen bu teknolojinin birden fazla çeşidi vardır. Burada bazı NAT terimlerini bilmek gerekir. Yerel ağımız için İç Taraf (Inside), Internet veya yönlendiricinin diğer tarafındaki farklı bir ağ için de Dış Taraf (Outside) diyeceğiz.

Sabit NAT (Static NAT)

 

Bu NAT tipinde NAT ayarımızı her yerel IP adresimizi ayrı ayrı gerçek IP adreslerine eşleyerek yapıyoruz. Yani mesela 192.168.1.20 numaralı yerel IP'mizi internete bakan arayüzümüzdeki 85.99.230.15 numaralı IP ile NAT yapmasını istiyoruz. 10.0.0.31'i de başka bir IP adresi ile... Bu şekilde herkese ayrı ayrı IP adresi vermiş oluyoruz. Bunu iç taraftan dış tarafa, dış taraftan iç tarafa çevirim olacak şekilde ayarlamamız mümkün.

nat1.jpg
Yukarıda sabit (static) NAT örneğini görebilirsiniz. Yönlendiricinin dış tarafa bakan 3 tane seri arayüzü var. İçeride ise 1 tane ethernet arayüzü var. Sabit NAT iç taraftan gelen istekleri tablodaki kayıtlara göre eşler ve internete çıkarır.

Değişken NAT (Dynamic NAT)

Sabit NAT'a benzer. Bu tip NAT ayarında bir IP adres havuzumuz bulunuyor. Mesela Telekom'dan 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. Tabi kullanıcılar hangi IP adresinden çıkacaklarına karar verme yetkisine sahip değildirler. Yoğunluğa göre NAT ayarını yaptığımız cihaz buna karar verecektir.
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- Resimde olduğu gibi statik olarak biz bir eşleme girmişsek, yönlendirici ilgili IP adresi ile çevirme işlemini yapar ve gerekli yere yönlendirir. Girmemişsek 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 bizim 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)
Bir başka ismi de Overloading'dir (Fazla yükleme). Bunda bir tane halka açık (public) IP adresimiz oluyor ve içeride bulunan istemciler dışarı bu IP adresini kullanarak çıkıyorlar. 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. Burada port'un ne olduğunu biraz açıklamak gerekir. Normalde istemciler bir yer ile bağlantı kurduğunda (mesela bir HTTP sunucu) onun 80 numaralı portuna (kapı) gider. Buna hedef port (destination port) deriz. Ama buraya giderken kendilerinden de bir port açarlar. Buna da kaynak port (source port) deriz. Kaynak port 1024 ile 65535 arasında herhangi bir port olabilir. TCP oturumu (TCP Session) kurulması için bu gereklidir. Buna siz değil kullandığınız yazılım veya donanım karar verir.

İstemci

Kaynak Port

Sunucu

Hedef Port

85.99.230.13

 

1740

www.telekom.com.tr (212.175.195.110)

 

80

85.99.230.13

 

32965

ftp.ttnet.net.tr (212.156.2.62)

 

20,21

85.99.230.13

 

1500

irc.orneksunucu.com (66.66.66.66)

 

6667

Port Adres Çevirimini açıklayacak olursak, ağımızda sırasıyla şu adımlar izlenir.
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 bizim 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. (Not: PAT kullanarak biz elle süresiz (permanent) olacak şekilde de ayarlayabiliriz. Belli bir porta (kapıya) gelenleri dışarı ve içeri yönlendirebiliriz.)
Aşağıda PAT yapan bir ADSL yönlendiricinin NAT tablosunun bir kısmını görebilirsiniz.

nat2.jpg

Başlıkları açıklamak gerekirse;
Indx: Yönlendiricinin her NAT işlemi için verdiği bir sıra numarası.
Prot: Hangi iletişim kuralının kullandığını gösterir. 6, TCP'nin iletişim kuralı numarasıdır.
Inside-address port:
Yukarıda bahsettiğimiz üzere iç tarafı temsil etmekte. Yani bizim yerel ağımız.
Outside-address port: Burası da dış tarafı temsil etmekte. Burada fark edersek IP ve port farklıdır.
Foreign-address port: NAT işleminden sonra bağlanılan yeri ve portu göstermekte. Mesela 209.197.87.194 THGTR'dir.
Expir: Bu kaydın ne kadar süre daha tabloda kalacağını gösteriyor.

Örtüşüm (Overlapping)

Başlamadan önce bunun biraz kafa karıştırıcı bir yöntem olduğunu belirtmekte fayda var. Bu yöntemi 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 kullanmanız gerekecek. Biz kolay olanı DNS'yi seçelim. Örneğin iki tane firma var. Anlaşıp birlikte çalışmaya karar veriyorlar. Her iki firmanın da bir ağ yapısı var ama her iki firmada aynı IP aralıklarını kullanıyorlar (10.0.0.0/8). Her iki firmanın da kendilerine ait DNS, POSTA, HTTP vs sunucuları var. Ayrıca yüzlerce de istemci var ve şimdi tüm ağın ayarlarını değiştirmek büyük emek gerektiriyor. Firmalardan birine A firması diğerine B firması diyelim. A firmasında bir istemci (10.1.1.7) karşı ağdaki10.0.0.5 numaralı IP adresine bağlanmak istedi diyelim. Bu istek A firmasının yönlendiricisine geldiğinde bu farklı bir ağ olmadığı için yönlendirmeyecektir. Burada NAT kullanarak bu karışıklığı ortadan kaldırabiliyoruz. Aslında başka yöntemlerle de kaldırılabilir ama konumuzu değiştirmeyelim.
Peki NAT nasıl bu karışıklığı önlüyor. Sırasıyla yazıyorum. Burada A firması iç taraf B firması dış taraftır. Burayı aşağıdaki resme bakarak okursanız daha iyi anlaşılacaktır.

nat3.jpg

A firmasındaki istemci (10.1.1.7) B firmasındaki istemcinin alan adını yazar. Mesela fileserver.bfirması.com (10.0.0.5). Bu istek DNS (Domain Name System - Alan Adı Sistemi) sunucusuna (100.34.12.9) IP adresini öğrenmek için gönderilir. Ama yönlendirici bu isteği engeller. Çünkü B firmasındaki sunucunun adresi iç taraftaki adres yapısıyla aynıdır. Aynı IP aralığını kullanmaktadırlar ve yönlendirici burada NAT yapılması gerektiğini bilir (biz öyle ayarlarız).Yönlendirici dış taraftaki IP adresi için gelen DNS cevabını çevirir ve bizim ayarlayacağımız bir havuzdaki IP adresiyle (20.5.75.60) değiştirir. Sonrada iç tarafa gönderir. İç taraftaki istemci artık dış taraftakinin IP adresini 20.5.75.60 olarak algılar ve o adrese bağlanır. Paket yönlendiriciden çıkarken NAT işlemine girer ve iç taraftakinin IP adresini değiştirir (50.43.19.164) sonrada karşı tarafa gönderir. Bu NAT tablosuna kaydedilir. Aynı şeyleri karşı taraf içinde yapar.

Ayrıca biz iç tarafa gerçek IP adresleri verdiğimizde de bu yöntemi kullanabiliriz. Çünkü gerçek IP adresleri verdiğimizde Internet'te de o adreslerden olacağı için bir nevi çakışmayı önlemiş oluruz. Tabi bunlar biraz gereksiz fanteziler gibi yine de büyük ağlarda bunlar kullanılabiliyor.