FortiGate Hairpin NAT Nedir, Nasıl Kurulur? GUI ve CLI Rehberi
🌐 Ağ & Network

FortiGate Hairpin NAT Nedir, Nasıl Kurulur? GUI ve CLI Rehberi

FortiGate Hairpin NAT (NAT loopback) nedir, GUI ve gerçek FortiOS CLI komutlarıyla nasıl kurulur? VIP, policy, test ve hata çözümü.

Yitser Teknoloji30 Eylül 202618 dk okuma
Blog'a Dön

FortiGate Hairpin NAT Nedir?

FortiGate Hairpin NAT, iç ağdaki bir kullanıcının yine iç ağda bulunan bir sunucuya o sunucunun public IP adresi veya public alan adı üzerinden erişmesini sağlar. Aynı özellik Fortinet dokümanlarında NAT loopback ve U-turn NAT adlarıyla da geçer.

En basit örnek şudur: Şirket dışındayken https://portal.firma.com adresi public IP üzerinden içerideki web sunucusuna gider. Şirket içindeki kullanıcı da aynı adresi yazdığında yine aynı sunucuya ulaşmak ister. İstek FortiGate’e gelir, FortiGate hedef public IP’yi sunucunun private IP’sine çevirir ve paketi iç ağa geri gönderir. Trafik dışarı çıkıp internette dolaşmaz.

Kısa tanım: İçeriden public IP’ye gelen paket FortiGate üzerinde yön değiştirip tekrar içeri döndüğü için bu işleme “hairpin” veya “U-turn” denir.
FortiGate Hairpin NAT topolojisi: iç kullanıcı public IP üzerinden iç sunucuya erişiyor
FortiGate Hairpin NAT topolojisi: iç kullanıcı public IP üzerinden iç sunucuya erişiyor
Şema Yitser Teknoloji tarafından, Fortinet’in resmî Hairpin NAT örneğindeki trafik mantığı temel alınarak hazırlanmıştır.

Hairpin NAT Hangi Durumda Gerekir?

Aşağıdaki durumda Hairpin NAT gerekir:

  1. İçeride bir web, kamera, ERP, mail veya uygulama sunucusu vardır.
  2. Bu sunucu FortiGate üzerinde bir VIP ile public IP’ye veya public porta yayınlanmıştır.
  3. İç ve dış kullanıcıların aynı alan adını kullanması istenir.
  4. İç DNS de bu alan adını public IP’ye çözer.

Örneğin dışarıda çalışan kullanıcı portal.firma.com için 203.0.113.10 adresine gider. Ofisteki bilgisayar da aynı DNS cevabını alır. Hairpin NAT yoksa içerideki kullanıcı public IP üzerinden sunucuya ulaşamayabilir; dışarıdan erişim çalışırken içeriden erişim başarısız olur.

Hairpin NAT mı, Split DNS mi?

Yöntemİç kullanıcı neye bağlanır?AvantajDikkat edilmesi gereken
Hairpin NATPublic IP’yeİçeride ve dışarıda aynı DNS cevabı kullanılırEk VIP/policy ve çoğu aynı ağ senaryosunda SNAT gerekir
Split DNSDoğrudan private IP’yeDaha kısa trafik yolu, gerçek istemci IP’si korunurİç DNS kaydı ayrıca yönetilir

İç DNS’i yönetebiliyorsanız Split DNS çoğu zaman daha sade çözümdür. Aynı public IP’nin içeride de kullanılmasının zorunlu olduğu yapılarda veya DNS’i ayıramadığınız durumda Hairpin NAT uygundur.


Bu Rehberde Kullanılan Örnek

Komutları anlaşılır tutmak için aşağıdaki örnek kullanılacaktır. Bunlar gerçek bir firmaya ait adresler değildir; dokümantasyon için ayrılmış örnek IP’lerdir.

BileşenÖrnek değer
İç istemci192.168.10.50
FortiGate LAN arayüzülan — 192.168.10.1
FortiGate WAN arayüzüwan1
Public IP203.0.113.10
İç web sunucusu192.168.10.100
Yayınlanan servisHTTPS — TCP/443
VIP adıVIP_WebServer_HTTPS
Alan adıportal.example.com
Komutları doğrudan yapıştırmadan önce lan, wan1, public IP ve sunucu IP değerlerini kendi yapınıza göre değiştirin.

Paket FortiGate Üzerinde Nasıl İlerler?

  1. İstemci portal.example.com adını sorgular ve 203.0.113.10 public IP cevabını alır.
  2. Hedef kendi ağı dışında olduğu için paketi varsayılan ağ geçidine, yani FortiGate’e gönderir.
  3. FortiGate üzerindeki VIP, hedefi 203.0.113.10:443 adresinden 192.168.10.100:443 adresine çevirir. Bu işlem DNAT’tir.
  4. Hairpin firewall policy trafiğe izin verir. Aynı LAN içindeki örnekte policy üzerindeki NAT, istemci kaynak adresini FortiGate LAN IP’sine çevirir. Bu işlem SNAT’tir.
  5. Sunucu cevabı FortiGate’e gönderir. FortiGate oturum tablosundaki iki çeviriyi tersine uygulayıp cevabı istemciye ulaştırır.
FortiGate Hairpin NAT paket akışı ve DNAT ile SNAT dönüşümleri
FortiGate Hairpin NAT paket akışı ve DNAT ile SNAT dönüşümleri
Başarılı bir oturumda trafik logunda trandisp="snat+dnat" görülmesi, iki çevirinin de uygulandığını gösterir.

Aynı LAN’da SNAT Neden Önemlidir?

İstemci ile sunucu aynı IP ağındaysa sunucu, istemcinin gerçek IP’sini gördüğünde cevabı doğrudan istemciye göndermeye çalışabilir. Dönüş paketi FortiGate’ten geçmezse public IP çevirisi geri alınamaz ve oturum bozulur. Policy üzerinde set nat enable kullanmak, sunucunun cevabı FortiGate’e vermesini zorlar.

Farklı ve FortiGate tarafından yönlendirilen VLAN’larda dönüş yolu zaten FortiGate’ten geçebilir. Buna rağmen bu rehberdeki güvenli, kolay doğrulanabilir örnek SNAT’i açık tutar. Bunun karşılığı, sunucu loglarında istemcinin gerçek IP’si yerine FortiGate arayüz IP’sinin görülebilmesidir.


Kuruluma Başlamadan Önce Kontrol Edin

  • Sunucunun private IP’sine içeriden erişilebildiğini doğrulayın.
  • FortiGate üzerinde sunucuya giden route’un doğru arayüzü gösterdiğini kontrol edin.
  • VIP’de kullanacağınız port ile sunucunun gerçekten dinlediği portun aynı olduğundan emin olun.
  • Değişiklikten önce FortiGate konfigürasyon yedeğini alın.
  • Mevcut policy sırasını kontrol edin; daha yukarıdaki deny kuralı yeni policy’yi engelleyebilir.

Central NAT Açık mı?

Aşağıdaki komut yalnızca mevcut ayarı gösterir:

bashbash
show full-configuration system settings | grep central-nat

Çıktı set central-nat disable ise bu rehberdeki policy tabanlı NAT komutları doğrudan uygulanabilir. Çıktı set central-nat enable ise SNAT, firewall policy içindeki set nat enable yerine Central SNAT Map üzerinden yönetilir. Bu durumda aşağıdaki policy bloğunu tek başına kullanmak eksik kalır.

Bu rehber, FortiGate’in varsayılan çalışma biçimi olan Central NAT kapalı yapı içindir. Cihazınızda Central NAT açıksa mevcut Central SNAT sırası görülmeden genel bir kural eklemek doğru değildir.

GUI ile FortiGate Hairpin NAT Kurulumu

Menü adları FortiOS sürümüne göre küçük farklılık gösterebilir. Fortinet’in güncel yönetim kılavuzunda VIP menüsü Policy & Objects > Virtual IPs; Central NAT açıksa Policy & Objects > DNAT & Virtual IPs altında gösterilir.

1. Virtual IP (VIP) Oluşturun

FortiGate arayüzünde Policy & Objects > Virtual IPs bölümüne girin ve Create New > Virtual IP seçin.

AlanGirilecek değerNeden?
NameVIP_WebServer_HTTPSPolicy içinde seçilecek nesne adı
InterfaceanyVIP’nin LAN’dan gelen hairpin isteğinde de eşleşmesi için
TypeStatic NATPublic IP’yi private IP’ye eşlemek için
External IP address/range203.0.113.10Kullanıcının bağlandığı public IP
Mapped IP address/range192.168.10.100Gerçek iç sunucu IP’si
Port ForwardingEnableYalnız gereken portu yayınlamak için
ProtocolTCPHTTPS TCP kullanır
External service port443Dışarıdan kullanılan port
Map to port443Sunucunun dinlediği port

Buradaki kritik alan Interface = any değeridir. Central NAT kapalıyken VIP yalnız wan1 arayüzüne bağlıysa bu VIP nesnesi LAN kaynaklı policy’de kullanılamaz; LAN’dan gelen trafik izin veren bir policy bulamadığı için düşer.

2. Hairpin Firewall Policy Oluşturun

Policy & Objects > Firewall Policy bölümünde yeni bir IPv4 policy oluşturun.

AlanGirilecek değer
NameHairpin_LAN_to_WebServer
Incoming Interfacelan
Outgoing Interfacelan
SourceKendi LAN subnet nesneniz; testte all
DestinationVIP_WebServer_HTTPS
Schedulealways
ServiceHTTPS
ActionACCEPT
NATEnable — Use Outgoing Interface Address
Log Allowed TrafficAll Sessions

İstemci ve sunucu farklı VLAN’lardaysa Incoming Interface istemci VLAN’ı, Outgoing Interface ise sunucu VLAN’ı olmalıdır. Destination alanına private IP nesnesini değil, oluşturduğunuz VIP nesnesini seçin.


FortiGate Hairpin NAT CLI Komutları

Aşağıdaki bloklar FortiOS’un gerçek CLI söz dizimidir. Örnek, yalnız HTTPS portunu yayınlar ve Central NAT kapalı yapı içindir.

1. VIP Oluşturma

bashbash
config firewall vip
    edit "VIP_WebServer_HTTPS"
        set extip 203.0.113.10
        set mappedip "192.168.10.100"
        set extintf "any"
        set portforward enable
        set protocol tcp
        set extport 443
        set mappedport 443
    next
end

Bu blokta extip public IP’yi, mappedip iç sunucu IP’sini tanımlar. Central NAT kapalı yapıda extintf "any", aynı VIP nesnesinin hem WAN hem de LAN kaynaklı uygun firewall policy’lerde kullanılabilmesini sağlar.

2. LAN’dan LAN’a Hairpin Policy Oluşturma

bashbash
config firewall policy
    edit 0
        set name "Hairpin_LAN_to_WebServer"
        set srcintf "lan"
        set dstintf "lan"
        set action accept
        set srcaddr "all"
        set dstaddr "VIP_WebServer_HTTPS"
        set schedule "always"
        set service "HTTPS"
        set logtraffic all
        set nat enable
    next
end

edit 0, FortiOS’un kullanılmayan yeni bir policy ID atamasını sağlar. Policy oluşturulduktan sonra GUI’den veya show firewall policy çıktısından gerçek ID’yi görün. Üretimde srcaddr "all" yerine yalnız erişmesi gereken LAN subnet nesnesini kullanın.

3. Farklı VLAN Örneği

İstemci WiFi-Vlan100, sunucu Server-Vlan150 arkasındaysa değişen ana bölüm arayüzlerdir:

bashbash
config firewall policy
    edit 0
        set name "Hairpin_WiFi_to_WebServer"
        set srcintf "WiFi-Vlan100"
        set dstintf "Server-Vlan150"
        set action accept
        set srcaddr "all"
        set dstaddr "VIP_WebServer_HTTPS"
        set schedule "always"
        set service "HTTPS"
        set logtraffic all
        set nat enable
    next
end

SNAT bu örnekte de açık bırakılmıştır; böylece dönüş yolu FortiGate üzerinden kesinleştirilir. Sunucunun gerçek istemci IP’sini görmesi zorunluysa, iki VLAN’ın dönüş rotası ve sunucu ağ geçidi doğrulandıktan sonra NAT tasarımı ayrıca değerlendirilmelidir.

İnternetten Erişim İçin WAN Policy Ayrıdır

Hairpin policy yalnız iç kullanıcıların public IP üzerinden iç sunucuya erişmesini sağlar. Sunucunun internetten de erişilebilir olması isteniyorsa ayrıca wan1 yönünden sunucu ağına gelen, destination olarak aynı VIP’yi kullanan bir inbound policy gerekir. Mevcut çalışan WAN policy’niz varsa ikinci bir tane oluşturmayın.

bashbash
config firewall policy
    edit 0
        set name "WAN_to_WebServer_HTTPS"
        set srcintf "wan1"
        set dstintf "lan"
        set action accept
        set srcaddr "all"
        set dstaddr "VIP_WebServer_HTTPS"
        set schedule "always"
        set service "HTTPS"
        set logtraffic all
        set nat disable
    next
end
Bu WAN policy internetten erişim açar. Yalnız gerekli servisleri yayınlayın; yönetim portlarını ve geniş ALL servislerini gereksiz yere internete açmayın.

nat-source-vip Gerekli mi?

Bu örnek için hayır. set nat-source-vip enable, Hairpin NAT’i açan genel bir anahtar değildir. Fortinet CLI referansına göre bu seçenek, VIP’nin mapped IP’sinden çıkan trafiğin kaynak adresini VIP external IP’sine zorlayabilir. Yanlış kullanılırsa başka çıkış trafiğinin beklemediğiniz public IP ile SNAT edilmesine neden olabilir.

Bu rehberde dönüş yolunu firewall policy üzerindeki set nat enable sağlar. nat-source-vip ayarını yalnız tasarımınız özellikle gerektiriyorsa ve etkisini oturum/packet capture ile doğrulayabiliyorsanız kullanın.


Kurulumu Nasıl Test Edersiniz?

1. İstemcide DNS ve Port Testi

Windows istemcide önce alan adının doğru public IP’ye çözüldüğünü kontrol edin:

powershellpowershell
nslookup portal.example.com
Test-NetConnection portal.example.com -Port 443

Beklenen DNS cevabı 203.0.113.10, port testinin sonucu ise TcpTestSucceeded : True olmalıdır.

2. Forward Traffic Logunu Kontrol Edin

Log & Report > Forward Traffic bölümünde istemci IP’sine göre filtreleme yapın. Başarılı hairpin oturumunda şu bilgiler görülmelidir:

  • Kaynak arayüz: lan
  • Hedef arayüz: lan
  • Eşleşen policy: Hairpin_LAN_to_WebServer
  • Original destination: 203.0.113.10
  • Translated destination: 192.168.10.100
  • Translation disposition: snat+dnat

3. CLI ile Debug Flow Çalıştırın

Aşağıdaki komutlar yalnız örnek istemci ile public IP arasındaki trafiği filtreler:

bashbash
diagnose debug reset
diagnose debug flow filter clear
diagnose debug flow filter saddr 192.168.10.50
diagnose debug flow filter daddr 203.0.113.10
diagnose debug flow show iprope enable
diagnose debug flow show function-name enable
diagnose debug console timestamp enable
diagnose debug flow trace start 100
diagnose debug enable

İstemciden bağlantıyı yeniden deneyin. İşiniz bittiğinde debug’ı mutlaka kapatın:

bashbash
diagnose debug disable
diagnose debug reset

Çıktıda find DNAT, doğru policy ID ve SNAT satırlarını arayın. Denied by forward policy check (policy 0) görülüyorsa trafiğe uyan bir firewall policy yoktur; FortiGate paketi varsayılan deny ile düşürmüştür.

Eski Oturumu Temizleme

VIP veya policy değişikliğinden sonra eski session yeni ayarı gizleyebilir. Önce filtre koyup yalnız ilgili oturumu temizleyin:

bashbash
diagnose sys session filter clear
diagnose sys session filter src 192.168.10.50
diagnose sys session filter dst 203.0.113.10
diagnose sys session clear
diagnose sys session filter clear

FortiGate Hairpin NAT Çalışmıyorsa

BelirtiMuhtemel nedenKontrol
Dışarıdan çalışıyor, içeriden çalışmıyorVIP yalnız WAN arayüzüne bağlı veya hairpin policy yokVIP extintf, LAN’dan başlayan policy ve policy sırası
Denied by forward policy check (policy 0)Arayüz, source, destination VIP veya service eşleşmiyorDebug flow içindeki in, out, DNAT ve policy satırları
DNAT görülüyor ama cevap yokAynı ağda SNAT kapalı veya sunucunun dönüş yolu farklıPolicy NAT, sunucu gateway’i ve sunucu firewall’u
IP ile açılıyor, alan adıyla açılmıyorDNS kaydı yanlış veya önbellek eskinslookup, istemci DNS cache’i ve public DNS kaydı
HTTPS sertifika uyarısı çıkıyorIP ile erişiliyor veya sertifika adı FQDN ile uyuşmuyorSertifikanın SAN/CN alanı ve kullanılan URL
Yanlış porta gidiyorVIP external/mapped port eşlemesi hatalıextport, mappedport ve sunucunun dinlediği port
Değişiklik yapıldı ama davranış aynıEski session devam ediyorFiltreli session temizleme ve yeniden test
SD-WAN yapısında farklı davranıyorPolicy route veya SD-WAN kuralı akışı etkiliyorRoute lookup, policy route, SD-WAN rule ve debug flow

En Sık Yapılan Üç Hata

  1. Policy destination alanına VIP yerine private sunucu adresini seçmek.
  2. İstemci ve sunucu aynı arayüzdeyken policy’yi lan -> wan1 oluşturmak.
  3. Aynı subnet senaryosunda NAT’i kapatıp dönüş paketinin FortiGate’i atlamasına izin vermek.

Güvenli Bir Hairpin NAT Kuralı İçin

  • Source alanını all bırakmak yerine gerçek kullanıcı subneti veya gerekli cihaz grubu ile sınırlandırın.
  • Service alanında ALL kullanmayın; HTTPS, kamera portu veya uygulamanın gerçek portunu seçin.
  • VIP’de yalnız gereken portları yayınlayın.
  • logtraffic all ile kabul edilen oturumları kaydedin.
  • WAN’dan erişim gerekmiyorsa ayrı WAN policy açmayın.
  • RDP, SSH ve yönetim panellerini doğrudan internete yayınlamak yerine VPN veya ZTNA kullanın.
  • Değişiklikten önce ve sonra route, policy hit count, session ve trafik loglarını karşılaştırın.

Sık Sorulan Sorular

Hairpin NAT, NAT Loopback ve U-turn NAT aynı şey mi?

Evet. Üç ifade de iç ağdan başlayan trafiğin public IP’ye gidip firewall üzerinde iç sunucuya çevrilerek yeniden iç ağa gönderilmesini anlatır.

VIP Interface mutlaka any mi olmalı?

LAN’dan gelen hairpin isteğinin VIP ile eşleşebilmesi gerekir. Fortinet’in resmî örneği Interface alanında any kullanır. Daha dar bir tasarım yapacaksanız paketin gerçekten girdiği iç arayüzü de VIP kapsamına almalısınız; yalnız WAN seçmek çoğu hairpin senaryosunda eşleşmeyi engeller.

Policy üzerinde NAT mutlaka açık mı olmalı?

İstemci ve sunucu aynı subnet içindeyse dönüşün FortiGate üzerinden gelmesini sağlamak için genellikle evet. Ayrı, FortiGate tarafından yönlendirilen VLAN’larda simetrik dönüş varsa SNAT teknik olarak gerekmeyebilir; fakat gerçek istemci IP’sini korumak istiyorsanız bunu route ve oturum testiyle doğrulamanız gerekir.

FortiGate modem arkasındaysa Hairpin NAT yapılabilir mi?

FortiGate LAN’dan gelen public hedefli paketi VIP ile eşleştiriyorsa hairpin çalışabilir. Ancak internetten erişim için üst modem/router üzerinde de doğru port yönlendirmesi veya DMZ/bridge tasarımı gerekir. Public IP’nin hangi cihaz üzerinde sonlandığını netleştirmeden yalnız FortiGate policy’sine bakmak yeterli değildir.

Hairpin NAT için nat-source-vip enable şart mı?

Hayır. Bu ayar genel Hairpin NAT anahtarı değildir ve bu rehberde kullanılmaz. Kaynak çevirisi firewall policy üzerindeki NAT ile yapılır.

Dışarıdan erişim çalışıyorsa neden içeriden ayrıca policy gerekir?

Çünkü dış trafik WAN arayüzünden, iç trafik ise LAN veya VLAN arayüzünden girer. FortiGate policy eşleşmesini giriş ve çıkış arayüzleriyle birlikte yapar; çalışan wan1 -> lan policy, lan -> lan hairpin trafiğini otomatik olarak kapsamaz.


Sonuç

FortiGate Hairpin NAT kurulumunun özü üç parçadır: LAN’dan da eşleşebilen bir VIP, gerçek trafik yönüne uyan firewall policy ve dönüş yolunu FortiGate üzerinde tutan kaynak NAT. Kurulumdan sonra yalnız tarayıcı sonucuna bakmayın; Forward Traffic logunda snat+dnat, doğru policy ID ve translated destination değerlerini doğrulayın.

Kurumsal FortiGate tasarımı, VIP/policy düzenlemesi ve sorun giderme için Fortinet çözümleri sayfamızı inceleyebilir veya FortiGate teklif ve danışmanlık talebi oluşturabilirsiniz.


Resmî Fortinet Kaynakları

İçerik Fortinet’in resmî dokümanları temel alınarak hazırlanmıştır. Menü görünümü ve bazı varsayılanlar FortiOS sürümüne göre değişebileceği için uygulamadan önce cihaz sürümünüzün CLI referansını kontrol edin.
FortiGate Hairpin NATFortiGate NAT loopbackFortiGate U-turn NATFortiGate VIPHairpin NAT kurulumu

Bu konuda destek almak ister misiniz?

Teknoloji mimarlarımız mevcut altyapınızı ücretsiz değerlendiriyor ve size özel çözüm sunuyor.