본문 바로가기
자격증

[리눅스마스터 1급] 13. DNS 서비스 (bind)

by LimSeongHyeon 2025. 5. 5.

 

DNS 서버

DNS서버는 사람이 의미 없는 숫자 나열 형태의 IP를 기억하며 접근하는 것이 비현실적이기에 특정 format을 따르는 문자열을 IP로 변환해주는 역할을 한다.

DNS 서버 동작 흐름

  1. User는 PC에 example.com을 기입한다.
  2. PC는 Local DNS Chache에서 해당 도메인에 대응되는 IP가 있는지 확인한다.
  3. Local DNS Cache에 해당 도메인이 매핑되어 있지 않음을 확인한다.
  4. PC는 example.com의 IP를 Local DNS Server에 물어본다.
  5. Local DNS Server는 Root DNS Server에 해당 도메인의 위치에 대해 물어본다.
  6. Root DNS Server는 example.com이므로 .com 영역을 담당하는 TLD Name Server에 물어보라고 알려준다.
  7. Local DNS Server는 TLD Name Server에 example.com의 IP를 물어본다.
  8. TLD Name Server는 example.com이 존재하는 Auth 서버의 위치를 알려준다.
  9. Local DNS Server는 Auth. Name Server에 example.com의 IP를 물어본다.
  10. Auth. Name Server는 example.com의 최종 IP를 알려준다.
  11. Local DNS Server는 이를 PC에게 알려준다.
  12. PC는 전달받은 IP로 접근하여 정보를 User에게 보여준다.

 


bind 설치 및 동작

$ dnf install -y bind bind-libs bind-utils
$ systemctl start named.service
bind는 실제 DNS 서버를 구동하는 데몬이 존재하며, bind-libs는 DNS 기능 수행에 필요한 공유 라이브러리를 담는다. bind-utils는 DNS 관련 유틸리티 도구 혹은 클라이언트 도구를 포함하고 있다.

 

bind가 구동이 되면 /etc/named.conf 파일을 로드하고 필요한 zone 파일들을 확인한다. 이후 /var/named 하위의 필요한 zone 파일들을 로드하여 메모리에 적재한다. 이때 conf 파일과 zone 파일에 정의된 규칙대로 DNS 서비스를 진행한다.

 


named.conf

구문 설명
options options는 모두가 지켜야 할 교전 및 대처 수칙처럼, bind가 동작함에 있어 전역적으로 동작 방식을 설정하는 구문이다. 
zone zone은 특정 도메인에 대한 속성과 파일 위치를 설정하는 구문이다.
acl 허용 혹은 차단할 IP 범위 집합을 작성하고 이를 설정하는 구문이다.
logging 로그 기록 방법과 어디에 기록할지 경로를 설정하는 구문이다.
man named.conf에 모든 설정 가능 내용들이 적혀 있으니 참조하여 작성하면 될 것 같다.

 

options
항목 설명
directory 작업 디렉토리 (보통 /var/named)
listen-on DNS 요청을 수신할 IP/포트 (기본: 53)
allow-query DNS 질의를 허용할 클라이언트 범위
allow-transfer 존 전송 허용 범위
recursion 재귀 쿼리 허용 여부 (yes/no)
forwarders 요청 실패 시 넘길 외부 DNS 주소
dnssec-enable DNSSEC 사용 여부
dnssec-validation DNSSEC 검증 여부
options {
    directory "/var/named";
    listen-on port 53 { any; };
    allow-query { any; };
    recursion yes;
    forwarders { 8.8.8.8; 8.8.4.4; };
};

 


zone
항목 설명
type master(1차 도메인), slave(2차 도메인), hint(루트 도메인), forward 등
file zone 데이터 파일 경로
masters slave zone의 master 서버 IP 목록
allow-transfer zone 전송 허용 IP
zone "example.com" IN {
    type master;
    file "example.com.zone";
    allow-transfer { 192.168.1.2; };
};


zone "1.168.192.in-addr.arpa" IN {
    type master;
    file "example.rev";
};

 


acl
항목 설명
이름 ACL의 이름 지정
IP 주소/네트워크 CIDR
acl "trusted" {
    192.168.1.0/24;
    10.0.0.0/8;
};

 

 


 

logging
항목 설명
channel 로그 출력 경로(파일, stderr, syslog) 정의
file 로그 파일 경로
severity 로그 레벨 (debug, info, warning, error 등)
category 로깅 카테고리 지정
logging {
    channel default_log {
        file "/var/log/named.log" versions 3 size 5m;
        severity info;
        print-time yes;
    };
    category default { default_log; };
};

 


named

$TTL 86400
@		IN	SOA	ns1.example.com. admin.example.com. (
	2024050501	; Serial
	3600		; Refresh
	1800		; Retry
	604800		; Expire
	86400		; Minimum TTL
)
		IN	NS	ns1.example.com.
		IN	NS	ns2.example.com.
		IN	A	192.0.2.1
		IN	AAAA	2001:db8::1
		IN	MX	10 mail.example.com.
    
www		IN	A	192.0.2.2
mail		IN	A	192.0.2.3
ftp		IN	CNAME	www
		IN	TXT	"v=spf1 mx -all"
_sip._tcp	IN	SRV	10 60 5060 sipserver.example.com.
		IN	HINFO	"Intel i7" "Linux"
1		IN	PTR	host1.example.com.
리눅스 내부에서 찾아볼 곳이 마땅치 않기 때문에 익숙해지는 방법 이외엔 없다. 대부분의 zone 파일은 TTL → SOA → 레코드 식으로 작성되어 있다.

TTL은 Time To Live의 약자로 캐시된 데이터의 유효 시간을 지정하는 레코드이다. 반드시 첫번째 라인에 위치 해야 하며, 설정 값으로는 기본적으로 초(s 혹은 없음)를 사용한다. m(Minute), h(Hour), d(Day), w(Week)도 단위설정 하여 사용이 가능하다.

이전 회사에서 도메인 교체작업을 하는데 이 TTL로 인해서 교체된 도메인으로 일반적인 사용자들이 접근하지 못하는 이슈가 있었다. TTL을 늘린다고 좋은 것 만은 아닌 것 같다. 만약 7일로 설정 해놓았다면, TTL을 대폭 줄여놓고 최소 7일 뒤에 도메인 교체작업 후 TTL을 다시 늘리는 것이 좋았을 것이다. 성능과 업데이트 주기를 trade-off함을 잊지 말자.
레코드 타입 설명
A (Address Mapping Record) 도메인 → IPv4 주소 매핑
AAAA (IPv6 Address Mapping Record) 도메인 → IPv6 주소 매핑
MX (Mail Exchange Record) 메일 서버 지정
CNAME (Canonical Name Record) 도메인의 별칭 지정
NS (Name Server Record) 권한 있는 네임서버 지정
SOA (Start of Authority Record) 도메인의 관리 정보 및 동기화 정보 (@는 해당 zone의 root domain을 의미한다.)
PTR (Pointer Record) IP 주소 → 도메인 (역방향) 매핑
TXT (Text Record) 텍스트 데이터 (SPF, 도메인 소유 검증 등)
SRV (Service Locator Record) 특정 서비스용 서버 정보 제공
SPF (Sender Policy Framework Record) 메일 송신 도메인 인증 정책 (TXT 내에 포함)
HINFO (Host Information) 하드웨어 및 OS 정보

bind 점검 명령어

# named.conf 파일 syntax 검사
$ named-checkconf

# zone file syntax 검사
$ named-checkzone [domain] [zone-file]

# zone-reload
$ rndc reload

# DNS 캐시 초기화
$ rndc flush

# DNS 서버 상태 확인
$ rndc status

# 도메인으로 레코드 확인
$ nslookup [domain]
$ host [domain]
$ dig [domain]

문제

 

문제 1
$TTL 86400
@   IN  SOA  ( ① ) ( ② ) (
                2024112401 ; Serial
                3600       ; Refresh
                1800       ; Retry
                1209600    ; Expire
                86400      ; Minimum TTL
                )
; 네임서버 설정
@   IN  NS  ( ③ )

; 기타 레코드 (WWW IP: 10.0.0.10)
WWW IN  A  ( ④ )

; MX 레코드 설정
@   IN  MX  ( ⑤ )

; A 레코드 설정 (ns IP 주소: 10.0.0.11)
( ⑥ )

mail IN A 10.0.0.12
[조건]
1) 관리자의 이메일은 admin@example.com이다.
더보기

1) ns.example.com

2) admin.example.com

3) ns.example.com.

4) 10.0.0.10

5) 10 example.com.

6) ns IN A 10.0.0.11

 

문제 2
zone "①" IN {
    type ②;
    file "③";
};

zone "④" IN {
    type ⑤;
    file "⑥";
};
[조건]
1) 도메인은 example.com을 사용한다.
2) forward zone 파일명은 example.zone이다.
3) reverse zone 파일명은 example.rev이다.
4) 네임서버의 IP는 10.0.0.11이다.
더보기

1) example.com

2) master

3) example.zone

4) 0.0.10.in-addr.arpa

5) master

6) example.rev

 

문제 3
가. IP 주소 10.0.0.10, 10.0.0.20과 10.0.1.0/24 네트워크에 속한 호스트들을 example이라는 명칭으로 설정한다.


나. 도메인에 대한 질의를 다른 DNS 서버 8.8.8.8로 전달하는데 응답이 없어도 다른 서버에 질의하지 않게 설정한다.



다. 도메인에 대한 질의를 다른 DNS 서버 8.8.8.8로 전달하는데 응답이 없을 경우 다른 서버에 질의하게 설정한다.



라. zone 파일의 내용을 복사할 수 있는 대상은 10.0.0.0/24 네트워크에 속한 호스트만 허용하도록 설정한다.


마. 네임서버에 질의할 수 있는 호스트를 10.0.2.0/24 대역의 네트워크, 10.0.1.50 호스트, example 그룹으로 설정한다.
더보기

1) acl "example" { 10.0.0.10; 10.0.0.20; 10.0.1.0/24; };
2) forward only;
3) forward first;
4) forwarders { 8.8.8.8; };
5) allow-transfer { 10.0.0.0/24; };
6) allow-query { 10.0.2.0/24; 10.0.1.50; example; };

 

문제 4
@ IN SOA ① ② (
    2024050101 ; Serial
    3600       ; Refresh
    1800       ; Retry
    1209600    ; Expire
    86400      ; Minimum TTL
)

③
④
[조건]
1) 서버의 IP 주소는 10.0.0.50이다.
2) 도메인은 example.com으로 설정한다.
3) 네임서버는 ns.example.com으로 설정한다.
4) 관리자 이메일은 admin@example.com으로 설정한다.
5) IP로 도메인 이름이 조회되도록 역방향 설정으로 설정한다.
더보기

1) ns.example.com

2) admin.example.com

3)         IN  NS    ns.example.com.

4) 50   IN  PTR  example.com

 

문제 5
@ IN SOA ① ② (
    2024050101 ; Serial
    3600       ; Refresh
    1800       ; Retry
    1209600    ; Expire
    86400      ; Minimum TTL
)

IN NS ns.example.com.
IN A 10.0.0.10

③
④
[조건]
1) 도메인은 example.com이다.
2) 관리자 메일 주소는 admin@example.com이다.
3) ③은 example.com 도메인으로 메일을 받을 수 있도록 설정한다.
4) ④는 www 도메인을 사용하는 호스트의 IP 주소를 10.0.0.10으로 설정한다.
더보기

1) ns.example.com

2) admin.example.com

3) IN MX 10 example.com.

4) www IN A 10.0.0.10