Bir servise ağ tarafından erişilemiyorsa, onu güvenli bir bağlantı içinde taşımak gerekir. SSH tünelleme tam bu amaçla kullanılır; iki cihaz arasında şifrelenmiş bir yol açar ve istediğin portu bu yolun içine “gizleyerek” iletir. Sonuç olarak firewall veya NAT tarafından kapatılmış servisler, sanki bilgisayarında çalışıyormuş gibi erişilebilir hale gelir.
Temel Altyapı Gereksinimleri
SSH tünelleri iki uç nokta arasında kurulduğundan, anlatımdaki örnekler birden fazla makine mantığıyla oluşturulmuştur. Bu yapıyı üretmek için konteyner kullanımı yeterlidir. Docker motoru çalışan tek bir Linux sunucusu üzerinde kolayca iki makine gibi davranan ortamlar oluşturulabilir.

Konteynerlerin IP’lerine doğrudan erişim sağlandığı için, bu örnekler Docker Desktop üzerinde birebir aynı şekilde çalışmaz. Test için kısa ömürlü bir sunucu oluşturmak en verimli yöntemdir.
Local Port Forwarding Nasıl İşler?
Local port forwarding, yerel makinenden gönderdiğin trafiği uzak sunucudaki belirli bir servise ulaştıran tünelleme tekniğidir. SSH oturumu açıldığında lokal porttan çıkan veri şifrelenerek tünel üzerinden karşıdaki hedef porta aktarılır. Bu yapı sayesinde normalde erişilemeyen servisler, lokal sistemde çalışıyormuş gibi kullanılabilir hale gelir.
Teknik olarak SSH şu görevi üstlenir
Lokal port → SSH Tüneli → Uzak port
Local Port Yönlendirmenin Uygulanma Süreci
Dış erişimi kısıtlanmış bir servise bağlanman gerektiğinde, SSH üzerinden port yönlendirmesi ideal çözümdür. Örnek vermek gerekirse uzaktaki MySQL servisi firewall nedeniyle kapalıdır ve doğrudan erişemezsin. Bu noktada gerekli SSH komutunu çalıştırdığında tünel açılır ve trafik doğru hedefe yönlendirilir.
ssh -L 8080:localhost:8080 root@sunucu_ipBilgisayarındaki 8080, tünel aracılığıyla uzak taraftaki 8080’e aktarılır. Veri akışı güvenli bir şekilde şifrelenmiş kanaldan ilerler. Hiçbir portun dışarıya açılmasına gerek kalmadan bağlantı gerçekleşir. Bu sayede MySQL’e bağlandığında, servis doğrudan kendi makinenmiş gibi görünür. Aynı prensip Redis veya Elasticsearch gibi servislerde de kullanılır.

Tüneli arka planda açık bırakmak isterseniz aşağıdaki komutu yazabilirsiniz.
ssh -f -N -L ...Remote Port Forwarding Uygulaması
Remote port forwarding, local port yönlendirmenin tersine işleyen bir bağlantı modelidir. Bu yöntemde amaç, lokal makinede çalışan bir servisi dışarıdaki bir sunucuya görünür kılmaktır. Dinleme görevini SSH sunucusu üstlendiği için, uzaktan gelen trafik doğrudan senin bilgisayarındaki hedef 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

SSH Tünelleme Türlerinin Çalışma Prensibi
Local Forwarding (-L)
Uzak sunucuda çalışan bir servisi, yerel makinede çalışıyormuş gibi erişilebilir hale getirir.
Remote Forwarding (-R)
Yerel makinede çalışan bir servisi, uzak bir sunucunun kullanabileceği şekilde dışarıya açar.
Dynamic Forwarding (-D)
SSH bağlantısını SOCKS tabanlı bir proxy gibi kullanarak esnek bir trafik yönlendirme sağlar.
Bu üç yöntem SSH tünellemenin temelini oluşturur ve hem kapalı servislerin yönetiminde hem de güvenlik duvarlarını aşmada kritik rol oynar. Eğer daha fazla komut örneği görmek istersen, önceki SSH rehberimizi inceleyebilirsin.
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