본문 바로가기
IT/AWS

[AWS] NLB 클라이언트 IP 보존 방법

by 양눈 2024. 10. 31.
반응형

AWS에서 Public NLB를 구성하고 뒷단으로 트래픽을 라우팅 하려면 Target Group을 만들어야 한다. 타겟 그룹의 종류는 총 4가지이며 이때 NLB에 뒤에 연결 하는 리소스가 EC2일때는 2가지를 사용할 수 있다. 

1번 ip 타입 
2번 인스턴스 타입

그마저도 NLB에 연결 하려면 프로토콜을 TCP로 설정 해야 한다. HTTP로 설정하면 NLB에 연결 할 수가 없다. 

 

그리고 이런 구성에서 "대상유형"을 선택에 따라서 EC2에 들어오는 패킷의 IP가 달라진다. 
아래와 같이 간단하게 앞단에 NLB를 두고 뒷단에 EC2에 http 한개 올려서 테스트 해보자. 

[테스트 환경]

NLB에 리스너 두개를 만들고 Target 그룹은 타입을 다르게 만들어서 EC2로 연결해 보았다. 
1번 IP 타입, 2번 인스턴스 타입
각각 호출해보고 아파치 웹서버의 엑세스로그에 어떤 IP가 기록 되는지 확인해 봤다. 


[실행결과]
1번 IP타입 - 8080포트로 웹사이트 호출

 

2번 인스턴스타입 - 8081포트로 웹사이트 호출

- 아파치의 Access log에서 Source IP를 확인

1. NLB에서 "IP타입"으로 TG생성 후 EC2로 패킷을 흘려보내면 EC2 내의 엑세스로그에 NLB 내부 ip로 들어오는것이 기록 된다. 
2. NLB에서 "인스턴스타입" TG생성 후 EC2로 패킷을 흘려보내면 EC2 내의 엑세스로그에 외부의 사용자 ip로 들어오는것이 기록 된다. 

AWS에서 Security Group을 설정할 때  Target Group 유형에 따라 Inbound rule에 등록해주어야 할 IP가 달라진다. 

NLB에서 "IP타입"으로 생성했다면 EC2에 VPC내 내부망 IP를 허가해주어야 한다. 
NLB에서 "인스턴스타입"으로 생성했다면 EC2에 VPC내 사용자의 Public IP를 허가해주어야 한다. 

그리고 NLB -> ALB로 들어올때도 인식하는 IP가 Public IP이므로 Public ip를 inbound rule에 넣어주면 트래픽이 허가가 된다. 
AWS로 아키텍처 설계할 때 인지하고 있으면 좋을 것 같다. 

AWS 문서에 기본적인 클라이언트 IP의 보존 방식은 아래와 같다. 

https://docs.aws.amazon.com/ko_kr/elasticloadbalancing/latest/network/edit-target-group-attributes.html

클라이언트 IP 보존

네트워크 로드 밸런서는 요청을 백엔드 대상으로 라우팅할 때 클라이언트의 소스 IP 주소를 보존할 수 있습니다. 클라이언트 IP 보존을 비활성화하면 소스 IP 주소는 Network Load Balancer 의 프라이빗 IP 주소입니다.

기본적으로 UDP 및 TCP_UDP 프로토콜이 있는 인스턴스 및 IP 유형 대상 그룹에 대해 클라이언트 IP 보존이 활성화됩니다(사용 중지할 수 없음). 그러나 preserve_client_ip.enabled 대상 그룹 속성을 사용하여 TCP 및 TLS 대상 그룹에 대한 클라이언트 IP 보존을 활성화하거나 비활성화할 수 있습니다.

기본 설정
  • 인스턴스 유형 대상 그룹: 활성화됨
  • IP 유형 대상 그룹(UDP, TCP_UDP): 활성화됨
  • IP 유형 대상 그룹(TCP, TLS): 비활성화됨

타켓그룹의 유형이 IP주소(TCP, TLS)인 경우 "클라이언트 IP보존" default 값이 OFF이므로 인스턴스 유형과 동일하게 클라이언트 IP를 보존하려면 Target group의 속성에서   "클라이언트 IP보존" 값을 활성화 해야한다.

참고로 Target Group 유형이 ALB이거나 인스턴스 일 때는 클라이언트 IP주소 보존을 수정 할 수 없다. 

반응형

댓글