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


17

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

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

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


이 질문의 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.