반응형

 

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 파일의 권한이 재대로 들어갓는지 등 확인이 필요 합니다.

 

반응형
반응형

 

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

[DNS] 리눅스 DNS 서버 구축 (2) : https://nirsa.tistory.com/108?category=872350

 

  • DNS 서버 설치

DNS 서버는 bind 패키지를 사용하며 패키지만 다운로드 받으면 되기에 DNS 서버 설치는 굉장히 간단 합니다. 아래 코드를 입력하여 패키지를 다운로드 받아 주세요.

yum -y install bind bind-utils

 

  • DNS 설정 파일 개념 및 위치

DNS의 핵심적인 파일은 크게 4가지로 나눠 집니다. 하지만 /etc/named.conf 설정에 대한 설명이 생각보다 길어지게 되어 이번 글에서는 /etc/named.conf 설정에 대한 설명만 다루고, 나머지는 추후 2편으로 업로드 하겠습니다.

빠르게 설정 내용만 보실 분들은 아래 중 빨간색으로 표시된 부분처럼만 설정 하시면 됩니다.

 

  • 1. /etc/named.conf

네임 서버 데이터 베이스, root 존파일 위치, root 파일, 키파일, 접근제어 등 가장 핵심적인 설정 파일이라고 볼 수 있습니다. 이후 DNS-SEC 구성을 하거나 여러가지 보안 설정을 할때에 대부분의 설정이 이 파일을 사용 합니다.

아래 내용은 DNS-SEC 구성을 하지 않는다는 전제하에 작성하며 DNS-SEC 구성은 이후에 업로드 하겠습니다.

listen-on port 53 { 127.0.0.1; };

→ DNS port 53에 어떤 IP가 접근할 수 있는지 설정 합니다. 불특정 다수의 유저에게 서비스 할땐 listen-on port 53 { any; }; 으로 설정 하고, 사설 DNS 서버로 사용할때엔 서비스할 사설 IP 대역만을 고정시켜주어 설정해줘야 보안이 상승 합니다.

 

listen-on-v6 port 53 { ::1; };

→ IPv6를 사용하지 않는다면 주석처리하여 없애 버리셔도 좋습니다. 위의 옵션이 IPv4의 DNS port 53번에 대한 설정 이였다면, 이 옵션은 IPv6의 DNS port 53번에 대한 설정 입니다. 기능은 IPv4와 동일하게 DNS port 53 any 입니다.

 

directory        "/var/named";

→ 실제로 서비스할 DNS의 zone파일 디렉토리 경로를 설정 합니다.

 

dump-file        "/var/named/data/cache_dump.db";

→ DNS cache dump 파일 생성 디렉토리 경로 입니다. 일반적으로 운영 할때에 자주 접하지는 않습니다.

 

statistics-file        "/var/named/data/named_mem_stats.txt";

→ 메모리 통계 파일 생성 디렉토리 경로 입니다. 일반적으로 운영 할때에 자주 접하지는 않습니다.

 

allow-query        { localhost; };

→ 재귀 질의가 올 때 응답할지에 대한 설정 입니다.  보안상의 문제가 있을 경우 재귀쿼리를 받을 IP 대역만을 허용하며, 일반적으로 allow-query { any; }; 를 사용 합니다.


recursion yes:

→ 반복 질의에 대한 요청을 할지(DNS Cache Server), 안할지를 설정 합니다. 외부로 도메인을 접근할 수 없는 사설 DNS로 사용하는 경우가 아니면 yes 로 설정 합니다. 

 

dnssec-enable yes;        /       dnssec-validation yes;

→ DNS-SEC에 관한 설정 입니다. 별도로 DNS-SEC 설정을 하지 않는다면 의미가 없습니다. 만약 DNS 보안 설정에 대한 에러가 발생한다면 no로 바꿔주셔도 됩니다.

 

  bindkeys-file "/etc/named.root.key";      /      managed-keys-directory "/var/named/dynamic";

→ 마찬가지로 DNS-SEC에 관한 설정 입니다. (DLV : DNS Lookaside Validation) 무시하셔도 좋습니다.

 

pid-file "/run/named/named.pid";

 DNS의 PID가 작성된 파일

 

session-keyfile "/run/named/session.key";

→ TSIG session key (Master ↔ Salve 보안 트랙잭션 설정) 마찬가지로 무시 합니다.

 

logggin { channel default_debug { file "data/named.run"; serverity dynamic; }; };

→ DNS Server가 실행될때에 디버그 수준의 로그 파일을 남깁니다. 상대 경로 부분은 상단 옵션 중 directory에 작성된 경로를 기준으로 합니다.

 

zone "." IN { type hint; file "named.ca"; };

→ 참조할 루트 힌트가 작성되어 있는 파일명을 가르킵니다. 이 파일에는 전세계 루트 도메인(최상위 도메인)에 대한 정보가 들어 있습니다. 만약 이 파일에 대한 설정이 잘못 되었거나 해당 파일 내용이 모두 손실될 경우 루트 도메인에 대한 정보가 없어지므로 반복 질의를 수행할 수 없게 됩니다.

 

include ~~~~

include 두줄은 해당 경로에 있는 파일의 내용을 불러 옵니다. rfc는 존파일 등록 대한 정보를, root key는 DNS-SEC에 관한 설정을 담고 있습니다. 각 파일의 위치를 별도로 변경 시 이 부분을 수정해야 하며, 그냥 사용한다면 변경할 필요는 없습니다. (처음 설치할땐 rfc파일 안에 존파일 등록 정보를 넣지만, 블로그 글마다 파일명이나 위치 등이 다른 이유가 이 부분의 수정/설정 때문 입니다)

 

 

[DNS] 리눅스 DNS 서버 구축 (2) : https://nirsa.tistory.com/108?category=872350

반응형
반응형

 

  • DNS(Domain Name Server) 란?

DNS는 사람에 따라 Domain Name Server, Domain Name Service, Domain Name System 등으로 불립니다.

간단하게 쓰면 도메인 이름을 IP로 변경 해주는 서버 입니다. 실제로 컴퓨터가 통신 할때엔 IP를 사용하게 되는데, 사람이 쉽게 읽고 사용할 수 있는 도메인(ex. www.google.com)을 실제 그 도메인이 올라가 있는 웹 서버의 IP를 알아와서 해당 서버와 통신을 할 수 있게 해주는 서버 입니다.

 

  • 도메인의 이해

아래 이미지 처럼 각각의 도메인 영역이 나누어져 있고 일반적으로 사람이 도메인을 입력할 때 google.com 까지만 입력 하지만 원래는 google.com. 처럼 가장 뒤에 .(root)가 숨어 있습니다.

 

이미지 출처 : 한국인터넷정보센터(KRNIC) https://xn--3e0bx5euxnjje69i70af08bea817g.xn--3e0b707e/jsp/resources/dns/dnsInfo.jsp

 

 

www.google.com 에 대해 도메인을 나누면 아래 사진과 같이 나눌 수 있습니다.

 

 

 

 

  • DNS의 통신 흐름

cash 정보가 없다는 가정하에 아래 순서와 같이 통신이 진행 됩니다. 최상위 도메인부터 한단계씩 읽어가며 정보를 확인하게 됩니다.

  • 1. 클라이언트가 DNS서버에게 www.google.com 재귀질의
  • 2. DNS서버는 최상위 도메인(.)에게 www.google.com 반복 질의
  • 3. 최상위 도메인(.) 서버는 .com의 IP와 함께 .com에게 질의 해보라고 답변 패킷 전송
  • 4. DNS서버는 .com에게 www.google.com 반복 질의
  • 5. .com 서버는 google.com의 IP와 함께 .google.com에게 질의 해보라고 답변 패킷 전송
  • 6. DNS서버는 google.com에게 www.google.com 반복 질의
  • 7. google.com 서버는 자신의 존파일 정보를 확인하여 www.google.com의 IP를 전송
  • 8. DNS서버는 전달받은 www.google.com IP를 클라이언트에게 답변 패킷 전송 

 

 

위 글에서 cache가 없다는 가정하에 진행을 했는데, 이렇게 정보를 전달 받을 경우 존파일에 설정된 일정 시간동안 알아낸 DNS 정보를 자신의 dns cache table에 저장하여 이후 같은 질의가 올 경우 이 테이블을 보고 바로 답변을 줍니다.

 

  • Client의 DNS 질의 우선 순위

클라이언트는 DNS를 질의하기 전 아래와 같이 특정 순서대로 확인하고 없을 경우 DNS 서버에게 질의하게 됩니다.

 

1. Window

  • 1) DNS cache table 확인 (ipconfig /displaydns)
  • 2) C:\windows\system32\drivers\etc\hosts.ics 파일 내용 확인
  • 3) C:\windows\system32\drivers\etc\hosts 파일 내용 확인
  • 4) DNS 서버에게 질의

 

2. Linux

  • 1) nscd(Name Service Cache Daemon) 확인 (별도로 데몬이 설치되어 있어야 함)
  • 2) /etc/hosts.conf 파일 내용 확인 (파일 내용에 따라 동작이 조금 바뀌지만, 자세한 내용 생략)
  • 3) DNS 서버에게 질의

 

반응형

+ Recent posts