증상

당사 API에서 A사 API 호출 시에 정상 응답이 아닌, 404에러 혹은 Squid html page 리턴 됨
* 당사 API호출구조는 Outbound Proxy(Squid)를 통해서 ACL 제어. 방화벽 정책은 정상적으로 열려있음.


Tcpdump를 통한 와이어샤크 체크시 API
통신 확인

API(특정 REST API CALL)-> Outbound Proxy(Squid) 연결 -> 내부 CacheDNS에 질의->AAAA 레코드질의-> 응답 값 못 받음-> AAAA레코드 질의 완료(질의 완료까지 지연현상발생) ->
질의 하는동안 프로세스 connection timeout 되면 정상 응답 안주는것으로 보여짐.
*ipv4로 질의하여 캐싱 되는 순간은 빨라짐. 캐쉬 만료되면 동일하게 지연 현상 발생.

 

A사 API CALL 시간

API CALL시에 6초정도 지연 현상 발생

 

A사 API CALL 진행시 상단 보안장비 패킷 캡쳐

*DNS 레코드 조회 시 AAAA레코드가 먼저 시도되고 그 다음 A레코드가 시도된다. AAAA레코드에 대한 응답이 수신될때까지 A레코드 쿼리가 수행 되지 않음.

캡쳐된 내용을 보면, 해당 REST API 도메인의 네임서버 4대에 AAAA레코드를 질의한 후에 A레코드를 질의 후

API간 정상 통신(3HandShake)이 이뤄지는걸 볼 수 있다.

 

조치 방안

원인은 알수없으나  A사 REST API의 경우 ipv6질의를 우선적으로한다. 
(우선 질의 하나, 정상 응답을 받진 못함)
내부적인 해결을 위해선, 당사 RESTIAPI CALL 프로세스에서 DNS Query ipv6를 질의 안하게 끔 조치해야함.
*ipv6/ipv4 둘다 있을 경우 ipv6를 먼저 질의하기에(ietf-rfc3484) 질의 자체를 안하게끔조치

 

즉 호출하는 tomcatsquid(proxy)에 조치.

1. tomcat :
Java socket통신시에 ipv4통신만 되게끔 환경변수를 적용하여 ipv6질의 안하게끔 조치

-Djava.net.referIPv4Stack=true

2. squid :
기본 yum설치의 경우 disable이 안되었기때문에, ipv6 질의 안하게 끔 컴파일로 재설치
./configure --prefix=/home/squid --disable-ipv6 
*재설치 안하고 ipv4를 우선 질의 하는 squid 옵션 dns_v4_first on이라는 옵션을 활성화 하였으나,  동일 현상 발현

 

**참고사항

일반적으로 어플리케이션은 getaddrinfo() 등의 함수로부터 리턴받은 IP 주소 목록 중 첫 번째 IP 주소로 접속을 시도한 후 접속에 실패하면 다음의 IP 주소를 사용하여 접속을 시도합니다.
따라서 IPv4와 IPv6 주소가 하나씩 있는 경우, IPv6 주소로 먼저 접속을 시도하고, 이에 실패하게 되면, IPv4 주소로 접속을 시도합니다.
만일 DNS의 특정 도메인 네임에 존재하지 않는 IPv6 주소가 설정되어 있는 경우,
어플리케이션에서는 접속 시도와 그 timeout에 따르는 시간 지연이 발생한 후 IPv4 주소로 접속이 성공함으로써, 사용자는 접속이 느린 현상을 경험
하게 됩니다.

 

 

+ Recent posts