SSH Yönlendirme Nedir? Local ve Remote Port Yönlendirme

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.

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_ip

Bilgisayarı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 -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 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

Yorum yapın