투명 모드에서는 다음 iptable 규칙을 사용하여 트래픽을 오징어로 리디렉션합니다.
iptables -I PREROUTING -t nat -p tcp --dport 80 -j REDIRECT --to-ports 3128
내 지식에 따라 REDIRECT는 대상 IP 주소를 로컬 인터페이스의 IP로 변경합니다.
그러면 트래픽이 오징어에 도달하면 대상 IP가 이제 변경되었으므로 오징어는 트래픽을 어디로 전달할지 어떻게 알 수 있습니까?
답변1
REDIRECT
를 사용하면 Squid가 원래 의도한 대상 IP를 볼 수 없다는 것이 맞습니다 . 대신 Host:
HTTP 1.1에서 필수인 HTTP 헤더 에서 클라이언트가 제공한 호스트를 확인합니다 .
답변2
이는 게이트웨이와 매우 유사합니다.
클라이언트 호스트는 대상 호스트가 어디에 있는지 알지 못하는 경우 기본 게이트웨이로 패킷을 보냅니다. 그리고 게이트웨이는 해당 패킷이 전송되어야 하는 위치를 정의합니다.
투명 프록시도 동일한 작업을 수행합니다. xxx.xxx.xxx.xxx:80으로 향하는 모든 패킷은 패킷 헤더에 언급된 포트 대신 포트 3128로 전환됩니다. Squid는 패킷과 해당 헤더 및 해당 포트를 분석한 다음 src
게이트웨이 dst
처럼 패킷을 제출하거나 이전에 캐시된 경우 즉시 응답을 보냅니다.
대상 포트는 각 패킷 내에 저장되고 패킷은 전송 중인 다른 호스트/포트로 라우팅될 수 있다는 주요 아이디어입니다.