Network Load Balancer의 TCP 연결 문제를 해결하고 싶습니다.
해결 방법
Amazon Virtual Private Cloud(Amazon VPC) 흐름 로그 또는 패킷 캡처를 사용하면 패킷을 추적하고 패킷이 삭제되는 위치를 확인할 수 있습니다.
다음은 온프레미스 서버에서 인터넷에 연결된 Network Load Balancer로의 간단한 트래픽 흐름의 예시입니다.
클라이언트(온프레미스)---->방화벽(온프레미스)---인터넷--->NLB-->대상
오류가 발생하면 클라이언트와 대상 간의 네트워킹 경로와 중간 디바이스를 확인하십시오.
클라이언트 연결 문제 해결
오류가 DNS 확인 실패인지, 연결 거부인지 또는 연결 시간 초과인지 파악합니다.
클라이언트가 Network Load Balancer의 정확한 IP 주소로 DNS를 확인할 수 있는지 확인합니다. Linux용 dig(dig www.example.com) 또는 Microsoft Windows용 nslookup(nslookup.www.example.com)과 같은 도구를 사용합니다.
dig 또는 nslookup을 사용하여 AWS Management Console에서 사용할 수 있는 Network Load Balancer의 FQDN(정규화된 도메인 이름)을 확인할 수 있습니다. Network Load Balancer의 FQDN 구문은 다음과 같습니다.
name-id.elb.region.amazonaws.com. For example: dig my-load-balancer-1234567890abcdef.elb.us-east-2.amazonaws.com
사용자 지정 도메인 DNS의 dig 또는 nslookup 출력의 IP 주소와 로드 밸런서의 FQDN이 동일한지 확인합니다.
클라이언트 패킷이 Network Load Balancer로 이동하는지 확인합니다. tcpdump, wireshark 또는 클라이언트의 VPC 흐름 로그와 같은 패킷 캡처 도구를 사용하여 클라이언트의 네트워크 인터페이스를 나가고 들어오는 패킷을 확인합니다. SYN 패킷이 Network Load Balancer에 도달하지 않는 경우 클라이언트 애플리케이션에서 트래픽이 차단되는 원인이 무엇인지 확인합니다. 클라이언트의 운영 체제(OS)와 방화벽이 Network Load Balancer의 수신 및 발신 트래픽을 허용하는지 확인합니다.
Network Load Balancer의 IP 주소로 이동하는 트래픽에 대한 VPC 흐름 로그에 REJECT로 표시될 수 있습니다. 로드 밸런스의 보안 그룹과 네트워크 액세스 제어 목록(네트워크 ACL) 아웃바운드 규칙을 확인하여 트래픽을 허용하는지 확인합니다. Network Load Balancer의 IP 주소에서 오는 트래픽에 대한 VPC 흐름 로그에 REJECT가 있을 수도 있습니다. 클라이언트의 보안 그룹과 네트워크 ACL의 인바운드 규칙을 확인하여 트래픽을 허용하는지 확인합니다.
로드 밸런서에서 클라이언트로 전송되는 응답 트래픽(SYN_ACK)은 표시되지만 클라이언트에서 로드 밸런서로 전송되는 ACK는 표시되지 않을 수 있습니다. 클라이언트의 방화벽이 로드 밸런서의 트래픽을 차단하고 있는지 확인합니다.
Network Load Balancer 연결 실패 문제 해결
Network Load Balancer의 VPC 흐름 로그를 검토하여 클라이언트 트래픽이 로드 밸런서에 도달하는지 확인합니다.VPC 흐름 로그에 로드 밸런서가 클라이언트의 트래픽을 거부한 것으로 표시되면 로드 밸런서의 보안 그룹과 서브넷의 네트워크 ACL 인바운드 규칙을 확인합니다. 해당 규칙이 로드 밸런서 리스너 포트의 클라이언트 IP 주소로부터의 인바운드 트래픽을 허용하는지 확인합니다.
Network Load Balancer가 클라이언트의 트래픽을 수락한 경우에는 로드 밸런서가 트래픽을 대상 IP 주소로 전달하는지 확인합니다. Network Load Balancer의 대상으로 향하는 패킷에는 소스 IP 주소가 로드 밸런서의 프라이빗 IP 주소로 있어야 합니다. 또한 대상 IP 주소가 목적지 IP 주소여야 합니다.
REJECT 오류를 해결하려면 보안 그룹과 서브넷의 네트워크 ACL 아웃바운드 규칙을 확인하십시오. 규칙이 대상 포트의 대상 IP 주소로 아웃바운드 트래픽을 허용하는지 확인합니다.
Network Load Balancer의 VPC 흐름 로그를 확인하여 로드 밸런서가 대상 IP 주소로부터 응답 트래픽을 수신하고 있는지 확인합니다. 트래픽이 없는 경우에는 대상의 VPC 흐름 로그 또는 패킷 캡처를 확인하여 대상이 로드 밸런서의 트래픽을 수신하고 응답했는지 확인합니다.
로드 밸런서가 대상 응답 트래픽을 수신하지만 클라이언트로 향하는 패킷을 거부하는 경우 네트워크 ACL의 아웃바운드 규칙을 확인합니다. 규칙이 임시 포트(1024-65535)에서 클라이언트 IP 주소로 트래픽을 허용하는지 확인합니다.
Network Load Balancer가 응답 트래픽을 클라이언트에 전달하지만 클라이언트가 수신하지 않는 경우, 방화벽과 같은 중간 디바이스를 확인합니다. TCP 기반 traceroute를 사용하여 네트워크 경로에서 네트워크 디바이스를 찾을 수 있습니다. 클라이언트 디바이스에서 다음 예제 명령을 실행하십시오.
mtr -P -T -r
traceroute -T -p
대상 관련 오류 문제 해결
Network Load Balancer의 VPC 흐름 로그를 검토하여 로드 밸런서의 트래픽을 수신하는 대상을 식별하고 트래픽이 대상에 도달했는지 확인합니다. 대상 그룹이 클라이언트 IP 주소 보존을 활성화한 경우 클라이언트의 IP 주소가 소스 IP 필드에 표시됩니다. 클라이언트 IP 주소 보존이 비활성화되면 로드 밸런서의 프라이빗 IP 주소가 표시됩니다.
대상의 VPC 흐름 로그에 대상이 로드 밸런서로부터 들어오는 트래픽을 거부한 것으로 표시되면 대상의 보안 그룹과 네트워크 ACL을 확인합니다. 대상 그룹의 대상 포트가 로드 밸런서의 프라이빗 IP 주소 또는 클라이언트 IP 주소에 열려 있는지 확인합니다. 대상이 발신 트래픽을 거부한 것으로 로그에 표시되면 대상 보안 그룹 및 네트워크 ACL의 아웃바운드 규칙을 확인합니다. 임시 포트(1024-65535)가 로드 밸런서의 프라이빗 IP 주소 또는 클라이언트 IP 주소에 열려 있는지 확인합니다.
SYN 패킷은 들어오지만 해당 SYN_ACK는 전송되지 않는 경우 iptables와 같은 OS 수준 방화벽 또는 프록시가 트래픽을 차단하고 있는지 확인합니다.
대상에 Network Load Balance 대상 그룹에 등록된 포트에서 실행 중인 애플리케이션이 있는지 확인합니다. Telnet, CURL 또는 netcat과 같은 명령을 실행합니다. 예를 들어, 대상이 포트 80에 등록된 경우 대상 터미널에 로그인하고 다음 명령을 실행합니다.
telnet localhost 80
curl -v http://localhost:80
nc -vz localhost 80
**참고:**Microsoft Windows에서는 대상에서 브라우저를 열고 http://localhost:80을 입력합니다.
관련 정보
보안 그룹을 사용하여 AWS 리소스에 대한 트래픽을 제어
네트워크 ACL을 사용하여 서브넷에 대한 트래픽 제어
클라이언트 IP 보존
VPC 흐름 로그를 사용한 IP 트래픽 로깅