반응형

 

DNS(Domain Name Server) 란? : https://nirsa.tistory.com/92?category=872350

리눅스 DNS 서버 구축 (1) : https://nirsa.tistory.com/104?category=872350

 

  • DNS 설정 파일 개념 및 위치

이전 설정(/etc/named.conf)을 안하셨다면 위의 1편 링크에서 확인 후 설정 해주세요.

 

  • 2. /var/named.rfc1912.zones

DNS zone 파일을 등록하는 설정 파일 입니다. /etc/named.conf 에서 별도로 디렉토리 경로를 설정한적이 없다면 /var/named 를 기준으로 상대 경로를 사용해 zone 파일을 등록 하게 됩니다.

zone 파일은 기본적으로 아래와 같은 설정을 갖습니다.

# zone 파일 등록 (기본 설정)
zone "도메인명" IN {
    type master;
    file "zone 파일명";
    allow-update { none; };
};


ex)
zone "nirsa.com" IN {
    type master;
    file "nirsa.zone";
    allow-update { none; };
};
한줄씩 설정 설명
zone "nirsa.com" IN { 사용할 도메인명을 등록하고 설정을 시작 합니다.
type master; 어떤 타입으로 설정할지에 대한 내용 입니다. Master & Slave 서버 구축을 하지 않는다면 master로 넣어 주시면 됩니다.
file "nirsa.zone"; 사용될 zone 파일 이름을 작성 해줍니다. 꼭 어떤 이름으로 해야한다는건 없으나, 일반적으로 어떤 도메인에 대한 zone 파일인지 확인을 쉽게 하기 위해 '도메인명' 또는 '도메인명.zone' 형식으로 작성 합니다.
allow-update { none; }; Master & Slave 서버 구성의 Dynamic Update 을 위해 어떤 IP로부터 zone 파일 갱신을 할지에 대한 설정 입니다. Master & Slave 서버 구성일 땐 any보단 Slave 서버의 IP를 적어주는게 보안상 좋으며, Master & Slave 서버 구성이 아닐때엔 none; 으로 기능을 off 시켜줍니다.
}; Zone 파일 등록을 마무리 합니다.

 

  • 3. /var/named/

2번에서는 zone 파일을 사용할 수 있도록 등록 하는 과정을 하였습니다. 이제 /var/named/ 에서 본격적으로 zone 파일을 구성하여 도메인에 대한 정보를 설정 합니다.

/var/named 로 이동하면 named.empty 라는 샘플 파일이 있으니, 2번에서 설정한 zone파일 명으로 복사하여 만들어 줍니다. (ex. cp -p /var/named/named.empty /var/named/nirsa.zone)

특히 zone 파일을 복사하거나 만들 때 권한을 주의 해야 합니다. 기본적으로 DNS 서버 패키지인 bind는 프로세스가 실행 될 때 named 계정으로 동작하기 때문에 named 계정이 zone 파일에 대한 권한이 없을 경우 접근이 불가능하여 사용 불가 합니다. 

 

zone 파일 설정하기 전에 주의해야 할 점이 있습니다. zone 파일에서 도메인명은 항상 마침표(.) 또는 ORIGIN(@)으로 끝나야 합니다. 만약 마침표(.) 또는 ORIGIN(@)이 없을 경우 /var/named/rfc~ 에서 설정했던 도메인명을 불러 옵니다.

마침표(.)는 도메인명의 끝을 의미하고, ORIGIN(@)은 /var/named/rfc~ 에서 설정했던 도메인명을 불러 옵니다. 마침표(.)나 ORIGIN(@) 둘 다 작성하지 않는다면 @와 마찬가지로 /var/named/rfc~ 에서 설정했던 도메인명을 불러 옵니다. 아래 이미지는 rfc파일에서 도메인을 nirsa.com 으로 등록했다는 가정하에 작성된 예시 입니다.

 

아래는 본격적인 zone 파일의 설정 내용 입니다.

위 이미지를 기준으로 좌측에서 순서대로 필드에 대한 설명은 아래 표를 참고 해주세요.

필드 설명
$TTL 3H TTL은 Time To Live 약자로써 이 도메인의 정보를 받아간 DNS 서버에서 어느 시간동안 이 내용을 저장하고 보관할지에 대한 설정 입니다. 초단위로도 설정이 가능하고 굳이 TTL 값을 올려둘 필요가 없기 때문에 600초 정도로만 설정하셔도 무관 합니다. TTL값이 높을수록 후에 도메인 내용을 설정하거나 하게 되면 갱신이 늦어질 수 있습니다.
@ /var/named/rfc~ 에서 설정했던 도메인 명을 의미 합니다. 위에서 설정했던 예시로는 nirsa.com. 을 의미하게 됩니다.
IN 우측의 설정을 시작 합니다.
SOA tart Of Authority의 약자 입니다. zone 파일의 시작을 알리고 설정을 정의 합니다.
@ 이 부분에도 ORIGIN(@)이 오게 됩니다. 이곳은 일반적으로 1차 네임서버를 정의하며 ns1.nirsa.com. 과 같이 사용할 네임서버의 도메인을 정의 합니다.
rname.invalid. 관리자 메일 주소를 설정 합니다. 일반적으로 root.nirsa.com. 과 같이 도메인명 앞에 root. 를 입력 합니다.
0 ; serial zone 파일의 버전을 의미 합니다. 일반적으로 년월일당일버전 으로 작성 되는데, 예를들어 2020년 02월 05월 두번째 수정일 경우 20020502 와 같이 설정 합니다. 버전 관리 또는 slave와의 동기화 과정에서 이 시리얼은 중요하게 사용 됩니다.
1D ; refresh (Master & Slave 서버 구성) Slave 서버가 주기적으로 zone파일을 체크하는 시간을 설정 합니다.
1H ; retry (Master & Savle 서버 구성) refresh에서 zone 파일 체크를 실패할 경우 재시도할 시간을 설정 합니다.
1W ;expire (Master & Slave 서버 구성) Master 서버에서 가져온 Slave 서버의 zone 파일 내용을 얼마나 신용할지에 대한 설정(즉, Zone 파일의 유효기간) 입니다. Master 서버 장애 등의 이유로 통신이 불가능한 상황일 때 여기서 설정된 시간동안 Slave 서버는 Zone 파일의 내용을 신용하여 서비스 합니다. 시간이 지날 경우 파기 합니다. 
3H ; minimum TTL값입니다. 만약 1line 에 TTL이 없을 경우 이 값을 참조 합니다. 일반적으론 1line의 TTL값과 똑같이 설정 합니다.

 

이후는 DNS 레코드에 대한 설정으로 도메인과 유형, IP를 지정하게 됩니다. 문법 형식은 아래와 같으며 우선 순위(priority)는 일반적으로 MX 레코드에 사용되며 가독성을 위해 띄어쓰기로 작성하셔도 상관 없습니다. 

  • [FQDN] tab [IN] tab [record] tab [priority] tab [domain or ip]

* FQDN(Fully Qualified Domain Name) 이란? : FQDN은 호스트명(sub domain 이라고도 함)과 도메인명을 포함한 전체 도메인에 대한 주소 입니다. 호스트명(ex. www)와 도메인명(ex. nirsa.com)의 예시 주소를 합치면 www.nirsa.com. 과 같은 전체 도메인, FQDN이 됩니다.

 

아래 레코드는 일반적으로 많이 사용되거나 보이는것들이며, 이외에도 많은 레코드가 존재 합니다.

레코드 설명
NS Name Server를 지정 합니다.
A 좌측에 작성한 도메인의 IP를 지정 합니다.
AAAA 좌측에 작성한 도메인의 IPv6를 지정 합니다.
CNAME 좌측에 작성한 도메인의 별칭을 지정 합니다. test IN CNAME www 과 같이 사용할 경우 text.nirsa.com. 을 서비스 할 때 www.nirsa.com. 로 이동 됩니다.
MX 메일 서버를 지정 합니다. MX 레코드는 10, 20, 30과 같은 우선순위를 지정 해주며 낮을수록 우선순위가 높습니다.
TXT 도메인에 대한 텍스트 정보를 지정 합니다. SPF, DKIM등과 같은 레코드와 함께 사용되며 일반적으로 SPF와 함께 메일 스푸핑, 스팸을 방지하기 위해 사용합니다.
PTR 역방향 DNS에 사용되는 레코드 입니다. IP주소로 도메인을 찾는데 사용 됩니다.

 

아래와 같이 zone 파일에 작성을 할 수 있으며 작성하는 방법만 다를 뿐 모두 같은 설정이 됩니다. 

이미지를 자세히 보셨다면 '공백 IN A' 또는 '@ IN A' 가 왜 있는지 궁금하실 수 있습니다. 예를들어 네이버를 들어갈때 무조건 www.naver.com 만 입력 해야 할까요? naver.com 만 입력해도 접속이 잘 되는데, '공백 IN A' 또는 '@ IN A'가 이 역할을 해줍니다. 무조건 www를 입력하는것이 아니라, 도메인명만 입력해도 접속 되도록 해줍니다.

만약 이 설정이 안되어 있다면 무조건 www와 같이 서브 도메인을 입력 해주어야 접속이 되고, 도메인명만(ex. naver.com) 입력할 경우 접속이 되지 않습니다.

 

이제 전 최종적으로 아래와 같은 zone 파일이 완성 되었습니다.

 

  • zone 파일 검증 및 서비스 시작

## named.conf 파일 검증
named-checkconf /etc/named.conf

## zone 파일 검증
#named-checkzone [domain] [zone file]
named-checkzone nirsa.com nirsa.zone

named.conf 파일은 이상이 없다면 아무런 메세지도 출력되지 않으며 zone 파일은 OK가 출력될 것 입니다.

이제 모든 설정과 검증이 끝낫으니 서비스만 시작해주면 됩니다.

# 서비스 시작
systemctl start named

# 서버 재기동 시 서비스 자동 시작
systemctl enable named

만약 에러가 발생한다면 하나하나 다시 오타가 없는지, zone 파일의 권한이 재대로 들어갓는지 등 확인이 필요 합니다.

 

반응형

+ Recent posts