본문 바로가기
IT/web

[http] turnnel

by 내일은교양왕 2024. 5. 10.

https://en.wikipedia.org/wiki/HTTP_tunnel 페이지를 의역한 글입니다. 


개념

방화벽이 포함된 제한된 네트워크 사이에 두대의 컴퓨터가 네트워크 링크를 만드는데 사용

터널은 프록시 처럼 중재자 역활이였다.

 

설명

터널링은 제한된 네트워크에서 지원되지 않는 프로토콜을 이용하여 통신할 수 있도록 해주었다.

터널링은 http connect method를 이용한다. 어떻게 동작하냐면, 클라이언트는 http proxy server에게 도착지점과 tcp 커넥션을 연결하라고 부탁한다. 그 서버는 클라이언트 자격으로 커넥션을 만든다. 커넥션이 맺어지면, 프록시 서버는 클라이언트로 부터 tcp stream을 교환한다. 첫 요청은 http였지만, 추후 서버는 tcp connection을 프록시 하게된다.

 

 

이런 방식은 http proxy처럼 행동하는 클라이언트가 SSL를 사용하는 웹사이트를 어떻게 접근하는지 설명해준다.

프록시 서버는 https port 443, whitelisting hosts, ssl를 포함하지 않는 트래픽을 블락킹을 기본으로 하는 커넥션만 허용한다.

 

Example negotiation

client는 프록시 서버를 연결하고 어디에 연결하고 싶은지 host와 port를 명시한 터널링을 요청.

포트는 어떤 프로토콜을 요구되는지 나타냄

CONNECT streamline.t-mobile.com:22 HTTP/1.1
Proxy-Authorization: Basic encoded-credentials

 

커넥션이 맺으면, 프록시는 2xx response를 내려줌

커넥션이 맺으면, 프록시는 2xx response를 내려줌

 

클라이언트는 리모트 호스트로 부터 프록시되었고 프록시 서버로 부터 데이터를 전달한다. 클라이언트는 리모트 호스트가 허용한 프로토콜을 이용하여 통신한다. 아래의 예처럼 클라이언트는 SSH를 맺기 시작한다. 첫 connect request에서 포트넘버를 확인해보면 22로 한걸 볼 수 있다. 22는 tcp통신이다.

 

connect method 대신 다른 method로 HTTP Tunneling

POST, GET, PUT and DELETE로도 충분히 HTTP tunnel를 구현할 수 있다. Bidirectional-stream over Synchronous HTTP의 접근방법과 비슷하다.

서버는 외부망에 있고 클라이언트는 보호된 내부망에 있다고 치자. 클라언트가 외부로 트래픽을 보내면, 클라이언트는 그 데이터를 http request로 재포장하고 외부 서버에 전달된다. 외부서버는 클라이언트가 보낸 요청을 확인하기 위해 데이터를 다시 까고 원본을 확인 후 실행한다. 해당 응답을 줄 때 다시 http response로 재포장한다면 클라이언트에거 염겨준다. 모든 트래픽이 GET과 POST 요청 및 응답으로 캡슐화 되어 있기에 이런 방식은 프록시와 방화벽에서 활용된다.

'IT > web' 카테고리의 다른 글

[http] no-store, no-cache  (0) 2024.05.13
[http] If-Modified-Since, If-None-Match  (0) 2024.05.13
[http] MIME  (0) 2024.05.10
[FE] async / await  (0) 2024.04.29
[http] gzip 테스트  (0) 2024.04.24