İçeriğe geç
Sahadan
TeknikOrta8 dk okuma

MikroTik Port Yönlendirme (dst-nat): Doğru ve Güvenli Kurulum

MikroTik'te port açma ve port yönlendirme nasıl yapılır? dst-nat kuralının doğrusu, hairpin NAT çözümü, kaynak IP kısıtlamasıyla güvenli erişim ve çalışmayan yönlendirmelerde teşhis adımları.

Erdem Özyurt

Port yönlendirme, MikroTik ile ilgili en çok aranan konulardan biri; aynı zamanda en çok yanlış yapılanlardan. Kural iki satırdır ama çalışmadığında nedeni genelde kuralın kendisinde değil, etrafındaki üç şeyden birindedir.

Bu yazıda dst-nat’ın doğrusunu, klasik hairpin NAT tuzağını ve güvenli daraltma yöntemini anlatıyorum. Örnek senaryo: iç ağdaki 192.168.88.10 sunucusunda çalışan bir web servisini (TCP 8080) internete açmak.

Temel kural: dst-nat

/ip firewall nat add chain=dstnat in-interface=ether1 \
  protocol=tcp dst-port=8080 \
  action=dst-nat to-addresses=192.168.88.10 to-ports=8080 \
  comment="web servisi port yonlendirme"

Satır satır:

  • chain=dstnat: Paket hedef adresi değiştirilecek; gelen trafik için kullanılan zincir budur.
  • in-interface=ether1: Yalnızca WAN arayüzünden gelen trafik. dst-address=<public-ip> de kullanılabilir ama dinamik IP’de arayüz belirtmek daha sağlamdır.
  • action=dst-nat to-addresses=... to-ports=...: Hedef, iç ağdaki sunucuya çevrilir. Dış port ile iç port farklıysa (örn. dışarıda 8080, içeride 80) to-ports ile çevirirsiniz.

Kural çalışmıyorsa: üç klasik neden

1. Forward chain izni yok. dst-nat paketi çevirir ama geçirmez; geçişe filter tablosundaki forward chain karar verir. Sonda genel bir drop kuralınız varsa (olmalı), üstüne izin ekleyin:

/ip firewall filter add chain=forward \
  connection-nat-state=dstnat connection-state=new \
  in-interface=ether1 action=accept \
  comment="dst-nat trafigine izin"

connection-nat-state=dstnat sayesinde tek kural, tüm port yönlendirmelerinizi kapsar; her yeni yönlendirme için filter kuralı çoğaltmanız gerekmez.

2. Hedefin gateway’i MikroTik değil. Sunucu dönüş paketini başka bir gateway’e gönderiyorsa bağlantı kurulmaz. 192.168.88.10’un varsayılan ağ geçidinin bu router olduğunu doğrulayın.

3. ISS engeli veya CGNAT. Public IP’niz aslında operatörün NAT’ı arkasındaysa (100.64.0.0/10 aralığında bir WAN IP görüyorsanız CGNAT’tasınız) hiçbir dst-nat kuralı dışarıdan erişim sağlayamaz. Statik IP ya da operatörden gerçek public IP istemeniz gerekir.

Hairpin NAT: içeriden çalışmama sorunu

Dışarıdan her şey çalışıyor ama iç ağdan public IP (ya da domain) ile erişemiyorsunuz. Bu, dst-nat’ın en klasik tuzağıdır.

Neden: İç ağdaki istemci public IP’ye gider, router hedefi çevirir, paket sunucuya ulaşır. Ama sunucu cevabı istemciye doğrudan (aynı LAN’da oldukları için) gönderir. İstemci, cevabı public IP’den değil sunucunun gerçek IP’sinden geldiği için tanımaz ve bağlantı düşer.

Çözüm, LAN’dan LAN’a dönen bu trafiği router üzerinden maskelemek:

/ip firewall nat add chain=srcnat \
  src-address=192.168.88.0/24 dst-address=192.168.88.10 \
  protocol=tcp dst-port=8080 \
  action=masquerade comment="hairpin NAT"

Ayrıca dst-nat kuralınız in-interface=ether1 ile sınırlıysa, iç ağdan gelen istekleri de yakalaması için dst-address=<public-ip> temelli ikinci bir dst-nat kuralı gerekir. Küçük ağlarda daha temiz alternatif: yerel DNS’te (örn. /ip dns static) domain’i doğrudan iç IP’ye çözdürmek. O zaman hairpin’e hiç gerek kalmaz.

Güvenli daraltma: her portu herkese açmayın

Yönlendirilen her port bir saldırı yüzeyidir. SSH brute force yazısında gösterdiğim tablo port yönlendirme için de geçerli: internete açık her servis, dakikalar içinde taranmaya başlar.

Üç kural:

  1. Bilinen kaynaklara daraltın. Servise yalnızca belirli yerlerden erişilecekse kaynak listesi kullanın:
/ip firewall address-list add list=izinli-kaynaklar address=203.0.113.25
/ip firewall nat set [find comment="web servisi port yonlendirme"] \
  src-address-list=izinli-kaynaklar
  1. Yönetim portlarını asla yönlendirmeyin. RDP (3389), Winbox (8291), SSH (22) gibi portları internete açmak yerine VPN kurun; WireGuard bu iş için hem hızlı hem basittir.

  2. Kullanılmayan yönlendirmeyi silin. Geçici açılan portlar kalıcılaşır. NAT tablosunu düzenli gözden geçirin; comment alanını disiplinli kullanırsanız hangi kuralın neden var olduğunu altı ay sonra da bilirsiniz.

Test ve teşhis

Kuralın çalışıp çalışmadığını tahmin etmeyin, sayaçtan okuyun:

/ip firewall nat print stats where comment~"yonlendirme"

Sayaç artmıyorsa trafik kurala hiç uğramıyordur: dış IP’den mi test ediyorsunuz (iç ağdan public IP testi hairpin gerektirir, yukarıya bakın), port doğru mu, kuralın üstünde trafiği yutan başka NAT kuralı var mı? Sayaç artıyor ama bağlantı yoksa sorun forward izni ya da sunucu tarafındadır; /tool sniffer ile paketin sunucuya gidip gitmediğini izleyin.

Toparlarken

dst-nat kuralı basittir; işin ustalık kısmı forward izni, hairpin ve güvenli daraltmanın birlikte doğru kurulmasıdır. Karmaşık senaryolar (çoklu WAN, failover arkasında port yönlendirme, CGNAT çözümleri) için MikroTik destek ve teknik servis sayfasından ulaşabilirsiniz; bu yapıların hepsini üretim ortamlarında kuruyor ve işletiyorum.

#mikrotik#routeros#network#firewall#nat
Paylaş:𝕏 TwitterLinkedIn

Sıkça Sorulan Sorular

MikroTik'te port yönlendirme hangi menüden yapılır?

IP > Firewall > NAT sekmesinden, chain=dstnat olan bir kural ile yapılır. Terminalde /ip firewall nat add chain=dstnat komutu kullanılır. Kural, WAN arayüzüne gelen belirli porttaki trafiği iç ağdaki hedef IP ve porta çevirir.

Port yönlendirme kuralı yazdım ama çalışmıyor, en sık neden nedir?

Üç klasik neden: filter tablosundaki forward chain'in yönlendirilen trafiğe izin vermemesi, hedef sunucunun gateway'inin MikroTik olmaması ve ISS'in ilgili portu ya da CGNAT nedeniyle tüm gelen bağlantıları engellemesi. Sırasıyla üçünü de kontrol edin.

İç ağdan public IP ile servise erişemiyorum, dışarıdan çalışıyor. Neden?

Bu hairpin NAT eksikliğidir. İç ağdan public IP'ye giden trafik için ek bir masquerade (src-nat) kuralı gerekir; aksi halde dönüş paketi asimetrik yoldan gider ve bağlantı kurulamaz.

Port yönlendirme güvenli midir?

Yönlendirilen her port, iç ağdaki o servisi internete açar. Mümkünse src-address-list ile yalnızca bilinen IP'lere izin verin, yönetim portlarını (Winbox, SSH, RDP) hiç yönlendirmeyin ve bunun yerine VPN kullanın.

Yazan: Erdem Özyurt

Bilişim Danışmanı · ISP Altyapı · Siber Güvenlik

Kablo döşemekten kod yazmaya, ağ tasarımından web geliştirmeye; Layer 1'den Layer 7'ye bütünlük içinde çalışıyorum.

Hakkımda daha fazla →