ssh ke private-ip

18

Saya memiliki komputer dengan CentOS (komputer A) yang dikonfigurasi sebagai ip pribadi 10.150.5.141 (dengan firewall terbatas), dapat mengakses internet dan ArchLinux VPS (komputer B) dengan ip nyata wxyz

Bagaimana saya bisa membuat pc lain (komputer C) yang dapat mengakses komputer B untuk terhubung ke komputer A, tetapi komputer C tidak dapat terhubung ke komputer A secara langsung (karena itu di jaringan pribadi A sendiri)?

Saya tahu bahwa sebuah terowongan dapat membuka port lokal ke komputer lain: port, tetapi bagaimana melakukan yang sebaliknya?

Saya ingin mengakses komputer A menggunakan sshkomputer B tetapi komputer B tidak dapat mengakses komputer A, karena jaringan pada komputer A bersifat membatasi (dapat keluar, tetapi tidak bisa masuk, karena saya tidak memiliki akses ke router mereka)

Saya ingin sesuatu seperti ini:

ssh -connect-to w.x.y.z:22 -open-port vvv -forward-to 10.150.5.141 -port 22

sehingga ketika saya ssh w.x.y.z:vvvdari komputer C itu akan diteruskan ke jaringan pribadi 10.150.5.141:22.

Kokizzu
sumber

Jawaban:

14

Apa yang Anda cari disebut terowongan terbalik. sshmenyediakannya melalui -Rsakelar:

-R [bind_address:]port:host:hostport
       Specifies that the given port on the remote (server) host is to 
       be forwarded to the given host and port on the local side.  This 
       works by allocating a socket to listen to port on the remote side, 
       and whenever a connection is made to this port, the connection is
       forwarded over the secure channel, and a connection is made to host 
       port hostport from the local machine.

Ketika OP menemukan jawaban mereka, sintaksnya adalah sebagai berikut:

$ ssh -f -N -R vvv:localhost:22 w.x.y.z

Contoh

Saya memiliki 2 komputer di jaringan, lappydan remotey. Jadi saya menjalankan perintah berikut pada lappy:

$ ssh -f -N -R 12345:localhost:22 remotey

Saya dapat mengkonfirmasi bahwa itu berfungsi:

$ ps -eaf|grep "[l]ocalhost:22"
saml     27685     1  0 11:10 ?        00:00:00 ssh -f -N -R 12345:localhost:22 remotey

Sekarang jika saya sshsecara terpisah ke sistem jarak jauh, remoteydan menjalankan perintah ini saya dapat melihat bahwa itu sekarang menerima koneksi pada port 12345 pada antarmuka lokal sistem jarak jauh:

$ netstat -an|grep :12345
tcp        0      0 127.0.0.1:12345             0.0.0.0:*                   LISTEN      
tcp        0      0 ::1:12345                   :::*                        LISTEN      

Menguji koneksi

Anda dapat melihat bahwa terowongan ssh terbalik berfungsi sebagai berikut.

  1. masuk ke remotey

    [user@lappy ~]$ ssh remotey
    
  2. uji port terowongan terbalik

    [user@remotey ~]$ ssh -p 12345 localhost
    
  3. sekarang harus kembali pada lappy

    user@localhost's password: 
    Last login: Thu Aug  1 17:53:54 2013
    /usr/bin/xauth:  creating new authority file /home/user/.Xauthority
    [user@lappy ~]$ 
    

Port pada antarmuka selain localhost ( lo)?

Anda mungkin dibiarkan menggaruk-garuk kepala Anda jika Anda mencoba perintah seperti ini dan sepertinya tidak berfungsi, atau selalu mengikat ke port pada loantarmuka localhost ( ).

Sebagai contoh:

lappy$ ssh -f -N -R remotey:12345:lappy:22 remotey

CATATAN: Perintah ini mengatakan untuk membuka port 12345 @ remotey dan tunnel setiap koneksi ke port 22 @ lappy.

Kemudian pada remotey:

remotey$ netstat -an|grep 12345
tcp        0      0 127.0.0.1:12345              0.0.0.0:*                   LISTEN   

Apa yang terjadi adalah sshdkonfigurasi tidak memungkinkan Anda untuk melakukan ini. Faktanya tanpa fitur ini diaktifkan ( GatewayPorts) Anda tidak akan dapat mengikat sshport terowongan apa pun kecuali localhost.

Mengaktifkan GatewayPorts

remotey$ grep GatewayPorts /etc/ssh/sshd_config
#GatewayPorts no

Untuk mengaktifkannya, edit file ini /etc/ssh/sshd_config:

GatewayPorts clientspecified

Dan mulai kembali sshd:

remotey$ sudo service sshd restart

Sekarang coba lagi dan kita akan melihat efek yang kita kejar:

lappy$ ssh -f -N -R remotey:12345:lappy:22 remotey

Dan periksa kali ini pada remotey:

remotey$ netstat -anp | grep 12345
tcp        0      0 192.168.1.3:12345           0.0.0.0:*                   LISTEN      9333/sshd

CATATAN: Dalam contoh di atas kita dapat melihat bahwa sshdproses sekarang adalah mendengarkan pada antarmuka yang memiliki alamat IP 192.168.1.3, untuk koneksi pada port 12345.

Menguji koneksi (part deux)

Sekarang dengan pengaturan kami yang diubah ketika kami mengujinya kali ini. Perbedaan utama adalah bahwa kita tidak lagi harus terhubung ke localhost!

  1. masuk ke remotey

    [user@lappy ~]$ ssh remotey
    
  2. uji koneksi balik

    [user@remotey ~]$ ssh -p 12345 remotey
    
  3. sekarang harus kembali pada lappy

    root@remotey's password: 
    Last login: Wed Aug 21 01:49:10 2013 from remotey
    [user@lappy ~]$ 
    

Referensi

slm
sumber
apakah ada cara untuk membuat terowongan dari 0.0.0.0:12346 ke 127.0.0.1:12345 pada mesin yang sama?
Kokizzu
1
@ Yokizzu - Saya mencoba mengatur ini dan saya sedang melilit poros tentang apa yang Anda minta. Saya menemukan ini yang terdengar seperti yang Anda inginkan, anattatechnologies.com/q/2012/08/chaining-ssh-tunnels . Saya akan mencoba dan menyelesaikannya nanti malam, merasa bebas untuk bermain dengannya dan beri tahu saya jika Anda membuat kemajuan dengannya.
slm
bukan itu yang saya maksud, saya ingin itu mengikat ke wxyz: vvv2 bukannya 127.0.0.1 (pada komputer B), sehingga orang lain dapat menggunakannya juga ..
Kokizzu
1
@Kizizzu - lihat pembaruan.
slm
2

Karena komputer B tidak dapat mengakses komputer A, Anda harus membuka terowongan jarak jauh dari komputer A terlebih dahulu.

ssh user@computerB -R vvv:localhost:22
Ignacio Vazquez-Abrams
sumber
terima kasih, tetapi apakah ada cara untuk membuka port pada eth0's IP yang diteruskan ke layanan yang mendengarkan localhost?
Kokizzu
1

Nevermind, saya menemukan jawabannya:

ssh -f -N -R vvv:localhost:22 w.x.y.z

dari komputer A

EDIT: TL; DR, solusi yang benar:

ssh -f -N -R w.x.y.z:vvv:localhost:22 w.x.y.z
Kokizzu
sumber