Soru Ters SSH Tüneli


Bazı API entegrasyonlarını (tropo, paypal, vb.) Test etmek için uzaktaki bir sunucudan yerel trafiğime web trafiğini iletmeye çalışıyorum. Temel olarak, tunnlr.com'un sağladığı özelliklere benzer bir şey kurmaya çalışıyorum.

Ssh tüneli komutla başlattım

$ssh –nNT –R :7777:localhost:5000 user@server

O zaman sunucunun şu an 7777 numaralı bağlantı noktasında dinlediğini görebiliyorum.

user@server:$netstat -ant | grep 7777

tcp        0      0 127.0.0.1:7777          0.0.0.0:*               LISTEN     
tcp6       0      0 ::1:7777                :::*                    LISTEN  


$user@server:curl localhost:7777
Hello from local machine

Yani bu iyi çalışıyor. Kıvrılma isteği aslında yerel makineden sunulur.

Şimdi, server.com:8888'in bu tünelden yönlendirilmesini nasıl sağlayabilirim? 

Nginx'i kullanmayı denedim:

upstream tunnel {
    server 0.0.0.0:7777;
}
server {
  listen 8888;
  server_name server.com;
  location / {
    access_log /var/log/nginx/tunnel-access.log;
    error_log /var/log/nginx/tunnel-error.log;
    proxy_pass http://tunnel;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_redirect off;
  }
}

Gördüğüm nginx hata günlüğünden:

[error] 11389#0: *1 connect() failed (111: Connection refused)

Kullanmaya çalışıyorum iptablesama hiç ilerleme kaydetmedim. iptables sadece tünelleme için nginx'i çalıştırmaktan daha zarif bir çözüm gibi görünüyor. Herhangi bir yardım büyük beğeni topluyor. Teşekkürler!

DÜZENLE (sunucu bilgisi ekleyerek)

Sunucu detayları: Ubuntu 10.10 maverick (standart kurulum)

DÜZENLE (nginx seçeneği)

@Marcel G'in önerdiği gibi, nginx seçenekleri 0.0.0.0:7777 - 127.0.0.1:7777 olarak değiştirildi. Yine de nginx olmayan bir çözüm arıyor.

DÜZENLE (son çözümde güncelle)

@Sciurus'un işaret ettiği gibi, GatewayPorts yes sshd_config dosyasında. Başlangıçta bu satırı yapılandırma dosyasında yaptım, ancak /etc/init.d/ssh reload yerine restart (en azından ubuntu üzerinde böyle görünüyor).

Yerel makinede kullanılan son komut: ssh -nNT -R '*:8888:localhost:5000' user@server

Sonra sunucu dinlemeyi belirtmelidir *: 8888 ile lsof -i tcp:888

user@server:~$ sudo lsof -i tcp:8888
COMMAND   PID     USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
sshd    14711 user    8u  IPv4 1791013      0t0  TCP *:8888 (LISTEN)
sshd    14711 user    9u  IPv6 1791014      0t0  TCP *:8888 (LISTEN)

8
2018-03-07 22:29


Menşei




Cevaplar:


Nginx kullanmaya gerek yoktur.

Ssh daemon yapılandırmanızda / Etc / SSH / sshd_config) ayarlandı GatewayPorts için clientspecified ve yeniden yükleyin. Bu, diğer sistemlerin tünelinize bağlanabilmesi için gereklidir. Bu olmadan, yalnızca sunucunuzda çalışan programlar kullanabilir.

Şimdi yapmanız gereken tek şey, 7777 numaralı bağlantı noktası yerine 8888 numaralı bağlantı noktasını dinlemek için ssh komutunuzu değiştirmektir.

ssh -nNT -R '*:8888:localhost:5000' user@server

Yıldız işareti, sshd'ye sadece geri döngü arabirimi yerine tüm arabirimlerde 8888 numaralı bağlantı noktasını dinlemesini söyler. Değişmediysen bu başarısız olur. GatewayPorts.


9
2018-03-07 23:08



Tamam, önerinize geçtim ve ne zaman curl http://server.com:8888, Hatayı alıyorum curl: (7) couldn't connect to host. Hala localhost'u (8888) sunucu kabuğundan kıstırıyorum ve yerel makineye çarptı. - chris
btw, sağladığınız yeni komutu denemeden önce nginx'i durdurdum. - chris
@chris sunucunuzun sshd_config dosyasında etkinleştirilmiş GatewayPorts'tur? Değilse, etkinleştirin. Tüneli başlattıktan sonra, ssh'nin sadece geri döngü adresinden daha fazla dinlediğinden emin olun; netstat ve grep ile değiştirebilirsiniz lsof -i tcp:8888. - sciurus
Korku veren! Bende vardı GatewayPorts yes sshd_config ve sanırım sadece bir /etc/init.d/ssh restart yaptım, ama bu sefer yaptım reload. Farkın ne olduğundan emin değilim, ama şimdi tamamen çalışıyor! Teşekkürler bir milyon Sciurus. - chris


Ben ikinci sciurus 'cevabını ama eğer bir sebepten dolayı nginx'i kullanmanız gerekiyorsa ... tahminim yukarı doğru tanımınız bozuldu.

Ssh ters tünelinizi yaratma biçiminiz sadece localhost (127.0.0.1 ve :: 1) üzerinde dinler, bu nedenle aşağıdaki yukarı akış tanımını bir adımda vermek isteyebilirsiniz:

upstream tunnel {
    server 127.0.0.1:7777;
}

Sadece kayıt için: Nginx'i kendi kendime yapılandırmadım, bu yüzden bu sadece bir tahmin.


1
2018-03-08 00:41



Teşekkürler! Bu aslında işe yaradı. Mümkünse, sadece tünel açma çalışması için nginx kullanmamayı tercih ederim, ancak bunun mümkün olduğunu bilmek isterim - chris