[SULINUX 강좌#11] DNS서버 운영하기
작성자 정보
- 관리자 작성
- 작성일
컨텐츠 정보
- 3,664 조회
- 0 추천
- 목록
본문
[SULINUX 강좌#11] DNS서버 운영하기
DNS서버
internet의 전신이라 할 수 있는 ARPAnet에 연결된 모든 호스트들에 대한 이름과 주소간의 매핑정보는 HOSTS.TXT라는 파일을 통해 관리 되었습니다. 그러나 ARPAnet의 호스트수가 늘어남에 따라 HOSTS.TXT파일 크기와 각 호스트마다 HOSTS.TXT 파일을 갱신하기 위한 트래픽 발생도 증가하였습니다. 또한 호스트이름이 중복될 수도 있었으며 HOSTS.TXT 파일 정보가 각 호스트마다 갱신되는 동안 변경되거나 추가되기도 하였습니다. 이러한 문제점을 해결하기 위해 DNS 시스템을 고안하게 되었습니다.
DNS(Domain Name Server)는 도메인이름에 대한 IP주소를 알려 주거나 혹은 그 반대로 IP주소에 대한 도메인이름을 알려 주는 시스템입니다.
DNS는 계층적이며 직관적인 구성을 이루고 있습니다.
인터넷상의 도메인은 정해진 고유체계가 있으며 모든 도메인은 역트리구조로 계층적 구조를 지니고 있습니다. 1단계 도메인은 최상위 도메인이라고도 하며 대표적으로 4가지 종류의 1단계 도메인이 있습니다.
gTLD(generic Top Level Domain) : 전세계 누구나 등록가능한 도메인(.com, .net 등)
nTLD(national Top Level Domain) : 국가코드에 의한 국가별 도메인(.kr, .jp, .tw등)
iTLD(international Top Level Domain) : 국제기구 등에서 사용할 수 있는 도메인(.int)
sTLD(special Top Level Domain) : 미국내 특정기관이 사용할 수 있는 도메인(.gov, mil)
DNS 동작구조
먼저 사용자 pc에서 www.sulinux.net 도메인명을 입력하게 되면 컴퓨터는 아이피로 인식을 하기 때문에 ① DNS에 아이피를 질의하게 됩니다. 그러면 ② 제일 먼저 root 네임서버에 www.sulinux.net 의 아이피를 질의합니다. 그러면 ③ root 네임서버는 .net 네임서버를 참고하라고 일러 줍니다. ④ .net 네임서버에 질의를 하게 되면 ⑤ sulinux.net 네임서버를 참고하라고 일러 주게 되고 ⑥ sulinux.net 네임서버에서 www.sulinux.net 의 아이피를 질의를 하게 되면 ⑦ 질의한 DNS서버에 www.sulinux.net 의 IP 정보를 주게 됩니다. ⑧ 그러면 DNS는 사용자 PC에 www.sulinux.net 의 IP를 알려 주게 됩니다.
시작 및 종료 , 재시작
BIND Server는 항상 실행하고 있는 서버 프로그램입니다. SULinux는 콘솔에서 아래 명령어로 BIND를 시작, 재시작, 종료 할 수 있습니다.
~]# systemctl start named ~]# systemctl restart named ~]# systemctl stop named |
설정 및 운영
(1) DNS 도메인 관리
DNS서버에 도메인을 추가하려면, named.conf 파일에서 형식에 맞게 만들어 주어야 하며, zone 파일 또한 형식에 맞게 만들어 주어야 합니다. 도메인을 추가할 일이 많으면 지속적인 반복 작업을 해야 하며, 도메인을 추가할 일이 적으면 도메인을 설정하기 위해 서적을 뒤지거나, 인터넷을 뒤져 설정할 것입니다. SSU의 su_domain프로그램을 이용하면 아주 쉽고 빠르게 도메인을 생성할 수 있습니다.
참 고 |
|
BIND CHROOT
최근 배포판의 DNS서버인 Bind는 보안을 위하여 chroot를 적용하여 배포합니다. chroot는 bind가 실행되는 동안은 /var/named/chroot 디렉토를 / 디렉토리로 인식시켜 작동하게 하는 기능입니다. SSU의 su_domain은 chroot 적용여부와 상관없이 작동하며, 만약 적용되어 있다면, 자동으로 zone파일을 /var/named/chroot/var/named/ 디렉토리에 생성하고, /var/named/ 디렉토리에 심볼릭링크를 생성합니다. |
가. DNS 도메인 설정
DNS서버 도메인 관리 프로그램을 처음 실행하면 다음과 같은 경고 메시지가 나타납니다.
[root@sulinux sulinux]# su_domain
대표 네임서버 도메인을 설정 하세요 !!
설정방법 : /root/bin/conf/su_util.cfg 파일에서 수정 |
DNS 도메인 설정 중 zone 파일에 DNS도메인 및 관리자 항목이 들어가게 됩니다. 이 DNS도메인 및 관리자 정보를 입력하기 위해서는 다음 설정파일을 편집합니다.
/root/bin/conf/su_util.cfg 설정파일을 편집기로 열어 수정 합니다.
################### dns(bind 9) 관련 셋팅 ###################### # dns 서버 도메인 # 예) dns_domain = ns.superuser.co.kr dns_domain = ns.YOUR-DNS-DOMAIN
## dns 서버 관리자 메일주소 @ ==> . 으로 치환 #예) dns_admin_mail = root.superuser.co.kr dns_admin_mail = root.YOUR-DNS-DOMAIN |
위 설정파일에서 “YOUR-DNS-DOMAIN”부분을 DNS도메인으로 변경하시기 바랍니다.
나. DNS 도메인 생성
su_domain명령어로 쉽게 named.conf 파일설정 및 zone파일을 생성할 수 있습니다.
[root@sulinux conf]# su_domain --add 도메인 아이피 |
위 명령어에서 도메인은 www를 제거한 도메인입니다. su_domain은 자동으로 www에 대한 설정을 zone파일에 하게 됩니다.
[root@sulinux sulinux]# su_domain --add sulinux.net 192.168.0.1 도메인 추가 name 서버 RELOAD 중.... named를 다시 읽어오는 중: [ OK ] |
위와 같이 입력하면 sulinux.net에 대한 도메인 설정이, named.conf 파일에 생성되며, /var/named/sulinux.net.zone 파일이 생성되게 됩니다. 다음과 같이 설정된 내역을 확인 하였습니다.
[root@sulinux sulinux]# cat /etc/named.conf | grep sulinux zone "sulinux.net" IN {type master; file "sulinux.net.zone"; allow-update { none; }; }; [root@sulinux sulinux]# cat /var/named/sulinux.net.zone $TTL 43200 @ IN SOA ns.sulinux.net. root.sulinux.net. ( 2014050417 ; 시리얼값 (년월일시간)으로 대부분 셋팅 3H ; 2차 네임서버가 1차 네임서버에 접속하는 시간 15M ; 접속 실패시 다시 시도할 시간 간격 1W ; 1차 네임서버에서 데이터가 없다면 1주 이후에 지워진다. 1D ) ; 위에서 설정한 TTL 값과 같은 의미 ; IN NS ns.sulinux.net. ; 도메인을 소유한 DNS의 도메인 IN MX 10 mail.sulinux.net. ; 메일을 보낼 도메인 또는 주소 IN TXT "v=spf1 ip4:192.168.0.1 ~all" IN A 192.168.0.1 ; 도메인이 찾아갈 IP 주소 www IN A 192.168.0.1 ; www.도메인이 찾아갈 IP주소 mail IN A 192.168.0.1 ; 메일서버 아이피 * IN A 192.168.0.1 ; 모든 서브 도메인이 찾아갈 서버 ip 주소 |
위 내역은 su_domain에 의해서 자동 생성된 설정 내용입니다. zone 파일에 대해 각 항목은 알아보기 쉽게 한글로 주석처리 되어 생성됩니다.
다. DNS 도메인 내용 수정
su_domain명령어는 쉽게 특정 도메인의 zone파일을 수정할 수 있게 도와줍니다.
[root@sulinux conf]# su_domain --mod 도메인 |
위와 같이 입력하면, 도메인에 해당되는 zone파일을 열어 vi편집기로 열어 주게 됩니다. su_domain의 zone파일 수정기능을 사용하기 위해서는 vi 명령어 사용법을 먼저 학습하시기 바랍니다. 해당 내용을 수정하면 자동으로 DNS서버를 재 시작됩니다.
라. DNS 도메인 삭제
su_domain명령어를 이용하여 설정한 도메인을 쉽게 삭제 할 수 있습니다.
[root@sulinux conf]# su_domain --del 도메인 |
위와 같이 입력하면, 도메인에 해당되는 zone파일을 삭제합니다. 그리고, named.conf 파일을 열어 해당 도메인의 설정이 위치한 곳으로 커서를 자동 이동시킵니다. 한번 더 확인하고 "dd"를 눌러 해당 라인을 삭제합니다. 그리고는 “<ESC>"키를 누르고 ”:wq"를 눌러 설정파일을 저장하고, vi 편집기를 빠려 나옵니다. 완벽한 삭제를 위해 자동으로 DNS서버는 재 시작됩니다.
(2) 도메인 서버 설정
bind-chroot 패키지가 설치되면 BIND 서비스는 /var/named/chroot 디렉토리를 통하여 실행이 됩니다. SULinux 는 bind-chroot 패키지가 설치되었으므로 /var/named/chroot 디렉토리 아래에 dev/, etc/, proc/, var 의 디렉토리가 존재합니다.
참 고 |
|
bind-chroot
bind-chroot는 악의적인 사용자로부터 bind를 보호하기 위한 방법입니다. chroot를 적용하게되면, bind가 작동하는 동안은 지정한 경로(/var/named/chroot)가 “/”가 됩니다. 그렇기 때문에 /var/named/chroot이외의 디렉토리를 벗어나지 못하게 됩니다. 이렇게 하므로 bind의 버그를 통하여 침입을 한다고 하여도 지정한 경로(/var/named/chroot)외부로 나갈 수 없게 되어 안전합니다. bind-chroot를 사용하지 않으려면 "rpm -e bind-chroot"로 관련 패키지를 삭제하시기 바랍니다. |
그럼 DNS에 새로운 도메인을 추가해 보도록 하겠습니다.
여기서는 192.168.153.129를 네임서버의 아이피로 지정하였습니다.
① 새로운 도메인이 인터넷상에서 인식되기 위해서는 DNS 세팅 전에 도메인등록대행기관에 도메인을 등록하여야 합니다. 도메인등록대행기관에 도메인을 등록할 때 도메인이 사용할 1차 네임서버와 2차 네임서버를 여기서 세팅할 네임서버(192.168.153.129)로 지정해야 한다는 것입니다.
② 그 다음 /etc/named.conf 파일에 zone 구문을 설정합니다. 마지막 행에 다음과 같은 zone 구문을 추가합니다.
zone "sulinux.net" IN { type master; file "sulinux.net.zone"; allow-update { none; }; }; |
③ 해당 도메인의 zone 파일을 생성합니다.
sulinux.com 도메인에 대한 zone 파일을 /var/named/chroot/var/named/sulinux.net.zone 파일명으로 생성해 줍니다. zone 파일은 아래와 같은 내용으로 입력합니다.
$TTL 86400 @ IN SOA ns.test.com. root.ns.testcom. ( 2014010101 ; Serial 28800 ; Refresh 14400 ; Retry 3600000 ; Expire 86400 ) ; Minimum IN NS 192.168.153.129. IN MX 10 mail.test.com. IN A 192.168.153.129 www IN A 192.168.153.100 mail IN A 192.168.153.100 * IN A 192.168.153.100 |
④ named 데몬을 재시작합니다.
⑤ 마지막으로 설정된 도메인 질의를 테스해 보겠습니다. nslookup 명령어를 통해 질의를 해 보겠습니다.
[root@localhost named]# nslookup > server 192.168.153.129 <= 192.168.153.129 네임서버로 질의하겠다는 명령 Default server: 192.168.153.129 Address: 192.168.153.129#53 > sulinux.net Server: 192.168.153.129 Address: 192.168.153.129#53
Name: sulinux.net Address: 192.168.153.129 > |
이렇게 sulinux.net을 질의하였을 때 IP는 192.168.153.129를 알려 줍니다.
(3) zone 파일의 설정법과 해석
앞서 zone 파일을 생성하여 DNS 서버를 설정을 해 보았습니다. 하나의 zone파일에 모든 도메인에 대한 설정을 셋팅하여 관리할 수도 있으나 하나의 도메인에 하나의 zone파일을 사용하는 것이 관리적으로 합리적인 방법이라 할 수 있습니다.
그럼 zone 파일의 각각의 항목에 대해서 설명하겠습니다.
$TTL
이 값은 minimum(TTL,Time to Live)항목에 설정되어 있는 값과 의미가 같은 것입니다. 즉, sulinux.net 도메인에 대한 정보를 다른 네임서버에서 가져간 다음 네임서버에 얼마나 보관할 것인가를 지정한 것입니다. 즉 sulinux.net.zone 파일의 정보를 다른 서버에서 가져간 후에 그 서버의 캐시(cache)에 얼마나 보관할 것인가에 대한 설정입니다.
@
zone파일 내에서 @는 origin 도메인을 의미하는 것으로서 /etc/named.conf 파일에 설정되어 있는 도메인명(여기서는 sulinux.net)을 의미합니다. 따라서 @기호 대신 sulinux.net 이라는 도메인을 지정해도 되지만 이때에는 sulinux.net. 이라는 도메인의 끝부분에 반드시 .(마침표)를 표시해 주어야 합니다.
SOA
SOA는 “start of authority"의 약어로서 해당 도메인(sulinux.net)에 대해여 여기서 설정한 네임서버가 모든 정보를 가지고 있음을 선언한 것으로 sulinux.net 도메인에 대한 네임서비스의 모든 권한이 여기에 있음을 의미합니다.
Serial
이 부분부터 이하의 Refresh, retry, Expire, Minimum 값들은 모두 secondary 네임서버와 primary 네임서버와의 연동을 어떻게 할 것인가에 대한 설정입니다. 시리얼 값은 정해진 규칙은 없지만 보통 “YYYYMMDDNN"과 같은 형식을 사용합니다. 대부분 도메인설정은 1차 네임서버에서 하고 2차 네임서버는 1차 네임서버의 설정 값을 주기적으로 가져가게 되는데 1차 네임서버의 serial 값을 높혀 주게 되면 2차 네임서버에서 설정이 변경되었음을 인지하고 zone 파일을 새로운 zone파일로 갱신하게 됩니다.
Refresh
2차 네임서버에서는 1차 네임서버의 변경된 값들이 있는가를 주기적으로 체크하게 됩니다. 이때에 체크할 주기를 결정한 값이 refresh입니다.
Retry
2차 네임서버가 1차 네임서로의 접근이 안 될 경우에 2차 네임서버는 계속해서 주기적으로 접근을 시도합니다. 이 때 얼마 만에 한 번씩 접근을 시도할 것인가를 결정하는 값이 Retry입니다.
Expire
특정 도메인의 정보를 가져오기 위해서는 2차 네임서버는 1차 네임서버에 연결을 바로 위에서 설정한 retry 주기마다 한 번씩 지속적으로 연결을 시도하였으나 결국 expire 시간동안 계속해서 연결이 되지 않으면 2차 네임서버는 해당 도메인의 정보가 삭제되었거나 폐기되었다고 판단하고 이후부터는 연결시도를 하지 않습니다.
Minimum
이 값은 다른 말로 TTL 값이라고 합니다. TTL이란 “Time to Live"를 의미하는 것으로 해당 도메인의 정보를 다른 네임서버에서 가져갔을 때에 가져간 도메인정보를 얼마나 보관하고 있을 것인가에 대한 시간 값(초 단위)을 설정해 둔 것입니다.
NS레코드
NS레코드는 해당 도메인의 네임서버를 지정하는 레코드입니다.
IN NS ns.sulinux.net IN NS ns2.sulinux.net |
이 도메인에 대한 1차 네임서버가 ns.sulinux.net 이라는 것과 2차 네임서버가 ns2.sulinux.net 이라는 것을 설정한 것입니다.
A레코드
A레코드는 해당도메인의 실제 IP 주소를 설정하는 레코드입니다.
IN A 192.168.153.129 www IN A 192.168.153.100 mail IN A 192.168.153.100 |
첫 번째 행의 의미는 해당도메인(sulinux.net)의 IP주소가 192.168.153.129라는 것을 의미하고 두 번째 행의 의미는 www.sulinux.net 의 IP주소가 192.168.153.100 이라는 것을 의미합니다.
MX레코드
MX레코드는 "mail exchanger"의 약자로서 해당 도메인의 메일서버로 사용하게 될 메일서버를 지정한 것입니다. 주의하실 것은 MX레코드에서는 IP주소로 지정해도 되지만 가능하면 도메인명으로 지정하는 것이 좋습니다.
IN MX 10 mail.sulinux.net. IN MX 20 mail2.sulinux.net. IN A 192.168.153.129 www IN A 192.168.153.100 |
MX 다음의 숫자는 메일처리의 우선순위를 명시한 것입니다. mail.sulinux.net 메일서버가 먼저 처리를 하는데 응답이 없으면 mail2.sulinux.net 메일서버가 처리를 하게 됩니다. 숫자가 낮은 메일서버에서 먼저 처리하도록 되어 있습니다.
CNAME레코드
CNAME 레코드는 “Canonical NAME"의 약어로서 특정도메인에 대한 서브도메인을 사용하기 위한 레코드입니다.
www IN A 192.168.153.129 ftp IN CNAME www |
위의 예에서 첫 번째 행은 A 레코드에 대한 것으로 www.sulinux.net 의 IP주소가 192.168.153.129 라는 것을 지정한 것이며 두 번째 행에서는 ftp라는 이름을 www라는 별칭으로 사용할 수 있도록 설정한 것입니다. 즉, www라는 호스트명과 ftp라는 호스트명이 동일한 IP주소로 매핑 된다는 의미입니다.
관련자료
-
이전
-
다음