nginx 포트 포워딩/ssh 터널링

nginx 포트 포워딩/ssh 터널링
  • 외부에서 액세스할 수 있는 고정 IP 주소가 없는 로컬 네트워크에 컴퓨터(A라고 함)가 있습니다. (SSH 포트 AAAAA)
  • A에는 외부에서 접속할 수 있는 웹서버가 있습니다.
  • 인터넷에서 액세스할 수 있고 웹 서버(ssh 포트: BBBBB) 도 실행하는 서버(B)가 있습니다.
  • 웹 브라우저가 있는 모든 컴퓨터에서 A부터 B까지의 웹 서버에 액세스할 수 있기를 원합니다.

다음 설정으로 SSH 원격 터널링을 성공적으로 사용해 왔습니다.

  • 기계 A에서:

    $> ssh -f -N -p BBBBB -R 0.0.0.0:9000:localhost:AAAAA [email protected]

  • 머신 C에서:

    $> ssh -f -p 9000 -D 9001 -N [email protected]

  • C 머신의 웹 브라우저에서,manual proxy configuration SOCKS host: localhost, port 9001, SOCKS v5

이것은 정말 잘 작동하지만 C에서 SSH 명령을 실행하고 매번 웹 브라우저에서 설정을 변경해야 하는 것이 매우 번거롭습니다...

그래서 나는 누군가에게 이에 대해 이야기했는데, 그 사람은 B의 웹 서버에 있는 nginx의 일부 웹 구성을 사용하여 서버 B에서 직접 C 머신에서 수행한 부분을 수행함으로써 설정을 단순화할 수 있다고 말했습니다. 이제 나는 이것을 시도했습니다.

  • A에서는 이전과 동일
  • B:

    $> ssh -f -p 9000 -D 9001 -N [email protected]

  • B의 nginx 구성에서:

    $> cat /etc/nginx/sites-available/default:

upstream tunnel {
    server 127.0.0.1:9000;
}

server {
        listen 80;
        [...]
      location /A {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;

        proxy_pass http://tunnel;
  }
    [...]
}
server {
        listen 443 ssl;
        [...]
      location /A {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_pass http://tunnel;
  }
    [...]    
}

제가 이해한 바에 따르면, 인터넷에 연결된 컴퓨터의 웹 브라우저에서 내 컴퓨터 A의 전달 포트인 http://B.B.B.B/A터널을 요청 127.0.0.1:9000하면 A의 웹 서버에 액세스할 수 있습니다.

하지만 이 설정에는 문제가 있습니다. 연결을 시도하면 http://B.B.B.B/A로딩 시간이 길어지고(약 1분) 빈 페이지가 나타나고 다음과 같은 오류 메시지가 표시됩니다.

SSH-2.0-OpenSSH_6.7p1 Raspbian-5+deb8u3
Protocol mismatch.

나는 그 오류를 조금 구글링하여 상대적으로 유사한 문제가 있는 몇 개의 게시물을 찾았지만 솔직히 이런 종류의 일에 대한 나의 (매우) 제한된 기술로 인해 그들의 수정 사항을 내 사용 사례에 적용하려고 할 때 길을 잃었습니다. ... 누구든지 저를 도와주실 수 있나요?

관련 정보