DNS Zone Transfer (DNS 영역 전송)는 DNS 트랜잭션의 한 유형으로서, 여러 대의 DNS 서버 간에 DNS 데이터베이스를 복제하는데 사용되는 방법입니다. 영역 전송은 전체 전송 (AXFR) 과 증분 전송 (IXFR)하는 2가지 유형이 있습니다.

DNS 레코드를 복제하는데 영역 전송 외에도 여러가지 방법이 있을 수 있습니다. 단순히 수작업으로 일일이 데이터를 맞춰주는 방법도 있고, NFS를 이용해서 같은 파일을 공유하는 방법도 있으며, 최근엔 SQL 데이터베이스를 뒷단(back-end)으로 쓰는 경우가 많으니 데이터베이스 자체의 복제 기능을 이용하는 방법도 있습니다. 영역 전송은 예전엔 많이 쓰였으나 지금은 다른 데이터베이스 복제 방식에 밀려서 점점 역사의 뒷편으로 사라지고 있는 복제 방식입니다.

원래 DNS 쿼리는 UDP 53번 포트를 이용하지만, 영역 전송은 TCP 53번 포트를 이용합니다. 초기에 슬레이브 서버를 셋업하고 나면, 마스터 서버에게 AXFR 요청을 보내어 전체 영역 정보을 전송 받습니다. SOA (start of authority) 리소스 레코드 속성에는 시리얼 번호가 써있는데, 이것이 버전처럼 사용됩니다.

슬레이브 서버에서 SOA의 리프레시 속성 값만큼 시간이 지나고 나면, 마스터 서버에게 영역 상태 정보를 요청하는 SOA 쿼리를 보냅니다. 마스터 서버는 SOA 레코드를 응답으로 전송하는데, 여기에 역시 시리얼 번호가 포함되어 있습니다. (네임서버에 따라 다르지만 BIND 같은 경우 레코드 변경이 있을 때마다 시리얼 번호를 직접 손으로 고쳐야 하기 때문에 여기서도 실수하는 경우가 상당히 많습니다.)

슬레이브 서버는 시리얼 번호를 대조해보고 만약 변경된 것이 있으면 IXFR 요청을 보내는데, 마스터 서버는 현재 슬레이브가 가진 시리얼 값과 마스터 서버가 가진 시리얼 값 사이의 기간동안 일어난 변경 사항을 슬레이브 서버에게 전송해줍니다. 이렇게 해서 영역 전송이 이루어지게 되는 것입니다.

그런데 영역 전송 자체가 보안 문제가 될 수 있습니다. 적절히 접근 제한을 걸어놓지 않으면, 사내의 중요 서버에 대한 DNS 별칭과 IP가 쉽게 노출될 수 있습니다. 이것은 아무나 회사 전직원의 전화번호부를 얻을 수 있는 것과 같은 상황입니다. 침입자는 어렵게 네트워크를 헤집고 다니면서 어디에 원하는 정보가 있는지 찾을 필요도 없이, 영역 전송을 받아서 서버 목록을 훑어보는 작업만으로도 공격 대상을 쉽게 정할 수 있습니다.

따라서 복제 자체가 필요 없는 경우에는 반드시 영역 전송 기능을 비활성화 하고, 꼭 필요한 경우에는 최소한 접근 가능한 IP 목록을 설정하여 접근 통제를 실현해야 합니다. BIND 네임 서버를 사용하는 경우 allow-transfer 설정을 통해 접근 가능한 네트워크 대역 (CIDR 포맷)이나 IP를 지정할 수 있습니다. IP를 직접 쓰는 것 외에도, 필요 없는 경우에는 none, 아무 IP나 열어줘도 괜찮은 경우는 any, 로컬에서만 가능하도록 할 경우는 localhost, 네임서버와 직접 연결된 호스트만 접근 가능하도록 할 경우는 localnets를 설정할 수 있습니다. 이 옵션은 전역적으로 설정할 수도 있고, 영역 별로 설정할 수도 있습니다. 예를 들면 아래와 같이 설정할 수 있습니다.

options {
allow-transfer { none; };
};

zone "nchovy.kr" {
type master;
file "nchovy.zone";
allow-transfer { 222.122.43.40; };
}

국내에서 네트워크 관리자들이 가장 흔하게 실수하는 유형으로는 마스터 서버에서는 접근 제어를 제대로 걸어놓고, 막상 슬레이브 서버에서 접근 제어를 하지 않는 경우라고 합니다. 슬레이브 서버에서 다시 복제하는 경우는 거의 없을테니 반드시 allow-transfer를 none으로 해주어야 될 것입니다.

이 외에도 BIND9로 가면서 DNS Transaction Signatures (TSIG) 지원 기능이 추가되었습니다. 공유 비밀키를 걸어놓고 MD5 해시를 이용해서 안전한 복제를 구현한 것이니 DNS 보안을 더 강화하려는 경우 TSIG을 사용해보시기 바랍니다.

마지막으로, 영역 전송을 하는 과정에서 수 M 정도의 데이터 전송이 일어날 수 있기 때문에 DNS를 대상으로 많은 양의 트래픽을 일으켜서 서비스 거부 공격(DoS)을 할 수 있으니 굳이 접근 제어가 필요하지 않은 경우라도 접근 가능한 IP를 제한하시길 권장합니다.

아래 한국인터넷진흥원(NIDA)의 DNSSEC 사이트도 참고하세요.
http://dnssec.nida.or.kr/