Ters port tünel açma


59

Birine yarın yerel makinemde çalışan bir web sitesini göstermem gerekiyor. Normalde bunu yerel yönlendiricimdeki bağlantı noktası iletme yoluyla gerçekleştirirdim, ancak hatalı donanım ve değiştirilmesinin kötü olması nedeniyle mevcut yönlendiricim bağlantı noktası iletme yapmama izin vermiyor.

Dolayısıyla bu gecikmeyle takılıp her şeyi uygun bir sunucuya sokmak istemiyorum, çılgınca bir fikrim vardı: Portumu SSH üzerinden harici bir sunucuya iletebilir miyim?

Daha önce liman tünel açmıştım ama genelde doğru şekilde yapıyorum:

  • Uzak bir kutuya bağlanıyorum ve 12345 numaralı bağlantı noktasının yerel makinemde 12345 numaralı bağlantı noktasından görünmesini istiyorum.
  • Uzak makinede P12345'te bir şey başlatıyorum
  • Localhost: 12345 aracılığıyla erişebilirim

Ne yapmak istiyorum

  • Uzaktaki bir PC'ye bağlanın ve yerel P12345’in yerel P12345’ten (tünel üzerinden) bir şeyler almasını isteyin
  • Yerel bilgisayarımda P12345'te bir şey başlatıyorum
  • Diğer insanlar uzaktan kumandaya erişebilir: 12345 ve yerel ana bilgisayarımı: 12345 görebilir

Yanıtlar:


96

80 numaralı bağlantı noktasını yerel makinenizden ( localhost) 8000 numaralı bağlantı noktasındaki uzak ana bilgisayara iletme komutu şöyledir:

ssh -R 8000:localhost:80 oli@remote-machine

Bu, SSH sunucusunda ek bir ince ayar gerektirir, satırları aşağıdakilere ekleyin /etc/ssh/sshd_config:

Match User oli
   GatewayPorts yes

Ardından, sunucuyu çalıştırarak yapılandırmayı yeniden yükleyin sudo reload ssh.

Ayar GatewayPorts yes, SSH'nin 8000 numaralı bağlantı noktasını joker karakter adresinde bağlamasına neden olur, bu nedenle remote-machine( remote-machine:8000) genel adresine erişilir .

Joker adresine herşeyi bağlayıcı değildir seçeneği olması gerekiyorsa, değiştirmek GatewayPorts yesiçin GatewayPorts clientspecified. Çünkü sshvarsayılan olarak geri döngü adresine bağlanır, boş belirtmeniz gerekir bind_addressjoker adresi bağlanma için:

ssh -R :8000:localhost:80 oli@remote-machine

Bu, :önceden ayarlanmış ve ayarlanmışsa ve genel erişime izin vermek istiyorsanız 8000zorunludur .GatewayPortsclientspecifiedremote-machine:8000

İlgili manuel alıntılar:

SSH (1)

-R [bind_adresi:] port: host: hostport
Uzaktaki (sunucu) ana bilgisayarda verilen bağlantı noktasının, yerel ana bilgisayarda verilen ana bilgisayara ve bağlantı noktasına iletileceğini belirtir. Bu, uzak taraftaki bağlantı noktasını dinlemek için bir soket tahsis ederek çalışır ve bu bağlantı noktasına bir bağlantı yapıldığında, bağlantı güvenli kanal üzerinden iletilir ve bağlantı noktası ana makine sunucusuna yerel makineden bir bağlantı yapılır. Varsayılan olarak, sunucudaki dinleme soketi yalnızca geri döngü arayüzüne bağlı olacaktır. Bu bir bind_address belirtilerek geçersiz kılınabilir. Boş bir ciltleme adresi veya '*' adresi, uzak soketin tüm arayüzlerde dinlemesi gerektiğini belirtir. Uzak bir cind_adresi belirlemek yalnızca sunucunun GatewayPorts seçeneği etkinse başarılı olur (bkz. Sshd_config (5)).

sshd_config (5)

GatewayPorts
Uzak ana makinelerin istemci için iletilen bağlantı noktalarına bağlanmasına izin verilip verilmeyeceğini belirtir. GatewayPorts, sshd'nin uzak bağlantı noktası iletimlerinin geridönmeyen adreslere bağlanmasına izin vermesi, böylece diğer ana makinelerin bağlanmasına izin vermesi gerektiğini belirtmek için kullanılabilir. Argüman, uzak bağlantı noktası iletimlerini yalnızca yerel ana makineye erişmeye zorlamak için 'hayır', uzak bağlantı noktası iletilerini joker karaktere bağlanmaya zorlamak için 'evet' veya müşterinin istediği adresi seçmesine izin vermek için 'istemcileri' olabilir yönlendirme sınırlıdır. Varsayılan değer 'hayır'.

Ayrıca bakınız:


7
GatewayPortsBurada sihirli mermi oldu. Bu oldukça güçlü tekniği belirli kullanıcılarla sınırlamama izin verebilecek bir sürüm bulmuş olmanız hoşuma gidiyor.
Oli

1
Kafam karıştı, Gateway tünellerinin ters tüneli (yerel) başlatmak için gerçek ssh komutunu çalıştıran makinede ayarlanması gerekiyordu. Aklımda, diğer ucun (uzaktaki), bağlantı kurduğunuz ve yönlendirildiğiniz yerden bağlantı kabul edeceği yerle ilgilenmesi daha mantıklıydı. Bunun üstesinden gelmek yaşlarımı aldı.
Ars Magika,

2
@ArsMagika Seni anlayabildiğimden emin değilim. GatewayPorts'un, sshkomutu çalıştıran yerel makinenizde değil SSH sunucusunda ayarlanması gerekir . Diğer istemcilerin sunucudaki iletilen bağlantı noktalarıyla iletişim kurup kurmayacağını yapılandırır.
Lekensteyn

Bu çözümün dezavantajı: web sunucusunun erişim günlüğünde müşterinin IP adresini belirleme yeteneğini kaybedersiniz. Bu sıkıntıyı çözmenin bir yolu var mı?
Twonky

@Twonky İstemcinin tam IP adresini bilmeniz gerekmiyorsa (yalnızca "localhost" değil, uzak bir adres olduğunu) ve yerel sunucunuz joker karakterleri dinliyorsa (yani, herhangi bir adresten bağlantı kabul ediyor), o zaman iletmeyi deneyebilirsiniz -R :8000:127.0.1.1:80(veya başka bir 127.x.x.xadrese). Aksi takdirde, hayır, uzak IP adresini öğrenemezsiniz.
Lekensteyn

14

Sunucu varsa GatewayPorts no, istemcide bir komut ssh -g -L 8001:localhost:8000 oli@remote-machineçalıştırdığınızda sunucuda çalıştırarak aynı sonucu elde edebilirsiniz ssh -R. Bu, sunucudaki geri döngü portu 8000'i 8001 portundaki tüm arayüzlerde erişilebilir kılar.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.