DNS 최적화 · 3 min read · Oct 01, 2025

인프라가 매우 낮은 지역에서 DNS 접근 속도 향상

인프라가 매우 낮은 지역에서 DNS 접근 속도 향상

소개

비용이 많이 드는 위성 링크를 사용하고 있다고 가정해 보겠습니다. 이 링크는 회사의 인터넷 접근을 위한 충분한 대역폭을 제공하기 어렵고, 이 링크에서 최대한 많은 것을 얻기 위해 할 수 있는 모든 것을 하고 싶을 것입니다. 게다가, 때때로 전력 회사로부터 전원을 잃어버려 UPS가 방전될 때까지 오랜 시간이 걸립니다. 링크에서 더 많은 것을 얻기 위해 할 수 있는 몇 가지 방법이 있습니다. 이 기사에서는 하드 디스크에 DNS 요청에 대한 응답을 캐시하여 DNS 요청을 빠르게 처리하는 방법을 살펴보겠습니다. 이후의 DNS 요청은 캐시에서 제공되며, 복사본이 디스크에 있기 때문에 전원 장애나 재부팅 시에도 손실되지 않습니다.

이 문서의 업데이트된 버전은 다음에서 확인할 수 있습니다: www.httpcompression.net.

분석

이게 필요할까요? 자, 확인해 보겠습니다. 리눅스에서 다음 명령어를 입력하세요:

dig www.httpcompression.net

다른 것들 중에서 다음과 같은 결과를 얻었습니다:

;; Query time: 583 msec

몇 초 후에 명령어를 다시 입력하니 다음과 같은 결과가 나왔습니다:

;; Query time: 612 msec

분명히 제 ISP의 DNS 서버는 요청을 미국으로 전달합니다 (저는 서아프리카 가나 아크라에 있으며, 해저 광섬유 케이블 SAT3를 통해 인터넷에 연결되어 있습니다). 첫 번째 요청의 결과가 캐시되지 않은 것 같습니다. 만약 캐시되었다면 두 번째 요청 시점에 만료되었을 것입니다. 확실히, 이러한 환경은 이 설정에 적합한 후보입니다.

방법

저는 우분투 서버에서 작업하고 있습니다. 우리가 사용할 소프트웨어는 pdnsd입니다. 웹사이트에서는 pdnsd에 대해 다음과 같이 설명합니다:

“pdnsd는 영구 캐싱(캐시 내용이 종료 시 하드 디스크에 기록됨)을 지원하는 프록시 DNS 서버로, 접근할 수 없거나 다운된 DNS 서버(예: 다이얼업 네트워킹)에 대처하도록 설계되었습니다. 1.1.0 버전부터 pdnsd는 부정 캐싱을 지원합니다.”

우분투 또는 다른 데비안 기반 배포판에서 다음 명령어를 입력하세요:

apt-get install pdnsd

구성 페이지가 나타나고 세 가지 옵션 “resolvconf / 루트 서버 사용 / 수동”이 표시됩니다. “수동”을 선택하고 설치를 계속 진행했습니다.

기본 설치에는 구성 파일이 있으며, 일부 부분은 주석 처리되어 있습니다. 한 줄은 “//“로 주석 처리되고, 여러 줄은 “/ /“로 주석 처리됩니다. 예:

// 이것은 구성 파일의 주석 처리된 줄입니다.
/*
이것들은 주석 처리된
줄입니다.
*/

선호하는 텍스트 편집기를 사용하여 다음 구성 파일을 편집하세요:

  1. /etc/default/pdnsd START_DAEMON이 다음과 같이 설정되어 있는지 확인하세요: START_DAEMON=yes
  2. /etc/pdnsd.conf 전역 구문에서 다음 설정을 변경할 수 있습니다: server_ip = 127.0.0.1; 이는 pdnsd에 접근할 수 있는 IP입니다. 주소가 기본값인 127.0.0.1로 남아 있으면 서버 자체의 프로그램만 pdnsd 서버에 접근할 수 있습니다. 그러나 다른 서버와 PC가 이 pdnsd 설치를 DNS 서버로 사용하도록 하려면, 클라이언트가 사용할 서버의 적절한 IP 주소로 변경해야 합니다. DNS 서버를 설정하기 위해 서버 구문을 사용하여 pdnsd가 도메인 이름을 해결하기 위해 참조할 DNS 서버를 설정합니다. 기본적으로 주석 처리된 두 개의 서버 구문이 있습니다. opendns 서버는 매우 신뢰할 수 있고 인기가 있으므로 사용해 볼 수 있습니다: server { label="opendns"; ip = 208.67.220.220,208.67.222.222; } 서버 구문이 주석 처리되지 않았는지 확인하세요. ISP에 신뢰할 수 있는 DNS 서버가 있다면 대신 사용할 수 있습니다. 가능한 한 루트 서버를 아껴주세요.
  3. /etc/resolv.conf 이 파일에는 서버의 프로그램(예: squid, apache)이 일반적으로 이름 해석을 위해 참조할 DNS 서버가 포함되어 있습니다. 이제 방금 설치한 로컬 pdnsd 서버를 참조하려고 하므로 루프백 인터페이스(lo)의 IP 주소인 127.0.0.1을 입력합니다. 이 파일에는 이 항목만 있어야 합니다. 127.0.0.1

테스트 및 결론

이제 pdnsd 서버를 시작하세요:

/etc/init.d/pdnsd start

이제 다음 명령어를 입력하고 응답에서 Query time:을 확인하여 얼마나 잘 작동하는지 확인하세요:

dig www.httpcompression.net
;  DiG 9.4.2-P2  www.httpcompression.net
;; Query time: 3323 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Mon Nov  3 20:02:37 2008
;; MSG SIZE  rcvd: 71

잠시 후 명령어를 다시 입력하세요:

dig www.httpcompression.net
;  DiG 9.4.2-P2  www.httpcompression.net
;; Query time: 1 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Mon Nov  3 20:03:07 2008
;; MSG SIZE  rcvd: 71

위의 두 결과에서 첫 번째 쿼리는 3323 msec가 걸렸고, 두 번째는 30초 후에 1 msec만 걸렸습니다. 이제 서버를 재부팅한 후:

dig www.httpcompression.net
;; Query time: 3 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Mon Nov  3 20:06:38 2008
;; MSG SIZE  rcvd: 71

재부팅 후 쿼리는 3ms만 걸렸습니다. 캐시를 잃지 않았습니다. 매뉴얼을 읽고 상황에 맞게 일부 설정을 변경할 수 있습니다. 이러한 설정 중 일부는 다음과 같습니다:

  1. min_ttl: 캐시된 응답이 유지되어야 하는 기본 최소 시간은 15분입니다. 상위 서버에 연락하는 빈도를 줄이기 위해 이 시간을 늘릴 수 있습니다. 부작용으로, 사이트의 주소가 변경되면 새로운 주소를 위해 상위 서버에 연락하는 데 시간이 걸릴 것입니다. 최소 시간이 충분히 길지 않으면 장기간의 전원 장애 후 캐시를 잃게 됩니다.
  2. perm_cache: 이는 캐시를 위한 디스크 공간의 크기입니다. 네트워크의 트래픽에 따라 최소한 일주일의 데이터를 편안하게 저장할 수 있는 값으로 늘릴 수 있습니다. 일정 기간 동안 캐시 파일의 크기를 모니터링하여 적절한 크기를 파악할 수 있습니다.
Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.