저는 squid
이것을 내부 네트워크 카드 하나와 외부 네트워크 카드 하나가 있는 소규모 설정에서 프록시로 사용하고 있습니다. 이제 tcp를 사용하면 양쪽에서 트래픽을 캡처할 수 있지만 몇 가지 문제가 있습니다. 외부 NIC에서 트래픽을 캡처하면 외부 NIC IP만 클라이언트 IP로 가져오고, 내부에서 트래픽을 캡처하면 대상 IP는 항상 SQUID 내부 IP입니다. 내가 원하는 것은 실제 클라이언트와 서버 IP입니다. 어떻게 해야 하나요?
내 운영 체제는 CentOS 7.2입니다.
답변1
투명 프록시를 사용하지 않는 한 표시되는 동작은 정상입니다.
- 클라이언트는 콘텐츠를 검색하기 위해 프록시에 연결하므로 클라이언트에서 프록시로 갔다가 다시 돌아오는 패킷을 볼 수 있습니다.
- 프록시는 클라이언트를 대신하여 대상 서버에 연결하므로 프록시에서 대상 서버로 갔다가 돌아오는 패킷을 볼 수 있습니다.
IP 수준에서는 둘을 연결할 방법이 없습니다. 프록시가 캐싱 프록시인 경우 어떤 경우에는 아무것도 연결할 필요가 없습니다. 프록시의 캐시에 정보가 있으면 자체적으로 클라이언트의 요청을 처리할 수 있습니다. 하지만 패킷 안을 살펴보면 원하는 것을 찾을 수 있습니다.
- 클라이언트에서 프록시로의 요청에는 대상 서버 이름(
Host
HTTP 헤더 검색)이 포함됩니다. - 프록시에서 대상 서버로 보내는 요청에는 프록시 구성에 따라 클라이언트의 IP 주소(
X-Forwarded-For
HTTP 헤더 검색)가 포함될 수 있습니다.
두 번째 경우에는 캐싱 프록시를 사용하여 특정 캐시 가능한 리소스를 요청한 첫 번째 클라이언트의 IP 주소만 찾을 수 있습니다.
암호화된 연결을 처리하려고 하면 상황이 더 복잡해집니다. 이에 대해 읽어보겠습니다.주제에 대한 Wireshark 페이지그리고오징어)...