HTTP 프록시는 호스트 헤더를 기반으로 외부 인터페이스를 선택합니다.

HTTP 프록시는 호스트 헤더를 기반으로 외부 인터페이스를 선택합니다.

저는 직장에서 여러 개의 외부 IP 주소(전체 클래스 C)가 있고 사용 중인 아웃바운드 IP 주소를 선택해야 하는 매우 구체적인 사용 사례를 가지고 있습니다. 요청은 http이고 응용 프로그램 서버는 인트라넷의 다른 시스템입니다. 단순화를 위해 애플리케이션 코드를 변경할 필요가 없도록 http 프록시로 유지하고 싶습니다.

필요하다:

  • 프록시는 "External-Ip: xyza"와 같은 헤더를 찾고 해당 외부 IP 주소가 있는 인터페이스를 통해 트래픽을 보냅니다. 헤더를 쉽게 수정할 수 있으므로 인터페이스 이름을 보내야 하는 경우에는 문제가 되지 않습니다.
  • 헤더가 없으면 프록시는 헤더를 무작위로 선택하고 http 헤더로 사용하는 인터페이스를 반환합니다.

이것을 달성하는 가장 쉬운 방법은 무엇입니까?

답변1

그럼에도 불구하고 Squid에는 이 기능이 내장되어 있습니다.

"acl outbound0 req_header .2$"를 사용하여 "outbound0"이라는 ACL을 .2 외부 IP로 설정했습니다. 스크립트를 사용하여 나머지 ACL을 생성하고 이를 구성 파일에 하드코딩했습니다.

그런 다음 이를 ACL을 기반으로 외부 IP를 선택하는 tcp_outgoing_address와 결합했습니다. 결과는 다음과 같습니다.

acl outbound0 req_header TS-Outbound-IP \.20$
acl outbound1 req_header TS-Outbound-IP \.21$
acl outbound2 req_header TS-Outbound-IP \.22$
acl outbound3 req_header TS-Outbound-IP \.23$
acl outbound4 req_header TS-Outbound-IP \.24$
acl outbound5 req_header TS-Outbound-IP \.25$

tcp_outgoing_address 192.168.1.20 outbound0
tcp_outgoing_address 192.168.1.21 outbound1
tcp_outgoing_address 192.168.1.22 outbound2
tcp_outgoing_address 192.168.1.23 outbound3
tcp_outgoing_address 192.168.1.24 outbound4
tcp_outgoing_address 192.168.1.25 outbound5

현재 이것은 우리의 요구에 매우 적합합니다. 이 접근 방식은 어색해 보이고 대안에 관심이 있기 때문에 이 질문을 열어 두겠습니다.

관련 정보