Bazı servisler firewall, NAT ya da ağ kuralları nedeniyle doğrudan erişime kapalı olabilir. İşte tam bu noktada SSH tünelleme devreye girer ve iki makine arasında şifreli bir kanal oluşturarak belirli portların güvenli şekilde aktarılmasını sağlar. Böylece normalde ulaşılamayan bu servisler, tünel üzerinden bağlanıldığında lokal bir uygulama gibi davranır.
SSH Tünelleme İçin Hazırlanan Sistem Düzeni
Port yönlendirme iki makine arasında gerçekleştiğinden, örneklerde birden fazla sunucu gibi davranan konteynerler tercih edilmiştir. Docker motoru çalıştıran tek bir Linux sunucusu sisteminde bu yapıların hepsi kolayca oluşturulabilir ve iki nokta arasındaki tünelleme mantığı açık şekilde gösterilebilir.

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.
Yerel Port Yönlendirme Nedir? Nasıl Çalışır?
Bu yöntem, kendi bilgisayarındaki bir portu kullanarak uzaktaki servise güvenli bir şekilde bağlanmanı sağlar. SSH devreye girdiğinde lokal porttan gelen trafik şifrelenmiş halde karşı tarafa yönlendirilir ve ilgili porta ulaştırılır. Böylece erişimi sınırlandırılmış servisler hiçbir port açmadan lokal sistemden kontrol edilebilir.
Teknik olarak SSH şu görevi üstlenir
Lokal port → SSH Tüneli → Uzak port
Kapalı Servislere SSH ile Lokal Port Üzerinden Erişim
Bazı durumlarda uzaktaki servislerin dış dünyadan çağrılması mümkün değildir, bu nedenle farklı bir erişim yöntemi gerekir. Örneğin firewall tarafından engellenmiş bir MySQL servisine erişemediğini varsayalım. İlgili SSH komutunu çalıştırdığında güvenli bir tünel açılır ve veri akışı karşı tarafa aktarılır.
ssh -L 8080:localhost:8080 root@sunucu_ipLokaldeki 8080 portu, SSH tüneli üzerinden uzak sunucunun 8080 portuna bağlanır. Bu süreçte tüm trafik korumalı ve şifreli olarak iletilir. Uzak servise erişmek için harici port açma ihtiyacı ortadan kalkar. MySQL istemcisini başlattığında veritabanına bağlanma deneyimi lokal çalışıyormuş gibi olur. Bu teknik genellikle yönetim panelleri, Redis ve Elasticsearch servislerinde de uygulanır.

Tüneli arka planda açık bırakmak isterseniz aşağıdaki komutu yazabilirsiniz.
ssh -f -N -L ...Uzağa Açılan Yerel Servislerin Yönlendirilmesi
Uzak port yönlendirme, local port yönlendirmenin karşıt mantıkta çalışan bir versiyonudur ve bu yapıda amaç lokal servisi dış erişime sunmaktır. Dinleme işlemi SSH sunucusu tarafından yapılır. Sonuç olarak, uzak makinede başlayan trafik doğrudan senin bilgisayarında belirlenen 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 Bağlantılarında Kullanılan Port Yönlendirme Tipleri
Local Forwarding (-L)
Uzak sunucudaki hizmeti yerel makinene getirerek güvenli bir bağlantı üzerinden kullanmanı sağlar.
Remote Forwarding (-R)
Lokal bir servisi, uzak bir sunucuya açarak o noktadan erişilebilir hale getirir.
Dynamic Forwarding (-D)
SSH’ı bir proxy gibi kullanarak tüm trafiğini esnek şekilde yönlendirir.
Bu üç yaklaşım, SSH tünellemenin temelini oluşturur ve ağ erişimi kısıtlı ortamlarda yönetim kolaylığı sağlar. SSH ile ilgili daha fazla komut ve örnek görmek istersen önceki rehberimize bakabilirsin.
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