프록시 체인 : 정확히 어떻게 작동합니까?


1

따라서 기본 프록시에 대해 알고 있고 연결을 대상으로 투명하게 전달하는 방법을 알고 있습니다. 체인 프록시가 어떻게 작동하는지 이해할 수 없었습니다.

예를 들어이 체인이 proxy1 -> proxy2 -> proxy3 -> proxy4 -> destination있습니다.

일반적인 단일 프록시와 마찬가지로 요청이 프록시로 전송 된 다음 요청이 목적지로 전달되고 응답이 다시 전송됩니다. 그러나 프록시 체인 proxy1에서 요청을 proxy2대상으로 직접 전달하는 대신 요청을 전달해야한다는 것을 어떻게 알 수 있습니까?

프록시 체인에 보내는 요청의 일종의 헤더 때문에 프록시가 요청을 다음 프록시로 전달하도록 적절하게 지시합니까?

답변:


1

나는 그것에 대해 생각 은 "CONNECT"HTTP 방법 .

이 메커니즘에서 클라이언트는 HTTP 프록시 서버에 TCP 연결을 원하는 대상으로 전달하도록 요청합니다. 그런 다음 서버는 클라이언트 대신 연결을 진행합니다. 서버가 연결을 설정하면 프록시 서버는 클라이언트와의 TCP 스트림을 계속 프록시합니다. 초기 연결 요청 만 HTTP입니다. 그 후에 서버는 단순히 설정된 TCP 연결을 프록시합니다.

마지막 문장이 열쇠입니다. proxy1대한 프록시 연결을 요청 합니다 proxy2. 그런 다음 모든 간다 proxy2통해 proxy1더 이상 해석하지 않는, 그래서 당신은에 프록시 요청 proxy3이 요청을 잡아서으로 해석됩니다 proxy2. 다음 CONNECT 요청 (프록시로 전송 proxy4)은 및를 통과 proxy1하고 – 등 proxy2으로 해석됩니다 proxy3. 체인의 모든 프록시는 정확히 하나의 CONNECT 요청을 해석 합니다 .

모든 프록시가 초기 패킷 체인으로 올바르게 설정되면 양방향 TCP 연결을 사용하는 모든 항목이 CONNECT 터널을 통과 할 수 있습니다.

조심해

모든 HTTP 프록시 서버가이 기능을 지원하는 것은 아니며 동작을 제한하는 서버도이 기능을 지원합니다.

최종 참고 사항 : 실험하는 동안 실행하는 프로그램이 CONNECT 대신 GET을 사용하면 프록시를 체인화하는 데 문제가있을 수 있습니다. GET은 체인을 허용하지 않습니다 . 여기에서 다룹니다 . 프록시 체인에 대한 혼동은 GET 메커니즘에 대해 더 잘 알고 있기 때문일 수 있습니다 (즉, 생각하면).


이것을 위해 1! 그래서, proxy2가 얻는 것은 proxy1과 동일한 페이로드 및 헤더 이며 proxy2는 자신이 목적지가 아니라는 것을 알고 있기 때문에 단순히 동일한 페이로드 및 헤더 를 proxy3에 전송합니까? -> 감사합니다.이 세부 사항에 대해서도 언급 할 수 있습니다.
adrhc

나는 처음 요청에 대해서만 이야기하고있었습니다.
adrhc

@adrhc 초기 요청은로 해석되어 proxy1도착하지 않습니다 proxy2.
Kamil Maciorowski

그래서 기본적으로 proxy1은 proxy2에 연결됩니다. proxy3에 연결하십시오.
adrhc

1
@adrhc 예. 미묘하지만 : 후 proxy1당신이 보내는 어떤 페이로드 소요로 전송, 당신을 위해 CONNECT 프록시 역할을하는 데 동의 proxy2것처럼 proxy1저자이었다. 다음에 보낸 요청이에 도달 proxy2합니다. 예제 시나리오에서 이는 CONNECT 요청이기도합니다. proxy2그것을 가져오고 proxy1심지어 당신이 존재 한다는 것을 모를 수도 있습니다. 관점 proxy1에서 CONNECT에 요청합니다 proxy3. 동시에 proxy1무엇이든 묻습니다 (보내는 내용을 들여다 보지 않는 한). 따라서 프록시는 "의식적으로"다음과 협상하지 않습니다. 체인에서 각각을 대신하여 협상합니다.
Kamil Maciorowski
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.