Daj serwerowi dostęp do Internetu poprzez połączenie klienta przez SSH

17

Mogę użyć mojego komputera domowego A do połączenia przez SSH z serwerem B, na którym dostęp do sieci zewnętrznej jest zablokowany. Innymi słowy, wszystkie żądania wysyłane do Internetu z B zgłaszają błąd: Sieć jest nieosiągalna . Czy mogę przekierować wszystkie te żądania, aby przejść przez komputer A, który ma nieograniczony dostęp do Internetu?

Serwer B to serwer, który obsługuje jedną z moich stron internetowych. Chcę pobrać pliki, aby zainstalować oprogramowanie. Ale połączenie jest zablokowane. Udało mi się transfer plików, ale to było skomplikowane, ponieważ są różne wersje oprogramowania na A i B , więc w zależności gdzie inny i wymaga różnych plików na A i B .

Szukałem w Internecie i wydaje się, że potrzebuję tunelu zwrotnego. Ale znalazłem rozwiązania tylko w przypadku przekierowania portu . Ale to nie jest to, czego potrzebuję, ponieważ nie chcę, aby B miał dostęp do A, ale do Internetu.

glin
źródło
jeśli zwolennik tych pytań zobaczy ten komentarz, czy mógłbyś poinformować nas dlaczego? Nie widzę w tym nic złego, nawet jeśli odpowiedź jest „niemożliwa”.
strugee
Możliwy duplikat unix.stackexchange.com/questions/111972/…
Lawrence
ssh pozwala na lokalne lub zdalne przekierowanie portów - tj. gdy aplikacja na B próbuje otworzyć port lokalny X, który jest przekierowywany do A jako próba otwarcia dowolnego portu, który określiłeś. Zatem A może swobodnie przekazać tę prośbę o połączenie do Internetu. Nie wspomniałeś, jakich portów lub protokołów próbujesz użyć, co ułatwiłoby tworzenie szczegółowych odpowiedzi.
Stabledog
Próbuję użyć kompozytora , więc powinny to być żądania HTTP i HTTPS do github w celu pobrania pakietów.
AL

Odpowiedzi:

8

Możesz uruchomić serwer proxy na komputerze A, z którym następnie łączy się komputer B, aby uzyskać dostęp do Internetu za pośrednictwem komputera A.

Coś takiego

             +----------+            +-----------+
             |          |+----SSH+-->|           |
             |     A    |            |    B      |
             |+--------+|            |           |
  Internet <-++-+PROXY<++<SSH Tunnel--+          |
             |+--------+|            |           |
             +----------+            +-----------+

Zainstaluj serwer proxy, taki jak squid, na A, który nasłuchuje na porcie 3128, a następnie możesz ssh do serwera w ten sposób -
ssh -L 3128:127.0.0.1:3128 user@B

Umożliwi to B dostęp do Internetu przez A

Lawrence
źródło
Po podłączeniu do B, w jaki sposób żądania do Internetu zostaną przekierowane do A? Nie ma konfiguracji do zmiany?
AL
Musisz ustawić serwer proxy na B na 127.0.0.1:3128
Lawrence
10

Po prostu dodając kilka więcej i wyraźnych kroków do odpowiedzi @Lawrence i @ SpiRail.

Wykonaj konfigurację w następujący sposób:

Konfiguracja na hoście A:

  1. Zainstaluj serwer proxy Squid na hoście A. Domyślnie Squid nasłuchuje na porcie 3128.
    yum install squid
  2. Skomentuj http_access deny allnastępnie dodaj http_access allow allw /etc/squid/squid.conf
  3. Jeśli sam Host A korzysta z serwera proxy, powiedz 10.140.78.130:8080, aby połączyć się z Internetem, a następnie dodaj ten serwer proxy /etc/squid/squid.confw następujący sposób:
refresh_pattern (Release|Packages(.gz)*)$ 0 20% 2880
cache_peer 10.140.78.130 parent 8080 0 no-query default
never_direct allow all

Konfiguracja na hoście B:

  1. Dodaj następujące wpisy do / etc / environment
export http_proxy=http://127.0.0.1:3129
export https_proxy=http://127.0.0.1:3129
  1. source /etc/environment

Teraz nasza konfiguracja jest zakończona.

Tworzenie tunelu SSH ze zdalnym przekierowaniem portów

  1. Uruchom następujące polecenie SSH z hosta A.
    ssh -R 3129:localhost:3128 user@HostB

    Jeśli chcesz stworzyć trwały tunel SSH, możesz użyć autossh w następujący sposób:
    autossh -M 20000 -f -NT -R 3129:localhost:3128 user@HostB
    Aby powyższe polecenie autossh działało, powinieneś mieć skonfigurowane klucze SSH z HostA na HostB

  2. Umożliwi to hostowi B dostęp do Internetu za pośrednictwem hosta A.

Sprawdzanie Internetu:

  1. Uruchom następujące polecenie z hosta B.
    wget https://google.com

Schemat przepływu ruchu : wprowadź opis zdjęcia tutaj

Dhiru
źródło
5

Odpowiedź @ Lawrence'a była na tyle dobra, że ​​wszystko załatwiłem. Ale oto bardziej szczegółowe kroki, które zastosowałem.

Użyłem tego do korzystania z mojego laptopa 4g dongle do kierowania Internetu do Raspberry Pi ze stałym połączeniem liniowym z routerem Wi-Fi.

Jeśli twój komputer to Mac: zainstaluj squidman http://squidman.net/squidman/

(nie tylko zwykła kałamarnica, miałem za dużo problemów z jej budowaniem) Domyślne ustawienia wydawały mi się wystarczająco dobre.

połącz się z 4g połącz z Wi-Fi - skonfiguruj statyczny adres IP na swoim Wi-Fi i usuń adres bramy (chyba że robisz zaawansowane rzeczy), w przeciwnym razie otrzymasz dwie domyślne trasy i to bardzo denerwujące. - upewnij się, że router Wi-Fi nie używa tego samego zakresu 192.168.xy (w tym przypadku skonfiguruj inne „x”)

ssh -R 8080:localhost:8080 pi@<ip address of the pi or target machine>

Na PI

export http_proxy=http://localhost:8080

z visudo dodaj tekst:

Defaults env_keep = "http_proxy https_proxy ftp_proxy"

Teraz wget będzie działać, podobnie jak sudo apt-get, abyś mógł instalować pakiety.

Jeśli chcesz gita, to tutaj: /programming/128035/how-do-i-pull-from-a-git-repository-through-an-http-proxy

SpiRail
źródło
Dziękuję za odpowiedź. Jaka jest visudotutaj rola ? Gdzie dodajesz tekst? (Nie mogę korzystać sudoz mojego hostingu)
AL
Naprawdę nie rozumiem twojego pytania, ale jeśli po prostu wpiszesz visudo w terminalu (możesz potrzebować „sudo visudo”), możesz dodać wiersz tekstu na dole.
SpiRail
na moim hostingu nie ma dostępu do katalogu głównego.
AL
To było dawno temu. Ale z pamięci visudo edytuje plik sudoers, a dodany wiersz oznacza, że ​​te zmienne środowiskowe użytkownika są zachowywane podczas pisania sudo. Jeśli nie możesz zrobić sudo, i tak nie potrzebujesz tego kroku.
SpiRail,