SSH로 클라이언트 연결을 통해 인터넷에 서버 액세스 제공


17

가정용 컴퓨터 A 를 사용하여 SSH 를 통해 외부 네트워크에 대한 액세스가 차단 된 서버 B 에 연결할 수 있습니다 . 즉, B 에서 인터넷에 대한 모든 요청에 오류가 발생합니다. 네트워크에 연결할 수 없습니다 . 인터넷에 제한없이 액세스 할 수 있는 컴퓨터 A 를 통과하도록 이러한 모든 요청을 리디렉션 할 수 있습니까 ?

서버 B 는 내 웹 사이트 중 하나를 호스팅하는 서버입니다. 일부 소프트웨어를 설치하기 위해 파일을 다운로드하고 싶습니다. 그러나 연결이 차단되었습니다. 파일을 전송할 수는 있었지만 소프트웨어 버전이 AB 에서 다르기 때문에 복잡했기 때문에 서로 다른 종속성과 AB 에서 다른 파일이 필요했습니다 .

인터넷에서 검색했는데 리버스 터널이 필요한 것 같습니다. 그러나 포트가 리디렉션 되는 솔루션 만 찾았습니다 . 그러나 BA 에 액세스 하지 않고 인터넷 에 액세스하기를 원하지 않기 때문에 필요한 것이 아닙니다 .


이 질문의 downvoter가이 의견을 본다면, 그 이유를 알려주시겠습니까? 대답이 "불가능하다"하더라도 아무 문제가 없습니다.
strugee


ssh를 사용하면 로컬 또는 원격 포트 전달을 수행 할 수 있습니다. 즉, B의 애플리케이션이 로컬 포트 ​​X를 열려고하면 지정한 포트를 열려고 시도하여 A로 전달됩니다. 따라서 A는 해당 연결 요청을 인터넷으로 자유롭게 전달할 수 있습니다. 사용하려는 포트 또는 프로토콜에 대해서는 언급하지 않았으므로 자세한 답변을 쉽게 구성 할 수 있습니다.
Stabledog

composer 를 사용하려고 하는데 패키지를 다운로드하려면 github에 대한 HTTP 및 HTTPS 요청이어야합니다.
AL

답변:


8

컴퓨터 A를 통해 인터넷에 액세스하기 위해 컴퓨터 B가 연결 한 컴퓨터 A에서 프록시를 실행할 수 있습니다.

이 같은

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

포트 3128에서 수신 대기하는 A에 squid와 같은 프록시를 설치 한 후 다음을 사용하여 서버에 ssh 할 수 있습니다
ssh -L 3128:127.0.0.1:3128 user@B

그러면 B가 A를 통해 인터넷에 액세스 할 수있게됩니다.


B에 연결되면 인터넷 요청이 어떻게 A로 리디렉션됩니까? 변경할 구성이 없습니까?
AL

B의 프록시 서버를 127.0.0.1:3128로 설정해야합니다.
Lawrence

10

@Lawrence와 @SpiRail의 답변에 더 분명한 단계를 추가하면됩니다.

다음과 같이 설정을 수행하십시오.

호스트 A에서 설정 :

  1. 호스트 A에 프록시 서버 오징어를 설치하십시오. 기본적으로 Squid는 포트 3128에서 수신 대기합니다.
    yum install squid
  2. http_access deny all그런 다음 http_access allow all/etc/squid/squid.conf에 주석 을 추가하십시오 .
  3. 호스트 A 자체가 인터넷에 연결하기 위해 10.140.78.130:8080 /etc/squid/squid.conf과 같은 프록시를 사용 하는 경우 다음과 같이 프록시를 추가하십시오 .
refresh_pattern (Release|Packages(.gz)*)$ 0 20% 2880
cache_peer 10.140.78.130 parent 8080 0 no-query default
never_direct allow all

호스트 B에서 설정 :

  1. / etc / environment에 다음 항목을 추가하십시오.
export http_proxy=http://127.0.0.1:3129
export https_proxy=http://127.0.0.1:3129
  1. source /etc/environment

이제 설정이 완료되었습니다.

원격 포트 포워딩으로 SSH 터널 생성

  1. 호스트 A에서 다음 SSH 명령을 실행하십시오.
    ssh -R 3129:localhost:3128 user@HostB

    영구 SSH 터널을 만들려면 다음과 같이 autossh를 사용할 수 있습니다.
    autossh -M 20000 -f -NT -R 3129:localhost:3128 user@HostB
    위의 autossh 명령이 작동하려면 HostA에서 HostB로 SSH 키를 설정해야합니다.

  2. 그러면 호스트 B가 호스트 A를 통해 인터넷에 액세스 할 수 있습니다.

인터넷 확인 :

  1. 호스트 B에서 다음 명령을 실행하십시오.
    wget https://google.com

교통 흐름 다이어그램 : 여기에 이미지 설명을 입력하십시오


5

@Lawrence의 대답은 내가 그것을 완전히 끝내기에 충분했습니다. 그러나 여기에 내가 사용한 자세한 단계가 있습니다.

필자는 랩톱 4g 동글을 사용하여 인터넷을 Wi-Fi 라우터에 고정 된 회선 연결로 라즈베리 파이로 라우팅하는 데 사용했습니다.

호스트가 Mac 인 경우 : squidman http://squidman.net/squidman/을 설치 하십시오.

(일반 오징어뿐만 아니라 그것을 만드는 데 너무 많은 문제가있었습니다) 기본 설정은 나에게 충분했습니다.

4g에 연결 wifi에 연결-wifi에서 고정 IP를 구성하고 게이트웨이 주소를 제거하십시오 (고급 일을하지 않는 한) 그렇지 않으면 두 개의 기본 경로와 매우 성가신 것입니다. -무선 라우터가 동일한 192.168.xy 범위를 사용하지 않는지 확인하십시오 (이 경우 다른 "x"구성)

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

PI에서

export http_proxy=http://localhost:8080

visudo로 텍스트를 추가하십시오.

Defaults env_keep = "http_proxy https_proxy ftp_proxy"

이제 wget이 작동하고 sudo apt-get을 사용하여 패키지를 설치할 수 있습니다.

git뿐만 아니라 /programming/128035/how-do-i-pull-from-a-git-repository-through-an-http-proxy


답변 주셔서 감사합니다. 여기서의 역할은 무엇입니까 visudo? 텍스트를 어디에 추가합니까? ( sudo웹 호스팅에서 사용할 수 없습니다 )
AL

나는 당신의 질문을 정말로 이해하지 못하지만, 터미널에 visudo를 입력하면 ( 'sudo visudo'가 필요할 수 있습니다) 하단에 텍스트 줄을 추가 할 수 있습니다.
SpiRail

내 웹 호스팅에 루트 액세스 권한이 없습니다.
AL

오래 전 이었어요 그러나 메모리 visudo에서 sudoers 파일을 편집하고 추가되는 행은 sudo를 입력 할 때 해당 사용자 환경 변수가 유지됨을 의미합니다. sudo를 수행 할 수 없다면 어쨌든이 단계가 필요하지 않습니다.
SpiRail
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.