Problem
처음엔 서비스 응답 시간 타임아웃이 발생했다고 들어온다.
보통은 소켓 연결의 타임아웃이 발생하는 경우고, 분석 과정중에서 DNS 쿼리 시 타임아웃이 발생한다고 확인 요청이 들어왔다.
도메인
hello.domain.com
측정 방식
다른 외부사에서 자신들이 사용하는 네임 서버에 10초에 한번씩 쿼리를 날려 5초이상 수행 시 에러로 간주하도록 하여 측정했다고한다.
DNS Query Flow
KT DNS로 질의 시, DNS서버에 캐시를 사용하지 않는다면
KT DNS질의 → 최상위 기간(com)확인 → .com서버 요청(domain.com)확인 → IBI (도메인 등록기관) → 응답 → 회신
이 순서로 질의하는데 nslookup으로 쳐보면 "Non-authoritative answer" 의 문구를 본적이 있을 것이다.
자신이 등록한 도메인 등록기관의 네임서버가 아닌 경우 이렇게 나온다고 한다.
만약 권한이 있는 네임서버를 모른다면 아래와 같이 조회하면된다.
nslookup -type ns hello.domain.com
DNS 질의 응답 시간 체크
아래 스크립트를 이용해서 특정 도메인을 총 4개의 DNS로 요청하여 5초이상 걸리는 건에 대해서만 로그를 찍도록 만들었다.
#!/bin/sh
log_file="/webstore/logs/DNS_CHECK/dns_query_log.txt"
threshold=5 # 초과 시간(초)
while true; do
# 도메인 및 DNS 서버 설정
domain="hello.domain.com"
dns_servers=("210.207.102.134" "210.207.102.147" "168.126.63.1" "8.8.8.8")
for dns_server in "${dns_servers[@]}"; do
# nslookup을 사용하여 응답 시간 측정
result=$( { time -p nslookup "$domain" "$dns_server"; } 2>&1 | grep real | awk '{print $2}' )
# 응답 시간이 threshold보다 큰 경우에만 기록
if (( $(echo "$result > $threshold" | bc -l) )); then
echo "$(date +"%Y-%m-%d %H:%M:%S") - DNS Server: $dns_server, Response Time: $result seconds" >> "$log_file"
fi
done
# 10초 대기
sleep 10
done
파일을 백그라운드에서 실행
nohup ./dns_oldtime.sh > /dev/null 2>&1 &
실제 결과적으로 IBI 서버에서 10~20초까지도 늦게 보내주는 결과가 돌아왔다.
IBI업체를 사용중에 있는데 네임서버를 다른 네임서버로 사용할수가 없다.
그러다보니 네임서버도 IBI를 강제적으로 사용하고 있었고 내부 DNS서버도 없다...
DNS Query가 느려진 이유
위에서 설명한 것에 정답이있다.
DNS Query를 보냈을 때 사람마다 DNS서버를 각각 다른곳을 사용한다.
근데 인증되지 않은, 즉 KT, SK DNS에 요청 시 이전 캐시가 남아있다면 보내겠지만 그렇지 않은 경우 도메인의 공급업체(IBI)를 찾아가서 그 네임서버에서 질의 후 응답해준다.
근데 그 과정에서 IBI 네임서버가 늦게 응답을 했고 이로인해서 Query가 늦어진것이다.
solution
IBI에서 네임서버를 다른곳을 사용하는것이 안된다면 일단 도메인 공급업체자체를 옮겨야했다.
도메인 회사마다 도메인 이관을 지원해주지만 레코드는 직접옮겨야하며 그 과정에서 IBI에서 도메인 이관과 동시에 네임서버 사용이 불가능하다면 이는 서비스에 문제가 생길 수 있다.
그래서 아래와 같이 진행한다.
- 도메인 이관 절차에 따라 진행하되, 현재 사용중인 도메인 업체에게 네임서버를 도메인 이관 뒤에도 사용 가능 여부를 확인한다.
- 가능여부가 확인되었으면 IBI에서 이관절차에 따라 인증코드를 받아 이관하는 곳의 업체의 페이지에 들어가 인증코드를 입력한다.
- 기다린다...!
- 이관과 동시에 네임서버를 IBI로 잡는다.
- 이관한 업체 레코드에 이전에 사용했던 기타 레코드들을 입력해준다.
- 그후에 네임서버를 이관한 업체의 네임서버로 변경한다.
@ 추가 내용
아무래도 상용서비스에 대한 도메인을 이전하기 때문에 많이 부담되긴했다.
근데 생각보다 정말 별 탈 없이 진행이 완료되었다.
도메인이 이전되고나서 DNS서버를 이전 DNS서버를 보고있었고 하루 유지가 되기때문에 크게 문제는 없었다.
하지만 환경에 따라 고려해야할 점들이 많으니 이러면 어떻게하지? 라는 의문을 가지고 항상 의심하는게 좋을 것 같다.
'Linux' 카테고리의 다른 글
SSL 인증서 에러(No subject alternative DNS name matching) (0) | 2024.02.22 |
---|---|
[테라폼] 리소스 구성 및 속성 참조 (0) | 2024.02.16 |
프로메테우스(Prometheus), 그라파나(Grafana)를 Docker Compose로 설치하기 (0) | 2024.02.08 |
NGINX SSL 인증서 등록 (2) | 2024.02.08 |
tomcat 내 SecureRandom Error, [SHA1PRNG] (0) | 2023.11.23 |