DNS server

SunChan Kwon·2024년 6월 3일
0

Linux

목록 보기
13/20

리눅스 시스템의 hosts file

인터넷이 널리 보급되지 않던 시기에는 전화번호부처럼 기억하기 쉬운 이름을 ip 와 연결해놓은 hosts 파일을 사용했었다.

# /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

 
하지만 현재에는 호스트 수가 너무 많아져 직접 기록할 수 없기 때문에 DNS 서버로부터 호스트의 ip 주소를 확인한다.

ex) google-public-dns-a : 8.8.8.8

DNS

  • 클라이언트가 DNS server에 DNS 요청을 보내면 DNS server가 알고있는 내용으로 응답한다.

  • 하나의 서버로는 모든 정보를 저장하고 갱신하는것이 불가능하여 계층적 구조를 가진다.

DNS record

레코드의미
A, AAAAIPv4, IPv6 주소 레코드로 특정 호스트의 주소.
CNAME호스트의 별칭 정보
MX메일 교환기 정보
NS도메인을 관리하는 DNS 서버를 지정.
PTR도메인 이름에 대한 포인터(역방향 조회용).
SOA영역의 시작 권한 정보.
TXT임의의 텍스트 정보를 저장.

DNS 조회

host

주어진 도메인 이름에 대한 IP 주소 응답

nslookup

주어진 도메인 이름에 대한 DNS 정보를 조회

dig

DNS 정보를 더 자세하게 조회

BIND

리눅스 시스템을 DNS 서버로 사용하기 위해 가장 많이 사용하는 도구

설치

yum install bind

구성

/etc/named.conf

options {
        listen-on port 53 { 127.0.0.1; }; # dns 요청에 응답할 인터페이스와 포트(IPv4)
        listen-on-v6 port 53 { ::1; }; # DNS요청에 응답할 인터페이스와 포트(IPv6)
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        secroots-file   "/var/named/data/named.secroots";
        recursing-file  "/var/named/data/named.recursing";
        allow-query     { localhost; }; # DNS query 요청을 허가할 대상

 


DNS server 구성

직접 도메인을 호스팅하거나, 디렉토리 서비스 사용 시 DNS 서버를 자체적으로 구성해야 한다.

서버 구성 history

  1. 패키지 설치
    • dnf install package
      • dnf install bind
  1. 설정
    • 설정파일 + 영역파일
  1. 서비스 활성화
    • systemctl [ enable | restart | start ]
      • systemctl enable named
  1. 방화벽 규칙
    • firewall-cmd --add-service=dns(port 53)

1. named.conf

# /etc/named.conf 수정
options {
        listen-on port 53 { any; };
        listen-on-v6 port 53 { none; };
        allow-query     { any; };
        .
        .
        }

# 아래에서 생성할 zone 파일들을 추가
zone "sckwon.com." IN {
        type master;
        file "data/sckwon.zone";
};

zone "10.168.192.in-addr.arpa" IN {
    type master;
    file "data/db.192.168.10";

2. zone

정방향

/var/named/data/sckwon.zone

$TTL 86400
@       IN SOA  ns.sckwon.com root (
                                        20240603        ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
@       IN      NS      ns.sckwon.com.
        IN      MX 10   mail.sckwon.com.
ns      IN      A       192.168.10.10
www     IN      A       192.168.10.20
blog    IN      A       192.168.10.30
news    IN      A       192.168.10.40
mail    IN      A       192.168.10.50

역방향

/var/named/data/db.192.168.10

$TTL 3H
@       IN SOA  ns.sckwon.com. root (
                                        20240603        ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
@       IN      NS      ns.sckwon.com.
10      IN      PTR     ns.sckwon.com.
20      IN      PTR     www.sckwon.com.
30      IN      PTR     blog.sckwon.com.
40      IN      PTR     news.sckwon.com.
50      IN      PTR     mail.sckwon.com.

3. Validation check(conf)

# 영역 파일에 대한 유효성 검증
$ named-checkconf /etc/named.conf

4. zone 파일

# 기존에 있는 형식 복제하여 사용 가능
cp /var/named/named.empty /var/named/sckwon.zone

# named를 그룹으로 변경
chown :named /var/named/sckwon.zone

# 원하는 형식으로 zone 파일 수정
$TTL 86400
@       IN SOA  ns.sckwon.com root (
                                        20240603        ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
@       IN      NS      ns.sckwon.com.
ns      IN      A       192.168.10.10
www     IN      A       192.168.10.20
blog    IN      A       192.168.10.30
news    IN      A       192.168.10.40

5. Validation check(zone)

$ named-checkzone sckwon.com /var/named/data/sckwon.zone
zone sckwon.com/IN: loaded serial 20240603
OK

6. service, firewall

# start named.service
$ systemctl enable --now named.service
Created symlink /etc/systemd/system/multi-user.target.wants/named.service → /usr/lib/systemd/system/named.service.

# firewall dns service add
$ firewall-cmd --add-service=dns --permanent 
success

7. DNS Query

# 다양한 방법으로 dns 질의
$ host -t A ns.sckwon.com
ns.sckwon.com has address 192.168.10.10
---
$ host sckwon.com ns.sckwon.com
Address: 192.168.10.10#53
---
$ host -t NS sckwon.com ns.sckwon.com
sckwon.com name server ns.sckwon.com.
---
$ host -t mx sckwon.com ns.sckwon.com
sckwon.com mail is handled by 10 mail.sckwon.com.
---
$ host -t A www.sckwon.com ns.sckwon.com
www.sckwon.com has address 192.168.10.20
---
$ host 192.168.10.10 ns.sckwon.com
10.10.168.192.in-addr.arpa domain name pointer ns.sckwon.com.
---
$ host 192.168.10.10 ns.sckwon.com
10.10.168.192.in-addr.arpa domain name pointer ns.sckwon.com.
---
$ host 192.168.10.40 ns.sckwon.com
40.10.168.192.in-addr.arpa domain name pointer news.sckwon.com.

/etc/resolve.conf 파일이 초기화 될 때

/etc/NetworkManager/conf.d/90-dns-none.conf 파일 생성 후 다음과 같이 입력한다.

[main]
dns=none

검증

초기화 되지 않고 수정한 내용이 남아있는 것을 확인.

0개의 댓글