주 제 : DNS TTL 값의 이해
작성자 : 김마현. mail : mapoo@ㄴㅔㅇㅣ트.컴, web : http://mapoo.kr
최초작성일 : 2012-03-27, SerialNo : 20120327A51
< 목 차 >
> 시작말
> 1. TTL 값
> 2. 장애없이 DNS서버 IP 변경하기
> 3. TTL 값의 적정선
> 4. 필자가 운영중인 DDNS 서버 운영 상황
> 맺음말
n 시작말 :
DNS 또는 DDNS 서버 운영시 알아두면 설정 변경 및 장애에 대한 대처능력이 향상될 수 있다.
1. TTL 값
1) SOA RR 영역과 호스트 영역의 TTL 값의 차이점
예를들어 sample.com 도메인을 가지고 있다고 치자.
SOA 영역에서 $TTL 값은 해당 sample.com 도메인의 TTL 값이다.
설정 예)
$ORIGIN . $TTL 300 ; 5 minutes sample.com IN SOA ns.test.net. dtpz.naver.com. ( 2 ; serial 3600 ; refresh (1 hour) 900 ; retry (15 minutes) 604800 ; expire (1 week) 300 ; minimum (5 minutes) ) NS ns.test.net. NS ns2.test.net. A 121.160.51.218 $ORIGIN sample.com. $TTL 300 ; 5 minutes test A 211.207.52.11 $TTL 20 ; 20 seconds test2 A 211.207.52.13 $TTL 10 ; 10 seconds test3 A 211.207.52.17 test4 A 211.207.52.18 $TTL 300 ; 5 minutes www CNAME sample.com. |
위 예에서 보면 맨 윗줄의 $ORIGIN의 $TTL 300은 sample.com에 대한 TTL 값이다.
- minimum 값 부분도 300으로 동일하게 맞춰야 된다.
test2 윗 줄의 $TTL 20은 test2.sample.com에 대한 TTL 값이다.
2) 차이점에 따른 작동 방식
예로 test5.sample.com을 nsupdate로 추가를 하면 test5.sample.com은 TTL 30이 적용되어서 캐쉬 DNS에게 전달이 된다.
그리고서 test5.sample.com을 지우게 되면 300초(5분) 동안 test5.sample.com에 대해 캐쉬 DNS에 남게된다. 따라서 300초 안에는 다시 test5.sample.com을 도메인 포워딩을 맘대로 핸들링 할 수 없다. 아래 예와 같다.
[root@CentOS47-VM ~]# /usr/bin/nsupdate -d -y rndc-key:akWEdj453A3SJDAKSJDAA5== Creating key… namefromtext keycreate > server 14.2.5.23 > update add test5.sample.com 30 A 215.25.33.20 > update delete test5.sample.com A |
하지만 아래와 같이 update(변경)하는 경우엔 SOA RR TTL 300을 적용받지 않고 TTL 30을 적용 받는다.
즉, 지우고 삽입하는(즉시업데이트) 경우에 해당된다.
[root@CentOS47-VM ~]# /usr/bin/nsupdate -d -y rndc-key:akWEdj453A3SJDAKSJDAA5== Creating key… namefromtext keycreate > server 14.2.5.23 > update delete test5.sample.com A > update add test5.sample.com 30 A 215.25.45.23 |
만약, 지우고 update한 다음 다시 add 후 update를 해도 곧바로 적용되게 하려면 nFile DDNS 서버처럼 SOA RR TTL 값을 30으로 운영하면 된다.
2. 장애없이 DNS서버 IP 변경하기
1) sample.com 의 1차 DNS서버의 IP변경
IP 변경시 기존의 zone파일 내용에서 TTL 값이 SOA RR TTL : 값이 86400 이라면 24시간 동안 장애가 발생 될 수 있다.
따라서 1차 네임서버 IP를 변경하기 최소 3일 전에 SOA RR TTL 값을 300 이하로 바꿔 놓는다.
또한 2차 호스트들의 TTL 값도 300 이하로 모두 바꾸어 놓는다. – 2차 호스트에 대해 TTL 값을 따로 정한게 없으면 SOA RR TTL 값만 변경한다.
바꾸고서 sample.com.zone파일의 serial 값 올리고 named 데몬 restart
TTL값이 의미하는게 무엇인지 알면 DNS 서버의 IP변경으로 인한 장애를 최소화 할 수 있다.
- 2차, 3차 네임서버 IP 변경도 1차 변경 후 안정화 되면 같은 방법으로 시행한다.
2) IP 변경 후 TTL 값 되돌리기
특별히 문제가 될게 없으면 TTL 값을 변경하지 않아도 된다. 참고로 naver.com도 TTL 300으로 운영중이다.
만약 바꿔야 할 경우엔 sample.com.zone파일의 TTL 원래값으로 변경 후 serial 값 올리고 named 데몬 restart
3. TTL 값의 적정선
1) DDNS 운영시
300 (5분)이 권장 값임.
2) 일반적인 DNS 운영시
14400 (4시간) ~ 86400 (1일)이 권장 값임.
3) TTL 값이 너무 작을 경우
장점 : DNS 레코드 값을 변경했을 때 캐쉬 DNS에 빠르게 전달된다.
단점 : 캐쉬 DNS에 저장된 정보가 빨리 사라지므로 DNS장애 발생시 빠른 장애로 이어진다.
또한 해당 도메인의 방문자는 DNS 쿼리의 반응속도가 느려질 수 있으므로 웹사이트 접속등이 다소 느려질 수 있다.
적용대상 : DDNS 서비스 – 단, DNS서버의 안정성(서버 및 회선)이 보장 되었을 때 권장된다.
4) TTL 값이 너무 클 경우
장점 : DNS 서버 장애 발생시 장애로 이어지는 속도가 느리다.
단점 : 캐쉬 DNS에 저장된 정보가 늦게 DNS 레코드 값을 변경했을 때 캐쉬 DNS에 늦게 적용된다.
적용대상 : 고정 IP를 사용하는 서버를 대상으로 DNS 포워딩서비스 – 단, IP의 잦은 변경이 있으면 안된다.
4. 필자가 운영중인 DDNS 서버 운영 상황
1) 작동원리
DDNS 클라이언트는 1분에 한번씩 자신의 wan IP를 확인한다.
IP가 바뀔 시 nsupdate를 통해 ns.test.net dns서버에게 update 명령어를 날린다.
2) TTL 값 최소화
기본적으로 sample.com 의 SOA RR TTL 값은 30이며, 호스트(예 - test.sample.com)의 TTL 값은 10이다.
따라서 사용자가 거의 느낄새도 없이 빠른 업데이트가 가능하다.
n 맺음말 :
DNS서버는 정확한 작동 원리를 이해하고 운영되어야 하며, 아무나 관리를 해서는 안된다.
장애 발생시 내가 운용중인 리커시브 네임서버만으로 장애를 해결하지 못 할 수도 있기 때문이다.
따라서 캐쉬 DNS와의 상호작용 관계를 제대로 이해하고 운영을 해야 DNS 장애를 최소화 할 수 있다.