Application Gateway의 TLS/TCP 프록시를 사용하는 경우 Application Gateway가 IP 주소의 SNAT(원본 네트워크 주소 변환)를 수행하므로 원래 클라이언트 IP는 기본적으로 유지되지 않습니다. 즉, 백 엔드 서버는 항상 원본 IP를 프런트링 애플리케이션 게이트웨이 리소스의 주소로 봅니다. 경우에 따라 원래 클라이언트 IP 주소는 중요한 컨텍스트를 제공하고 백 엔드 시스템이 트래픽 처리 및 처리 방법을 제어할 수 있도록 하기 때문에 필요합니다. 이 기능이 없으면 불완전하거나 잘못된 데이터로 인해 백 엔드 애플리케이션이 작동하지 않을 수 있습니다. 클라이언트 IP 주소를 요구하는 사용 사례에는 다음이 포함되지만 제한되지는 않습니다.
- 애플리케이션 논리 – 백 엔드 서버 애플리케이션은 세션 관리, 액세스 제어 또는 개인 설정된 응답과 같은 비즈니스 프로세스를 적용하기 위해 원본 IP를 인식해야 합니다.
- 보안 및 감사 – 추적 기능을 위해 IP 정보가 필요하거나 감사 목적으로 로그를 유지 관리합니다.
- 법률 또는 규정 준수 요구 사항 - 일부 규정에서는 데이터 액세스 추적 또는 인시던트 대응을 위해 클라이언트 IP를 로깅해야 할 수 있습니다.
- 분석 및 모니터링 – 트래픽 패턴 인사이트를 얻으려면
계층 4 프록시를 사용하여 클라이언트 IP 보존에 대한 세부 정보
계층 7 프록시 [HTTP(S)]의 경우 클라이언트 IP 유지는 기본적으로 사용하도록 설정됩니다. Application Gateway는 원래 클라이언트 IP 주소를 포함하는 x-forwarded-for 헤더를 백 엔드 서버로 전달하는 모든 요청에 자동으로 추가합니다.
반면 Application Gateway의 계층 4 프록시 기능은 기본적으로 클라이언트 IP를 유지하지 않습니다. 결과적으로 백 엔드 서버는 애플리케이션 게이트웨이의 공용 IP 주소 또는 서비스 인스턴스 중 하나의 개인 IP 주소를 볼 수 있습니다. 계층 4 프록시를 사용하여 클라이언트 IP를 유지하기 위해 Application Gateway는 프록시 프로토콜 헤더 V1을 사용합니다. 이 헤더 기반 프로토콜은 들어오는 프런트 엔드 연결(원본 IP, 대상 IP 및 포트)의 필수 메타데이터를 전달하며 백 엔드 TCP 연결 중에 전송됩니다. 프록시 프로토콜 헤더는 TLS 또는 TCP 프로토콜에 대한 백 엔드 설정에서 사용하도록 설정해야 합니다.
사용하도록 설정하면 Application Gateway 리소스가 프록시 프로토콜 헤더를 백 엔드 서버로 보냅니다. 이 헤더는 TCP 핸드셰이크가 완료된 직후와 TCP 데이터 스트림이 시작되기 직전에 전송됩니다. TLS 프로토콜 백 엔드 설정을 사용하는 경우 프록시 프로토콜 헤더는 TLS 핸드셰이크 프로세스 앞에 섰습니다.
TCP(Transmission Control Protocol) 프로토콜에 대한 흐름:TCP handshake --> Proxy protocol header --> Data stream
TLS(전송 계층 보안) 프로토콜에 대한 흐름:TCP handshake --> Proxy protocol header --> TLS handshake --> Data stream
팁 (조언)
- 클라이언트 IP 유지는 IPv4 및 IPv6 클라이언트 주소 모두에서 작동합니다.
- Application Gateway는 수신기에서 프록시 프로토콜 헤더를 구문 분석하지 않습니다. 애플리케이션 게이트웨이 리소스 앞에 다른 프록시가 배치되면 들어오는 프록시 헤더가 데이터 스트림의 일부로 백 엔드 서버로 전달됩니다. Application Gateway는 들어오는 프록시 프로토콜 헤더를 삭제하거나 수정하지 않으므로 백 엔드 서버는 이러한 상황에서 여러 프록시 프로토콜 헤더를 수신할 수 있습니다.
Configurations
Application Gateway의 프록시 프로토콜 헤더에 대해 지원되는 구성은 다음과 같습니다.
백 엔드 설정 – TLS 또는 TCP 프로토콜을 사용할 때 백 엔드 설정에서 클라이언트 IP 유지를 사용하도록 설정할 수 있습니다. 이 구성을 사용하면 프록시 프로토콜 헤더가 클라이언트에서 발생하는 모든 라이브 트래픽에 대해 백 엔드 서버로 전송됩니다.
헬스 프로브 – Application Gateway 프로브는 프록시 프로토콜 헤더도 지원합니다. 백 엔드 설정에서 프록시 프로토콜 설정을 사용하는 경우 기본 상태 프로브는 백 엔드 서버에 대한 요청에 이 헤더를 포함합니다. 사용자 지정 프로브의 경우 해당 프로브에 대해 이 설정을 사용하도록 설정할 수 있으며 필요한 경우 프로브에 다른 포트를 사용할 수 있습니다.
속성 세부 정보
| 속성 이름 | 부모 속성 이름 | 가치 |
|---|---|---|
| 클라이언트 IP 보존 활성화 | ApplicationGatewayBackendSettings | 불리언 (Boolean) |
| EnableProbeProxyProtocolHeader | ApplicationGatewayProbe | 불리언 (Boolean) |
프록시 프로토콜 헤더 형식
Application Gateway의 프록시 프로토콜 헤더 V1은 다음 형식으로 구성된 사용자가 읽을 수 있는 텍스트의 한 줄입니다.
라이브 트래픽
PROXY TCP4 <client-ip> <backend-server-ip> <client-port> <backend-server-port> \r\n
- 프로토콜 버전: 프로토콜 버전을 보여 주는 문자열입니다.
- IPv4 또는 IPv6 프로토콜: TCP over IPv4 또는 TCP over IPv6. 따라서 메타데이터를 사용할 수 없는 경우 해당 값은 TCP4, TCP6 또는 UNKNOWN일 수 있습니다.
- 원본 IP: 원래 클라이언트 IP의 주소입니다.
- 대상 IP: 이 주소는 의 IP 주소입니다.
- 원본 포트: 원래 클라이언트의 포트 번호입니다.
- 대상 포트: 연결을 받은 수신기 포트 번호입니다.
- 라인 종료를 나타내는 \r\n
트래픽 검색
PROXY UNKNOWN\r\n 애플리케이션 게이트웨이 프로브의 경우와 같이 클라이언트 IP를 알 수 없는 경우 백 엔드는 프록시 프로토콜 헤더를 알 수 없는 것으로 표시합니다.