Apa perbedaan antara penerusan IP lokal dan jarak jauh?

10

Apa perbedaan fungsi antara keduanya? Saya agak bingung karenanya.

Penerusan lokal membuat port jarak jauh tersedia secara lokal.

Penerusan jarak jauh membuat port lokal tersedia dari jarak jauh.

Tetapi 'ketersediaan' ini akan bekerja di kedua arah ... atau apakah itu?

Misalnya berikut ini (dikeluarkan dari 'rumah' tuan rumah)

ssh -R 1234:localhost:2345 user@work

Ini akan membuat terowongan aman antara work :: 1234 dan home :: 2345, kan?

Jika saya memasukkan sesuatu di satu ujung, itu akan keluar di ujung lainnya.

Tapi kemudian, saya dapat mencapai hal yang sama dengan panggilan berikut dari host 'work':

ssh -L 1234:localhost:2345 user@home

Jadi, satu-satunya perbedaan adalah dari mana saya menyebutnya, benar?

nandaloo
sumber
Dalam contoh Anda tidak ada perbedaan dalam fungsionalitas. Anda mengompensasi diri sendiri karena menggunakan argumen yang berlawanan dengan menukar host target. Seandainya Anda tidak melakukan ini dan menggunakan keduanya dari dalam 1 host tunggal - itu akan memicu perilaku yang benar-benar berlawanan.
XXL

Jawaban:

2

Perbedaan praktis utama, adalah bahwa jika menghubungkan 2 komputer A dan B, dan B berada di belakang firewall atau Router NAT yang tidak Anda kontrol, dan itu memblokir masuk .. Anda duduk di A. Anda tidak bisa mendapatkan A untuk terhubung ke B. Tapi B tidak akan memblokir keluar .. Jadi Anda mendapatkan B untuk terhubung ke A.

- klarifikasi tambahan--

Di atas, yang dipahami penanya .. berarti perbedaan praktis utama antara penerusan lokal dan jarak jauh. ssh -L dan ssh -R saat Anda akan menggunakan masing-masing. Saya tidak mengomentari contoh perintah khusus yang dia berikan, di mana dia beralih -L dan -R, dan server sshd yang dia hubungkan. Tapi sekarang saya akan mencoba mengomentarinya .. Dengan perintah ssh yang dia berikan, dari sudut pandang klien reguler dan server biasa, tampaknya tidak ada perbedaan, karena tidak mengatakan "ah ini adalah klien ssh dan ini adalah server ssh .. "tidak tahu ssh, dan yang merupakan aspek klien / server dari ssh tidak relevan dan tidak dikenal oleh klien biasa dan server biasa juga. Mereka hanya peduli tentang siapa yang mendengarkan, dan dari sudut pandang mereka, itu terlihat sama. Komputer kerja sedang mendengarkan dan pada 1234. Mereka tidak t perhatikan bahwa dalam satu kasus ini adalah server sshd.exe ssh, dan dalam kasus lain ini adalah ssh.exe, klien ssh. Omong-omong, di mana ssh client, dianggap lokal.

barlop
sumber
ok, terima kasih, itu menjawab pertanyaan saya! :-)
nandaloo
@nandaloo Saya pikir itu disebut terowongan ssh terbalik. Jika kita menggunakan pemrakarsa dan pendengar istilah yang dibuat (karena istilah-istilah itu kurang ambigu daripada klien dan server). Idenya adalah bahwa Anda memiliki inisiator dan pendengar reguler serta inisiator dan pendengar ssh Anda. Anda tidak dapat memilih di mana inisiator dan pendengar Anda berada. misalnya server HTTP (pendengar biasa) ada di B. B ada di belakang firewall. A memiliki klien HTTP (pemrakarsa reguler). Anda menempatkan inisiator SSH Anda di B. Lihat dengan terowongan terbalik inisiator dan pendengar SSH, berada di komputer yang berlawanan dengan inisiator dan pendengar biasa.
barlop
10

Ya, jika saya memahaminya dengan benar, penerusan port lokal dari a ke b harus identik dengan penerusan port jarak jauh dari b ke a (dan sebaliknya). Terowongan keluar dari a ke b (dilihat dari a) harus sama dengan terowongan masuk dari a ke b (dilihat dari b).

Port forwarding lokal menciptakan terowongan keluar yang dapat digunakan untuk membawa komputer internet publik ke mesin lokal. Pengguna lokal dapat mengakses host jarak jauh: kombinasi port pada host lokal, karena port yang diberikan pada host (klien) lokal diteruskan ke host dan port yang diberikan di sisi jarak jauh:

ssh -L local_port:remote_host:remote_port user@hostname

Penerusan port jarak jauh menciptakan terowongan masuk yang dapat digunakan untuk membawa komputer lokal ke internet publik. Pengguna internet dapat mengakses host lokal tertentu: kombinasi port pada host jarak jauh. Port yang diberikan pada host jarak jauh (server) diteruskan ke host yang diberikan dan port di sisi lokal:

ssh -R local_port:remote_host:remote_port user@hostname
0x4a6f4672
sumber
1
Saya kira perbedaan lain, selain sintaksis, adalah proses yang mendengarkan pengguna untuk terhubung. ssh.exe -L memberitahu ssh.exe untuk mendengarkan (selain koneksi keluar yang sudah dibuatnya). ssh.exe -R memberitahu sshd.exe untuk mendengarkan (selain mendengarkan sudah dilakukan).
barlop
@ 0x4a6f4672, Apa 0x4a6f4672artinya?
Pacerier
@Pacerier hanya inisial saya “JoFr” dalam notasi heksadesimal :-)
0x4a6f4672
3

Dengan penerusan port lokal Anda (klien) membuka soket pendengaran di komputer Anda dan menghubungkan klien protokol tingkat aplikasi Anda ke soket ini. Sekarang koneksi diteruskan melalui SSH ke server. Server terhubung ke host jarak jauh dan terowongan data dari klien protokol Anda ke tujuan akhir.

Dengan penerusan port jarak jauh server membuka soket pendengar pada host server. Beberapa aplikasi jarak jauh terhubung ke host ini dan mengirimkan informasi yang ditransfer ke komputer klien Anda. Di sini koneksi dibuat ke tujuan akhir (beberapa server protokol tingkat aplikasi yang berjalan di komputer Anda atau di jaringan Anda) dan data ditransfer dari aplikasi jarak jauh ke tujuan akhir.

Callback Eugene Mayevski
sumber
terima kasih, itu membuatnya lebih jelas bagaimana port forwarding bekerja. Dan terima kasih telah memindahkan pertanyaan - Saya bahkan tidak tahu tentang situs superuser ini :-)
nandaloo
1

Ini paling baik dipahami dengan contoh-contoh kecil. Dalam exmples ini koneksi terstruktur seperti ini:

Server Lokal - (LAN) - Terminal ----- (SSH, biasanya melalui Internet) ----- Tunnel Endpoint - (LAN) - Mesin Jarak Jauh

Anda menggunakan penerusan port lokal jika Anda ingin melakukan tunnel ke mesin / port jarak jauh tertentu, dapat dijangkau oleh titik akhir terowongan yang Anda miliki akses ssh. Therby, port mesin jarak jauh itu juga dapat diakses secara lokal di terminal Anda sendiri, yaitu http: // localhost: terminal_port /.

Itu dilakukan dengan menggunakan sintaks berikut:

ssh -L terminal_port:remote_machine_ip:remote_service_port -p tunnel_endpoint_ssh_port ssh-login@tunnel_endpoint_ip

Anda dapat menggunakan penerusan port jarak jauh jika Anda ingin mengaktifkan remote ANYONE (!) , Yang dapat mencapai port mendengarkan titik akhir terowongan untuk dapat mengakses ip / port dari jarak jauh di LAN lokal Anda. Ke server lokal Anda, sepertinya koneksi dari mesin jarak jauh diinisiasi oleh terminal.

Sintaksnya adalah:

ssh -R tunnel_endpoint_listen_port:local_server_ip:local_server_port -p tunnel_endpoint_ssh_port ssh-login@tunnel_endpoint_ip
NStoeckm
sumber
0

Halaman untuk socat mengklarifikasi ini dengan sangat baik. Ya, saya tahu ssh dan socat adalah dua hal yang sama sekali berbeda - tetapi dokumentasi socat sangat bagus.

pengguna400344
sumber