Jaka jest różnica między lokalnym a zdalnym przesyłaniem adresów IP?

10

Jaka jest różnica w funkcjonalności między nimi? Trochę mnie to zagubiło.

Lokalne przekazywanie sprawia, że ​​zdalny port jest lokalnie dostępny.

Zdalne przekazywanie czyni port lokalny zdalnie dostępnym.

Ale ta „dostępność” będzie działać w obu kierunkach ... czy to prawda?

Np. Następujące (wydane z „domu” hosta)

ssh -R 1234:localhost:2345 user@work

To ustanowi bezpieczny tunel między pracą :: 1234 a domem :: 2345, prawda?

Jeśli włożę cokolwiek na jednym końcu, wyjdzie na drugim końcu.

Ale potem mogę to osiągnąć, wywołując następujące wywołanie z „pracy” hosta:

ssh -L 1234:localhost:2345 user@home

Jedyną różnicą jest to, skąd go nazywam, prawda?

nandaloo
źródło
W twoim przykładzie nie ma różnicy w funkcjonalności. W pewnym sensie sam się kompensujesz za użycie przeciwnego argumentu, wymieniając hosty docelowe. Gdybyś tego nie zrobił i nie używał obu z jednego hosta - wywołałoby to całkowicie odwrotne zachowanie.
XXL,

Odpowiedzi:

2

Główna praktyczna różnica polega na tym, że jeśli podłączasz 2 komputery A i B, a B znajduje się za zaporą ogniową lub routerem NAT, nad którym nie masz kontroli, i blokuje przychodzące ... Siedzisz w A. Nie możesz dostać A połączyć się z B. Ale B nie blokuje wychodzących. Więc dostajesz B, aby połączyć się z A.

- dodano wyjaśnienie--

Powyższe, rozumiane przez pytającego, oznacza główną praktyczną różnicę między przekazaniem lokalnym a zdalnym. ssh -L i ssh -R, kiedy będziesz używać każdego z nich. Nie komentowałem konkretnych przykładowych poleceń, które podał, gdzie przełącza -L i -R, i z którym serwerem sshd się łączy. Ale teraz spróbuję to skomentować. Z wydanymi przez niego komendami ssh, z perspektywy zwykłego klienta i zwykłego serwera, wydaje się, że nie ma różnicy, ponieważ nie mówi „ah, to jest klient ssh i to jest serwer ssh .. ”nie zna ssh, a który jest aspektem klient / serwer ssh, jest nieistotny i nieznany zwykłemu klientowi i zwykłemu serwerowi. Dbają tylko o to, kto słucha, i z ich perspektywy wygląda to tak samo. Komputer roboczy nasłuchuje i na 1234. Nie Zauważ, że w jednym przypadku jest to serwer sshd.exe ssh, aw drugim przypadku jest to ssh.exe, klient ssh. Nawiasem mówiąc, gdzie klient ssh jest uważany za lokalny.

barlop
źródło
ok, dziękuję, że dokładnie odpowiedziałem na moje pytanie! :-)
nandaloo,
@ nandaloo Myślę, że nazywa się to tunelem zwrotnym ssh. Jeśli korzystamy z gotowych warunków inicjator i odbiornik (ponieważ warunki te są mniej dwuznaczne niż klient i serwer). Chodzi o to, że masz zwykłego inicjatora i słuchacza oraz inicjatora i słuchacza ssh. Nie możesz wybrać, gdzie jest twój zwykły inicjator i słuchacz. np. serwer HTTP (regularny odbiornik) znajduje się na B. B znajduje się za firewallem. A ma klienta HTTP (zwykły inicjator). Umieszczasz swój inicjator SSH na B. Zobacz z tunelem zwrotnym inicjator i odbiornik SSH znajdują się na przeciwnych komputerach niż zwykły inicjator i odbiornik.
barlop
10

Tak, jeśli dobrze to rozumiem, przekierowanie portów lokalnych od a do b powinno być identyczne jak zdalne przekierowanie portów od b do a (i odwrotnie). Wychodzący tunel od a do b (patrząc od a) powinien być równy tunelowi przychodzącemu od a do b (patrząc od b).

Lokalne przekierowanie portów tworzy tunel wychodzący, którego można użyć do przeniesienia publicznego komputera internetowego na maszynę lokalną. Użytkownik lokalny może uzyskać dostęp do kombinacji hosta zdalnego: portu na hoście lokalnym, ponieważ dany port na hoście lokalnym (klienckim) jest przekazywany do danego hosta i portu po stronie zdalnej:

ssh -L local_port:remote_host:remote_port user@hostname

Zdalne przekierowanie portów tworzy przychodzący tunel, którego można użyć do wprowadzenia lokalnego komputera do publicznego Internetu. Internauta może uzyskać dostęp do określonej kombinacji hosta lokalnego: portu na hoście zdalnym. Dany port na zdalnym hoście (serwerze) jest przekazywany do danego hosta i portu po stronie lokalnej:

ssh -R local_port:remote_host:remote_port user@hostname
0x4a6f4672
źródło
1
Przypuszczam, że inną różnicą, poza składnią, byłby proces nasłuchujący połączenia użytkownika. ssh.exe -L mówi ssh.exe, aby nasłuchiwał (oprócz połączenia wychodzącego, które już tworzy). ssh.exe -R mówi sshd.exe, aby nasłuchiwał (oprócz słuchania, które już wykonuje).
barlop
@ 0x4a6f4672, Co to 0x4a6f4672znaczy?
Pacerier
@Pacerier tylko moje inicjały „JoFr” w zapisie szesnastkowym :-)
0x4a6f4672 16.01.15
3

Z lokalnym portem przekierowującym, ty (klient) otwórz gniazdo nasłuchiwania na komputerze i podłącz klienta protokołu na poziomie aplikacji do tego gniazda. Teraz połączenie jest przekazywane przez SSH do serwera. Serwer łączy się ze zdalnym hostem i tuneluje dane z klienta protokołu do końcowego miejsca docelowego.

Dzięki zdalnemu przekierowaniu portów serwer otwiera gniazdo nasłuchujące na hoście serwera. Niektóre zdalne aplikacje łączą się z tym hostem i wysyłają informacje, które są przesyłane na komputer kliencki. Tutaj ustanawia się połączenie z ostatecznym miejscem docelowym (niektóre serwery protokołu na poziomie aplikacji działające na komputerze lub w sieci), a dane są przesyłane ze zdalnej aplikacji do ostatecznego miejsca docelowego.

Oddzwonienie Eugeniusza Mayevskiego
źródło
dzięki, dzięki czemu stało się jasne, jak działa przekierowywanie portów. I dziękuję za przeniesienie pytania - po prostu nawet nie wiedziałem o tej stronie superużytkownika :-)
nandaloo
1

Najlepiej to zrozumieć na podstawie małych przykładów. W tych przykładach połączenia mają następującą strukturę:

Serwer lokalny - (LAN) - Terminal ----- (SSH, zwykle przez Internet) ----- Punkt końcowy tunelu - (LAN) - Maszyna zdalna

Korzystasz z przekierowania portów lokalnych, jeśli chcesz tunelować do określonej zdalnej maszyny / portu, osiągalnej przez punkt końcowy tunelu, do którego masz dostęp ssh. Ponadto port tego zdalnego komputera jest również dostępny lokalnie na twoim terminalu, tj. Http: // localhost: terminal_port /.

Dokonuje się tego przy użyciu następującej składni:

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

Możesz użyć zdalnego przekierowania portów, jeśli chcesz włączyć KAŻDEGO (!) Pilota, który jest w stanie dotrzeć do portu nasłuchiwania punktu końcowego tunelu, aby móc uzyskać zdalny dostęp do adresu IP / portu w lokalnej sieci LAN. W przypadku lokalnego serwera wygląda na to, że połączenie ze zdalnej maszyny jest inicjowane przez terminal.

Składnia jest następująca:

ssh -R tunnel_endpoint_listen_port:local_server_ip:local_server_port -p tunnel_endpoint_ssh_port ssh-login@tunnel_endpoint_ip
NStoeckm
źródło
0

Strona internetowa socat wyjaśnia to bardzo dobrze. Tak, wiem, że ssh i socat to dwie zupełnie różne rzeczy - ale dokumentacja socat jest po prostu bardzo dobra.

użytkownik400344
źródło