MyDNS 설치 · 2 min read · Jan 09, 2026

MySQL 기반 DNS 서버 실행: MyDNS - 3페이지

3 dnscache 설치

MyDNS에 대해 알아야 할 매우 중요한 점은 외부(재귀적) DNS 조회를 지원하지 않는다는 것입니다. 즉, MyDNS는 자신이 권한을 가진 도메인에 대해서만 답변을 제공합니다! 예를 들어 www.google.com과 같은 다른 도메인을 해결하려면 시스템에 dnscache와 같은 DNS 리졸버를 설치해야 하며, 이는 별도의 IP 주소에 설치해야 합니다. DNS 서버(MyDNS)와 DNS 리졸버(dnscache)가 이렇게 분리된 이유를 알아보려면 여기를 확인하세요: http://cr.yp.to/djbdns/separation.html

일반적으로 ISP는 집이나 사무실에서 인터넷 연결에 사용하는 네임 서버의 IP 주소를 제공합니다. 이를 통해 작업 스테이션은 www.google.com과 같은 이름을 해결할 수 있습니다. 네임 서버 IP 주소는 실제로 dnscache와 같은 DNS 리졸버의 IP 주소입니다. 이제 고객에게 자신의 네임 서버 IP 주소를 제공하려면 DNS 리졸버를 설정하고 고객에게 해당 DNS 리졸버의 IP 주소를 제공해야 합니다.

이제 서버에 IP 주소가 하나만 있는 경우, “좋아, MyDNS를 127.0.0.1에 바인딩하고 dnscache를 내 공용 IP 주소에 바인딩하여 이 병목 현상을 우회하겠다.”라고 말할 수 있습니다. 이것이 나쁜 아이디어인 이유를 알아보려면 여기를 읽어보세요: http://www.fefe.de/djbdns/#sameip

시스템에 DNS 리졸버를 설치하고 싶지 않다면 이 섹션을 건너뛸 수 있습니다.

이제 두 개의 공용 IP 주소인 1.2.3.41.2.3.5가 있다고 가정하고, MyDNS가 1.2.3.4에서 수신 대기하고 dnscache1.2.3.5에서 수신 대기하도록 하려면 다음 단계를 따라 dnscache를 설치하세요:

groupadd dns
useradd -M -g dns -s /sbin/nologin -c DNS-Cache-User dnscache
useradd -M -g dns -s /sbin/nologin -c TinyDNS-User tinydns
useradd -M -g dns -s /sbin/nologin -c DNSlog-User dnslog

dnscache 초기화 스크립트를 생성합니다:

cd /usr/local/sbin
wget http://www.servershak.com/dns/dnsctl
chmod 700 dnsctl
ln -s /usr/local/sbin/dnsctl /etc/init.d/dnsctl

시스템 시작 링크를 생성합니다:

Debian에서:

update-rc.d dnsctl defaults

Fedora 및 RedHat에서:

chkconfig –levels 235 dnsctl on

그런 다음 dnscache를 컴파일하고 설치합니다:

cd /usr/local/src
wget http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz
tar -zxvf ucspi-tcp-0.88.tar.gz
cd ucspi-tcp-0.88
make
make setup check

mkdir -p /var/package
chmod 1755 /var/package
cd /var/package
wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
gunzip daemontools-0.76.tar
tar -xpf daemontools-0.76.tar
rm daemontools-0.76.tar
cd /var/package/admin/daemontools-0.76
package/install

cd /usr/local/src
wget http://cr.yp.to/djbdns/djbdns-1.05.tar.gz
tar -xvzf djbdns-1.05.tar.gz
cd djbdns-1.05
make
make setup check

dnscache-conf dnscache dnslog /etc/dnscache 1.2.3.5
ln -s /etc/dnscache /service
touch /etc/dnscache/root/ip/1.2.3

이제 dnscache1.2.3.5에서 수신 대기하고 있습니다. 이제 MyDNS에 1.2.3.4에서만 수신 대기하도록 알려야 합니다. 따라서 /etc/mydns.conf에서 listen 지시어를 변경해야 합니다:

| listen = 1.2.3.4 |

그리고 MyDNS를 재시작합니다:

/etc/init.d/mydns restart

이제 1.2.3.5에서 도메인 이름을 해결하려고 하면 답변을 받을 수 있어야 합니다. 예를 들어 www.google.com을 해결하려면 다음을 실행할 수 있습니다:

dig @1.2.3.5 www.google.com

같은 방식으로 MyDNS가 처리하는 도메인(예: www.somedomain.com)을 해결할 수 있어야 하며, 이번에는 1.2.3.4를 사용하여 조회합니다:

dig @1.2.3.4 www.somedomain.com

4 기본 DNS 서버에서 보조 DNS 서버로 영역 및 레코드 가져오기

기본 DNS 서버와 보조 DNS 서버 모두 MyDNS를 사용하는 경우, 기본 DNS 서버에서 보조 DNS 서버로 데이터를 가져오는 세 가지 방법이 있습니다:

  1. 구식 방법: 영역 전송을 사용할 수 있습니다. 따라서 /etc/mydns.conf에서 allow-axfr = noallow-axfr = yes로 변경하고 기본 DNS 서버에서 MyDNS를 재시작해야 합니다. 또한 전송해야 하는 영역의 soa 테이블의 xfer 열에 보조 DNS 서버의 IP 주소를 지정해야 합니다. 그리고 기본 DNS의 방화벽이 포트 53(TCPUDP)를 차단하지 않도록 해야 합니다.
  2. 기본 DNS와 보조 DNS가 동일한 MySQL 데이터베이스를 사용하는 경우. 이 솔루션의 단점은 MySQL 서버가 실패하면 기본 DNS와 보조 DNS가 동시에 실패한다는 것입니다…
  3. 선호하는 솔루션: MySQL 데이터베이스 복제를 사용하여 기본 DNS에서 보조 DNS로 데이터를 전송합니다. 기본 DNS의 방화벽이 MySQL 포트(일반적으로 3306)를 차단하지 않도록 해야 합니다.

MySQL 복제를 사용하는 것을 추천합니다. 이 설정 방법에 대한 매우 정확한 가이드를 여기에 작성했습니다: https://www.howtoforge.com/mysql_database_replication 그래서 이 주제를 다시 다룰 필요는 없습니다.

링크

Share: X/Twitter LinkedIn

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

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