SSH ile Yerel ve Uzak Port Mantığı Nasıl İşler?
Ağdaki kısıtlamalar bazen servis erişimini tamamen imkânsız hale getirir; ancak SSH tünelleme bu sorunu şifreli bir kanal oluşturarak çözer. İki makine arasındaki bu güvenli yol, belirli portların dış engellere takılmadan taşınmasını sağlar. Böylece normalde ulaşılamayan uygulamalar, tünel sayesinde lokal bir servis gibi erişilebilir olur.
Gerekli Sunucu Yapısı
Tünelleme işlemi iki taraflı bir iletişim gerektirdiği için, örneklerde birden fazla makineyi temsil eden konteynerler kullanılmıştır. Docker motoru sayesinde tek bir Linux sunucusu üzerinde farklı makine rollerini oluşturmak ve bağlantı akışını adım adım göstermek çok daha pratik hale gelir.

Yerel Port Yönlendirme Nedir? Nasıl Çalışır?
Yerel port yönlendirme, bilgisayarından uzak bir sunucuda çalışan servise erişmek istediğinde kullanılan bir tünelleme yöntemidir. SSH oturumu açıldığında, belirlediğin lokal porttan geçen trafik şifrelenerek uzak taraftaki ilgili porta aktarılır. Bu sayede güvenlik duvarının veya kapalı ağ kurallarının arkasında kalan servisler, sanki kendi makinende çalışıyormuş gibi güvenli bir şekilde kullanılabilir.
Teknik olarak SSH şu görevi üstlenir
Lokal port → SSH Tüneli → Uzak port
Local Port Forwarding Uygulaması Nasıl Gerçekleştirilir?
Dışarıya kapalı bırakılmış bir servise uzaktan erişim gerektiğinde bu yöntem devreye girer. Basit bir durum üzerinden ilerleyelim: Uzak sunucuda çalışan bir MySQL servisi, firewall kuralları nedeniyle dış bağlantıya izin vermez, dolayısıyla doğrudan bağlantı kuramazsın. Ancak uygun SSH komutunu çalıştırdığında tünel devreye girer ve yönlendirme gerçekleştirilir.
ssh -L 8080:localhost:8080 root@sunucu_ipYerel sistemdeki 8080 portundan gelen veri, tünel üzerinden uzak sunucunun 8080 portuna taşınır. Tüm iletişim SSH tarafından şifrelenir. Bu işlem sırasında hedef servise dış ağdan port açılması gerekmez. MySQL istemcisiyle bağlandığında veritabanı, sanki bilgisayarında çalışan bir servis gibi çalışır. Bu yaklaşım Redis, Elasticsearch ve benzeri servisler için de yaygın olarak uygulanır.

Tüneli arka planda açık bırakmak isterseniz aşağıdaki komutu yazabilirsiniz.
ssh -f -N -L ...Uzak Port Yönlendirme Nasıl Yapılır?
Uzak port yönlendirme, yerel port yönlendirmenin ters mantıkla çalışan halidir. Bu sefer amaç kendi makinenizde çalışan bir servisi dışarıya açmaktır. Yani dinleme yapan taraf SSH sunucusudur.
Bu modelde uzak sunucudan başlayan trafik, senin bilgisayarındaki bir porta yönlendirilir.
SSH burada tam tersi bir yol oluşturur
Uzak port → SSH Tüneli → Lokal port
ssh -R [remote_addr:]remote_port:local_addr:local_port [user@]gateway_addrBu işlem sonrasında SSH sunucusu üzerinde belirtilen port dinlemeye açılır. Bu porta gelen trafiğin tamamı, sizin makinenizdeki servis tarafından işlenir.
Uzak Port Yönlendirme Hangi Durumlarda Kullanılır?
- Lokal olarak geliştirdiğin bir web uygulamasını uzak bir sunucuya test ettirmek
- Kurumsal ağ arkasındaki bir servise dışarıdan erişmek
- Evde çalışan IoT cihazlarını dışarıdan yönetmek
- Firewall arkasındaki API, dashboard veya özel portlara erişim sağlamak
- VPN açmadan belirli portları dış dünyaya aktarmak
Özel Ağdan Yapılan Uzak Port Yönlendirme
Birçok kullanıcı evde geliştirdiği projeleri internete açamıyor çünkü NAT ve modem port yönlendirmesi her zaman mümkün olmuyor. Böyle durumlarda SSH tüneli en kolay bypass yöntemidir.
ssh -R 9000:localhost:8000 root@sunucu_ip- Uzak sunucunun 9000 portuna gelen trafik, evdeki makinenin 8000 portuna akar

Port Yönlendirme Yapılarının Temel Mantığı
Local Forwarding (-L)
Uzak bir hizmeti, yerel makinene taşır ve lokal bağlantı gibi kullanılmasını sağlar.
Remote Forwarding (-R)
Kendi makinedeki servisi, uzak sistemlere açarak erişim noktası oluşturur.
Dynamic Forwarding (-D)
SSH tünelini bir proxy gibi kullanarak esnek trafik çıkışı sağlar.
SSH tünellemenin omurgasını bu üç yöntem oluşturur ve ağ erişimi kısıtlı servislerde günlük kullanımda sıklıkla tercih edilir. Daha fazla uygulamalı örnek için önceki SSH eğitim içeriğine göz atabilirsin.
Sık Sorulan Sorular
SSH tüneli kurduğumda bağlantı kopuyor veya zaman aşımına düşüyor?
ClientAliveInterval ve ClientAliveCountMax değerlerinin sunucu tarafında yükseltilmesi bağlantıyı sabitler. Ek olarak NAT arkasında idle bağlantıların düşmesini engellemek için lokal tarafta ServerAliveInterval kullanmak gerekir.
Aynı anda birden fazla tünel nasıl kurabilirim?
SSH protokolü aynı bağlantı içinde birden fazla tüneli taşımayı destekler. Hem birden fazla -L, hem de birden fazla -R parametresi aynı komutta kullanılabilir.
Tünel bağlantısını arkada sürekli çalışır halde tutmak için en iyi yöntem nedir?
Tüneli kalıcı hale getirmek için autossh kullanılabilir. Bu araç bağlantı düştüğünde otomatik yeniden kurar, log üretir ve KeepAlive paketlerini düzenli göndererek tüneli stabil tutar
