SSH Yerel Ve Uzak Tünelleme Nasıl Çalışır?

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_ip

Lokaldeki 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

ssh -R [remote_addr:]remote_port:local_addr:local_port [user@]gateway_addr

Bu 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

Yorum yapın