NAT kararları çoğu zaman “internete çıkış için PAT, sunucu için port yönlendirme” alışkanlığıyla verilir. Bu yazı kararı gereksinimden başlatıyor: hangi trafik kimin tarafından başlatılıyor, karşı taraf neyi görmeli, kaç bağlantı gerekiyor ve olay olduğunda kim olduğunu nasıl kanıtlayacağız?
NAT’ın teşhisi başka yazılarda anlatıldı: kaynak NAT eşleşmezse ne olduğu Wi-Fi bağlı ama internet yok, iç istemcinin genel adrese gitmesi Google Açılıyor, Şirket Sitesi Açılmıyor, VPN trafiğinin NAT’tan muaf tutulması VPN yazısında, NAT-T IPsec teşhis yazısında. Komutlar resmî belgelerden alındı, laboratuvarda denenmedi; çıktılar temsilîdir.
Önce yön: SNAT ve DNAT
- Kaynak NAT (SNAT): İçeriden başlayan bağlantının kaynak adresi değişir. Kullanıcıların internete çıkışı budur.
- Hedef NAT (DNAT): Dışarıdan gelen bağlantının hedef adresi, gerekirse portu değişir. Bir sunucuyu yayımlamak budur.
Cisco bu ayrımı adres adlarıyla yapar: iç ağdaki gerçek adres inside local, dışarıdan görünen karşılığı inside global. Yönler karışınca kurallar da karışır: “sunucu dışarı aynı IP’den çıksın” bir SNAT, “dışarıdan sunucuya ulaşılsın” bir DNAT gereksinimidir.
Dört yöntem
Örnekler kampüs topolojisine eklenmiş öğretici varsayımlardır. Firewall’un WAN adresi 203.0.113.1, ISP’nin yönlendirdiği blok 203.0.113.8/29; bu bloktaki 203.0.113.10 önceki yazıda portal için kullanıldığından burada 203.0.113.11–14 kullanılıyor. Mail sunucusu 10.0.30.25, iç web uygulaması 10.0.30.70.
- Statik 1:1 NAT: Bir iç adres her zaman aynı genel adrese karşılık gelir; portlar değişmez. İki yönde çalışması, iki çevirinin de yapılandırılmasına bağlıdır: FortiOS 7.6.4’te statik VIP gelen trafiğin DNAT’ını, one-to-one IP havuzu giden trafiğin SNAT’ını karşılar. Eşleme kalıcı olduğundan dışarıdan gelen bağlantı o iç adrese ulaşabilir.
- Dinamik havuz: İç adresler bir genel adres havuzundan boşta olana eşlenir; port değişmez. Havuzdaki adres sayısı kadar iç adres aynı anda çıkabilir. FortiOS’ta bunun karşılığı one-to-one IP havuzudur: Fortinet’e göre iki adresli bir one-to-one havuz yalnızca iki iç adrese hizmet eder. 203.0.113.13–14 bu havuz ve Alıştırma 1’deki overload havuzu için alternatif örnektir; ikisi aynı anda tanımlanmaz.
- PAT (overload): Çok sayıda iç adres tek ya da birkaç genel adresi paylaşır; aynı anda ayrılabilmek için kaynak portlar da çevrilir. Eşleme içeriden başlayan bağlantıyla oluşur.
- Port yönlendirme: Genel adresin yalnızca belirli bir portu bir iç adres ve porta yönlendirilir. Örnekte 203.0.113.1:8443, 10.0.30.70:443’e gider; aynı WAN adresi kullanıcıların PAT çıkışına da hizmet etmeye devam eder.
Statik NAT bir izin değildir. NAT adres çevirir; bağlantıya izin verip vermemek firewall politikasının işidir. RFC 4864, başlıktaki adres bitlerini çevirmenin kendi başına güvenlik sağlamadığını yazar ve bir örnek verir: bütün gelen portları tek bir makineye çeviren statik NAT’ta o makinenin riski, arada NAT hiç yokmuş gibidir. Bu yüzden 1:1 eşlemede bile politika yalnızca gereken portlara izin vermelidir. Oturum takibi de NAT’tan ayrı bir işlevdir; yanıt trafiğinin nasıl eşlendiği stateful firewall yazısında anlatıldı.
Gereksinimden yönteme
| Gereksinim | Uygun yöntem | Dikkat |
|---|---|---|
| Kullanıcıların internete çıkışı | PAT (arayüz adresi ya da havuz) | Kapasite hedef dağılımına bağlı |
| Dışarıdan bir servise erişim | Port yönlendirme ya da 1:1 NAT + politika | Politika yalnızca gereken portu açar |
| Sunucunun hem gelen hem giden trafiği aynı genel adreste | 1:1 NAT ya da port yönlendirme + o adrese SNAT | İki yön ayrı kurallardır |
| Karşı tarafın sabit kaynak IP istemesi | Sabit genel adresle SNAT/PAT | 1:1 şart değil |
| Port çevirisinin istenmediği uygulamalar | Dinamik havuz ya da 1:1 | Adres sayısı kadar eşzamanlı istemci |
Sabit kaynak IP isteyen bir iş ortağı için ayrı bir 1:1 eşleme gerekmez. Arayüz adresiyle yapılan PAT da sabit bir genel adresten çıkar; tek fark, o adresi bütün kullanıcı trafiğinin paylaşmasıdır. İş ortağının izin listesinde yalnızca bu trafiğin görünmesi isteniyorsa, iş ortağına giden trafik için ayrı bir genel adresle SNAT/PAT kuralı yazılır.
PAT kapasitesi: 65.535 bir bağlantı sayısı değildir
Port alanı 16 bittir, ama bu sayı her cihazda kullanılabilir bağlantı kapasitesi değildir:
- Kullanılabilir port aralığı üreticiye göre değişir. Fortinet’in FortiOS 7.6.4 Dynamic SNAT belgesi IP başına 60.416 port kullanılabildiğini yazar. Cisco’nun IOS XE 17.x NAT kılavuzu, arayüz overload için etkin port aralığının tipik olarak 53.000–58.000 olduğunu belirtir.
- Port aynı hedefe karşı mı tükeniyor? FortiOS belgesi overload havuzunun kapasitesini aynı servise göre verir; servis protokol, hedef IP ve hedef port üçlüsüdür. Fortinet’in port tükenmesi notu da tükenmeyi aynı hedef IP, port ve protokole açılan çok sayıda bağlantıyla açıklar. Cisco’da portun hedefe göre yeniden kullanılması (PAT over 64K, Endpoint Dependent Mapping) ayrı bir özelliktir ve kılavuz bunun yalnızca klasik NAT modunda, VRF ve ALG olmadan desteklendiğini yazar.
- TCP ve UDP ayrı port alanlarıdır. Bir protokoldeki tükenme diğerini doğrudan etkilemez.
- Zaman aşımı portu tutar. RFC 5382’ye göre kurulu bir TCP eşlemesinin boşta zaman aşımı en az 2 saat 4 dakika olmalıdır; RFC 4787’ye göre UDP eşlemesi iki dakikadan önce düşmemeli, beş dakika veya üzeri önerilir. Kapanmış ama henüz serbest kalmamış eşlemeler de port harcar.
- Tahsis yöntemi kapasiteyi bölebilir. FortiOS’un port block allocation havuzunda her iç adrese sabit büyüklükte blok verilir. Belgedeki örnekte 128 portluk bloklardan kullanıcı başına 8 blok verildiğinde bir genel adres yalnızca 59 iç adrese yeter. Fixed port range ise iç adres aralığını genel adresin portlarına önceden böler.
2000 kullanıcı tek IP’den çıkar mı? Cevap trafiğin şekline bağlıdır. Öğretici bir varsayım: her kullanıcının ortalama 25 eşzamanlı bağlantısı var. Bunlar yüzlerce farklı hedefe dağılıyorsa, FortiOS overload’da her hedef için gereken port 60.416’nın çok altında kalır. Ama kullanıcıların çoğu aynı SaaS uç noktasına, örneğin 198.51.100.70:443’e, kişi başına 30 bağlantıyla gidiyorsa toplam 60.000’e yaklaşır ve sınıra dayanır. Cisco arayüz overload’ında ise kılavuzun verdiği 53.000–58.000’lik etkin aralık esas alınır; portun hedefe göre yeniden kullanılması EDM özelliğine bağlıdır. Kesin cevap için tahmin değil, mevcut oturumların hedef dağılımı ölçülür.
Tükenme nasıl görünür?
Toplam oturum sayısına bakmak yetmez; tükenme yeni bağlantıların açılamamasıyla kendini gösterir. RFC 6888, büyük ölçekli NAT için bu davranışı tanımlar: eşleme oluşturulamazsa yeni paket düşürülür, mevcut eşlemeler yer açmak için silinmez. Kullanıcının gördüğü tablo da budur: açık oturumlar çalışır, yeni bağlantılar zaman aşımına düşer. Belirtiler üreticiye göre farklı okunur:
| Platform | Salt okunur kontrol | Neye bakılır |
|---|---|---|
| FortiOS (6.0 ve sonrası, Fortinet teknik notu) | diagnose sys session stat |
clash sayacının artışı |
| FortiOS | Sistem olay logu | logid 0100020007, “NAT port is exhausted.” |
| Cisco IOS XE 17.x | show ip nat statistics |
Kılavuza göre tahsis hataları için düşürme sayaçları |
| Cisco IOS XE 17.x | show ip nat translations |
Aktif eşlemeler (inside local/global) |
| Huawei AR V200R010 | display nat session all, display nat outbound |
Oturumlar ve çıkış NAT bağlamaları |
| Huawei USG V500/V600 | display firewall session table verbose |
Köşeli parantez içinde NAT sonrası adres |
NAT kaydı neyi kanıtlar?
Dışarıdan bir kötüye kullanım bildirimi geldiğinde zincir şöyledir:
- Dış hizmetin kaydı: protokol, kaynak IP, kaynak port ve doğru UTC zaman. RFC 6302, internete açık sunuculara gelen IP’nin yanında kaynak portu ve izlenebilir bir zaman kaynağından, saniye doğruluğunda, tercihen UTC zaman damgasını kaydetmelerini önerir.
- NAT eşleme ya da port blok kaydı: Hangi iç adresin o anda o dış adres ve portu kullandığını gösterir.
- İç adres: Bir cihazı gösterir.
- Gerekiyorsa DHCP, NAC, AAA ya da kimlik oturumu: Cihazdan kullanıcı hesabına geçmek için ayrı kanıttır.
RFC 6302 ile RFC 6888 farklı taraflara yazılmıştır: ilki sunucu tarafına, ikincisi NAT işletenine. RFC 6888’e göre NAT’ın her eşleme için protokolü, iç kaynak kimliğini, dış adresi, dış portu ve zamanı kaydetmesi gerekebilir; hedef adres ve portu ise idari bir gerekçe yoksa kaydetmemesi gerektiğini, çünkü bunun gizlilik sorunu yarattığını yazar. Bu yüzden NAT logunda hedef bilgisinin bulunması beklenmez; eşleme türüne göre dış adres ve port, iç adresi bulmaya yeter. Port block allocation’da tek kayıt bir port aralığını kapsar ve log hacmi azalır.
Sınırlar:
- Kayıt cihazı gösterir, insanı değil. NAT kaydı bir iç adrese, DHCP bir MAC adresine, NAC ya da AAA o anda oturum açmış hesaba götürür. O hesabı gerçekte kimin kullandığı ayrıca değerlendirilir.
- Zaman ve port yeniden kullanımı. RFC 6302’nin belirttiği gibi portlar hızla yeniden kullanılabilir. NAT cihazının ve dış sunucunun saati senkron değilse ya da zaman damgası saat dilimi bilgisini kaybetmişse yanlış eşlemeye ulaşılır. NTP ve log damgası konuları yönetim düzlemi yazısında anlatıldı.
- CGNAT zinciri. Firewall’un WAN adresi de bir ISP CGNAT’ının arkasındaysa, dış dünyanın gördüğü adres ISP’nindir. Zincir önce ISP’nin kaydından geçer.
- Gereğinden fazla kayıt tutmak. Olay incelemesi için gereken alanlar belirlenir; hedef adresi, kullanıcı adı gibi ek veriler ancak bir gerekçe varsa kaydedilir. Saklama süresi ve kişisel veri yükümlülükleri kurumun hukuk birimiyle birlikte belirlenir.
Kendinizi deneyin
Alıştırma 1: Üç gereksinim var. (a) Mail sunucusu 10.0.30.25 dışarıdan SMTP kabul edecek ve gönderdiği posta da aynı genel adresten çıkacak. (b) Kampüsün farklı VLAN’larına dağıtılmış toplam 2000 kullanıcı aynı genel IP üzerinden (203.0.113.1) internete çıkacak; gerekirse 203.0.113.13–14 kullanılabilir. (c) Bir iş ortağı, 198.51.100.60:443’teki servisine yalnızca sabit bir kaynak IP’den gelinmesini istiyor. Hangi yöntemleri seçersiniz?
Cevap ve açıklama
- (a) Mail sunucusu: İki geçerli tasarım var. Birincisi 203.0.113.11 ile 1:1 NAT; FortiOS’ta gelen yön için statik VIP, giden yön için one-to-one IP havuzu gerekir. İki yönün de 203.0.113.11’i kullandığı, gelen ve giden oturumlarda ayrıca doğrulanır. İkincisi 203.0.113.11’in TCP 25’ini sunucuya yönlendiren port yönlendirme ve sunucunun giden trafiği için aynı adrese ayrı bir SNAT kuralı. İki tasarımda da gelen bağlantı için ayrıca firewall politikası gerekir ve politika yalnızca TCP 25’e izin vermelidir. 1:1 NAT tek başına diğer portları korumaz.
- (b) 2000 kullanıcı: PAT. 203.0.113.1 yeterli olabilir; karar oturumların hedef dağılımına bakılarak verilir. Belirli bir hedefe yoğunlaşma varsa 203.0.113.13–14 bir overload havuzuna eklenir ve tükenme göstergeleri izlenir. Port blok tahsisi seçilirse blok büyüklüğü, kullanıcı başına bağlantı ihtiyacına göre hesaplanır.
- (c) İş ortağı: 1:1 NAT gerekmez. 203.0.113.1 zaten sabittir; iş ortağı bütün kurum trafiğinin bu adresten geldiğini kabul ediyorsa PAT yeterlidir. Bu trafiğin ayrı görünmesi isteniyorsa 198.51.100.60’a giden trafik için 203.0.113.12 ile ayrı bir SNAT/PAT kuralı yazılır ve iş ortağına bu adres bildirilir.
Alıştırma 2: 198.51.100.80’deki bir web servisinin işletmecisi bildirim gönderiyor: “203.0.113.1 adresinden 5 Mart 2027 14:02:11’de saldırı denemesi.” Firewall’un NAT loglarında o dakikada 203.0.113.1 için yüzlerce eşleme var. İkinci yazışmada eklenen bilgi: TCP, kaynak port 40112, zaman 2027-03-05T11:02:11Z. Elinizdeki kayıtlar temsilîdir:
NAT TCP 10.0.20.25:51514 -> 203.0.113.1:40112 basla=2027-03-05T11:01:58Z bitis=2027-03-05T11:02:40Z
NAT TCP 10.0.20.88:49920 -> 203.0.113.1:40112 basla=2027-03-05T11:05:03Z bitis=2027-03-05T11:05:31Z
DHCP 10.0.20.25 MAC 02:00:5e:10:20:25 kira 2027-03-05T06:10:00Z - 2027-03-05T18:10:00Z
NAC MAC 02:00:5e:10:20:25 802.1X hesap p0142 oturum 2027-03-05T06:10:12Z - 2027-03-05T15:40:00Z
İlk bildirim neden yetersizdi? Eklenen bilgiyle hangi sonuca ulaşılır, hangisine ulaşılamaz?
Cevap ve açıklama
- İlk bildirim neden yetersiz: 203.0.113.1 bütün kullanıcıların PAT adresidir; port olmadan yüzlerce eşleme aynı anda adaydır. Zamanın saat dilimi de yazılmamıştır: 14:02:11 yerel saat (+03:00) ise UTC’de 11:02:11’dir, UTC ise üç saat sonraki başka bir andır.
- Eklenen bilgiyle: Protokol, port ve UTC zaman birlikte tek bir eşlemeye götürür: 11:02:11Z, 10.0.20.25:51514 eşlemesinin aralığındadır. Aynı dış port 11:05:03Z’de 10.0.20.88’e yeniden verilmiştir; birkaç dakikalık bir saat hatası yanlış cihaza götürürdü. Bu yüzden firewall’un NTP durumu da kanıta eklenir.
- Cihazdan hesaba: DHCP kaydı 10.0.20.25’i bir MAC adresine, NAC kaydı o MAC’te o saatte açık olan 802.1X hesabına bağlar. Her adım ayrı bir kanıttır.
- Ulaşılamayan sonuç: Kayıtlar trafiğin hangi cihazdan çıktığını ve o anda hangi hesabın ağda oturum açtığını gösterir; eylemi o hesabın sahibinin yaptığını tek başına kanıtlamaz. Cihaz paylaşılıyor ya da ele geçirilmiş olabilir.
- Bildirim yapan taraf: RFC 6302’ye göre sunucu tarafı ilk bildirimde port ve UTC zamanı vermiş olsaydı ikinci yazışmaya gerek kalmazdı.
Kaynaklar
- RFC 2663: NAT Terminology
- RFC 3022: Traditional IP NAT
- RFC 4787: NAT and UDP
- RFC 5382: NAT and TCP
- RFC 4864: Local Network Protection for IPv6
- RFC 6302: Server Logging
- RFC 6888: CGN Requirements
- RFC 1918: Private Addresses
- RFC 5737: Documentation Addresses
- Fortinet: Dynamic SNAT, FortiOS 7.6.4
- Fortinet: Static virtual IPs, FortiOS 7.6.4
- Fortinet: How to determine whether a NAT port is exhausted
- Fortinet: Avoid NAT port exhaustion
- Cisco: NAT for IP Address Conservation, IOS XE 17.x
- Huawei: NAT Configuration Commands, AR V200R010
- Huawei: Checking the Session Table, USG V500/V600