컬쥐네 다락방

리눅스 | DNS 란? 본문

클라우드/리눅스

리눅스 | DNS 란?

코딩하는 갱얼쥐 2022. 3. 8. 17:33

Domain Name Service

IP Affress를 Domain 형식 (문자열)로 변환해주는 서비스

 

Domain Name이란?

네트워크에 연결되어 있는 모든 시스템에는 숫자의 조합으로 구성되는 주소를 가지고 있다. 하지만 이러한 주소를 다 외우기는 불가능 하므로 알파벳으로 이루어지는 도메인 이름을 사용한다. 

ex) naver.com = 222.122.84.250

 

도메인 등록 원칙

1. 도메인 이름은 영문자(a-z), 숫자(0-9), 특수기호(-) 를 합쳐 총 37개의 글자 조합으로 나타낼 수 있따. 영문자의 경우 대 소문자의 구별은 하지 않으며 특수 기호인 (-)는 도메인의 처음과 끝에 올 수 있다.

2. 도메인은 피라미드 구조를 하고 있으며 각 단계별로 독자적으로 관리한다.

3. 도메인 이름은 전 세계적으로 겹치지 않게 하나만 부여되며 First Come, First Served 원칙에 따라 부여된다.

도메인을 찾아가는 과정

네임 서버의 유형 

도메인에 대한 DNS 네임 처리를 해주기 위해서는 반드시 한 대의 네임 서버가 필요하다.

통상 한대의 DNS 서버로 운영은 가능하나, 이 네임 서버가 다운되면 DNS로 하는 모든 작업이 중단되기 때문에 이를 대체할 수 있는 네임 서버를 함께 구축해야 한다.

 

주 네임 서버(Primary Name Server)

1차 네임 서버라고 부르며, 이 네임 서버는 영역에 대한 모든 데이터를 가지고 있기 때문에 한 명에 대한 모든 권한을 가지고 있는 가장 중요한 서버이다.

 

보조 네임 서버 (Secondary Name Server)

2차 네임 서버라고 부르며, 이름에서 알 수 있듯 1차 네임 서버가 다운됐을 때 동작한다.

 

캐쉬 서버 (Cache Server)

직접 입력이 불가능하고 주 서버에서 정보를 가져와서 서비스하는 서버이다.

 

/etc/hosts 

인터넷 주소와 호스트 이름의 관계를 설정한다. 매우 간단하게 설정할 수 있다는 장점이 있지만, 로컬 시스템에서만 유효하게 사용할 수 있다.

vi 편집기를 사용해 밑에 클라이언트 주소를 추가해주고,

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.56.200 client client.encore.class4

등록된 주소나 이름으로 핑을 보내면 보내지는 모습을 확인할 수 있다.

[root@server ~]# ping -c 3 192.168.56.200
PING 192.168.56.200 (192.168.56.200) 56(84) bytes of data.
64 bytes from 192.168.56.200: icmp_seq=1 ttl=64 time=0.922 ms
64 bytes from 192.168.56.200: icmp_seq=2 ttl=64 time=0.352 ms
64 bytes from 192.168.56.200: icmp_seq=3 ttl=64 time=0.270 ms

--- 192.168.56.200 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 0.270/0.514/0.922/0.291 ms
[root@server ~]# ping -c 3 client
PING client (192.168.56.200) 56(84) bytes of data.
64 bytes from client (192.168.56.200): icmp_seq=1 ttl=64 time=0.382 ms
64 bytes from client (192.168.56.200): icmp_seq=2 ttl=64 time=0.536 ms
64 bytes from client (192.168.56.200): icmp_seq=3 ttl=64 time=0.470 ms


--- client ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 0.382/0.462/0.536/0.067 ms
[root@server ~]# ping -c 3 client.encore.class4
PING client (192.168.56.200) 56(84) bytes of data.
64 bytes from client (192.168.56.200): icmp_seq=1 ttl=64 time=0.327 ms
64 bytes from client (192.168.56.200): icmp_seq=2 ttl=64 time=0.212 ms
64 bytes from client (192.168.56.200): icmp_seq=3 ttl=64 time=0.428 ms

/etc/resolv.conf

호스트가 사용할 DNS 서버의 주소를 설정해준다.

자신의 호스트가 DNS 서버라면 자신의 IP 주소를 적어줘야한다.

기존 /etc/resolv.conf

[root@server ~]# cat /etc/resolv.conf
# Generated by NetworkManager
search encore.class4
nameserver 210.220.163.82
nameserver 219.250.36.130

자신의 ip 주소를 DNS로 가지는 서버를 등록하면 바뀌게 된다.

[root@server ~]# nmcli con add con-name static ifname enp0s3 type ethernet ip4 10.0.2.10/24 gw4 10.0.2.2
연결 'static' (26a88b3b-74f5-4ac8-86c8-8245b4754cf7)이 성공적으로 추가되었습니다.
[root@server ~]# nmcli con mod static ipv4.dns 10.0.2.10
[root@server ~]# nmcli con reload
[root@server ~]# nmcli con up static
연결이 성공적으로 활성화되었습니다 (D-Bus 활성 경로: /org/freedesktop/NetworkManager/ActiveConnection/7)
[root@server ~]# cat /etc/resolv.conf
# Generated by NetworkManager
search encore.class4
nameserver 10.0.2.10

DNS 구성 과정

1. 패키기 설치 (bind , bind-utils )
 - yum -y install bind bind-utils

2. 서비스 설정
 - 고정 아이피 설정
 - DNS 서버 주소 설정
 - hostname 설정
 - /etc/named.conf 설정
 - /var/named => zone 설정

3. 서비스 활성화
 - systemctl start named
 - systemctl enable named

4. 방화벽 설정
 - firewall-cmd --add-service=dns --permanent
 - firewall-cmd --reload

Packagae 이름 설명
bind-utils DNS 쿼리를 위한 유틸리티
bind-libs 라이브러리
bind-chroot Chroot 런타임 환경
bind-devel 헤더파일 및 라이브러리
bind BIND 패키지
unbound Cache 서버 구성

/etc/named.conf

DNS 서버의 환경을 설정하는 파일


//linux.edu.kr.zone 설정
zone “linux.edu.kr" IN {
type master; //master 1차 DNS server 로 구성
file “linux.edu.kr.zone"; //zone 파일 이름지정
allow-update { any; }; //동적 업데이트 모두 허용
allow-transfer { any; }; //zone transfer 모두 허용
};options {
listen-on port 53 { 127.0.0.1; };
listen-on-v6 port 53 { ::1; };
directory "/var/named";
//네임서버 DB파일 존재 위치 지정
chroot 설치시 /var/named/chroot/var/named로 위치 변경
dump-file "/var/named/data/cache_dump.db";
//네임서버 정보 변경시 dump 파일로 지정
statistics-file "/var/named/data/named_stats.txt";
//네임서버 통계자료 저장
memstatistics-file "/var/named/data/named_mem_stats.txt";
//메모리 상태 정보 저장
recursing-file "/var/named/data/named.recursing";
secroots-file "/var/named/data/named.secroots";
allow-query { localhost; };
allow-query-cache { localhost; }; //quersy allow 설정
};
//linux.edu.kr.zone 설정
zone “linux.edu.kr" IN {
type master; //master 1차 DNS server 로 구성
file “linux.edu.kr.zone"; //zone 파일 이름지정
allow-update { any; }; //동적 업데이트 모두 허용
allow-transfer { any; }; //zone transfer 모두 허용
};
//reverse mapping 설정
zone “8.168.192.in-addr.arpa" IN {
type master;
file “192.168.8.zone";
allow-update { any; }; //동적 업데이트 모두 허용
allow-transfer { any; }; //zone transfer 모두 허용
};

 

listen-on port 53 {127.0.0.1; }; : 루프백에 대해서만 질문에 반응할 것이다.

listen-on port 53 {10.0.2.30; }; : 10.0.2.30 에 대해서만 질문을 들을 준비가 되었다.

listen-on port 53 {any; };        : 어떠한 주소에서 질문이 들어오던 들을 준비가 되었다.

listen-on port 53 {none; };      : 어떠한 질문에도 답하지 않겠다. (비활성화)

 

조회

정방향 조회 => 이름 -> 주소

역방향 조회 => 주소 -> 이름

 

Zone 파일 구성

정방향 조회 

//정방향 파일
$TTL 86400 ; 1 day //time to live 데이터의 수명
@ IN SOA ns.linux.edu.kr. root (
77 ; serial
10800 ; refresh ( 3 hours)
900 ; retry (15 minutes)
604800 ; expire (1 week)
86400 ; minimum (1 day)
)
IN NS nstest.com. ### 1차 네임서버
IN NS nstest.net. ### 2차 네임서버
IN MX 10 mail.test.com ### 1차 메일서버
IN MX 20 mail2.test.com ### 2차 메일서버
IN A 192.168.0.100 ### test.com 도메인의 IP 주소를 192.168.0.100로 설정
www IN A 192.168.0.100 ### www.test.com 도메인의 IP 주소를 192.168.0.100로 설정
m IN A 192.168.0.100 ### m.test.com 도메인의 IP 주소를 192.168.0.100로 설정
good IN CNAME www ### good=www IP 주소 매핑
shop IN A 192.168.0.200 ### shop.com 도메인의 IP 주소를 192.168.0.200로 설정
@ IN TXT "v=spf1 ip4:1.1.1.1 ip4:2.2.2.2 ~all"

역방향 조회

$TTL 86400 ; 1 day //time to live 데이터의 수명
@ IN SOA ns.linux.edu.kr. root (
42 ; serial (d. adams)
3H ; refresh
15M ; retry
1W ; expire
1D ; minimum
)
IN NS ns.linux.edu.kr
IN A 192.168.8.10
10 IN PTR www.linux.edu.kr.
//PTR 레코드는 IP 주소에 대해 도메인 명을 매핑하여 주며, Reverse Zone 파일에서 사용
항목 설명
@ orgin 이라고 부르며, zone 이 가지는 기본 도메인을 의미한다.
- @ 대신 naver.com. 을 사용해도 되며 도메인 뒤에는 항상 . 을 찍어 내용이 도메인이라는 사실 을 알려줘야 한다.
SOA Start Of Authority의 약어로 기본적인 권한을 담당하는 서버 주소, 관리자 메일주소 등의 정보 유 효 기간을 지정하는 설정이 시작됨을 의미한다
77 ; serial 현재 데이터의 버전을 나타내는 시리얼 번호
3H ; refresh 2차 네임서버가 1차 네임서버로부터 재조회 할 시간 간격
15M ; retry 2차 네임서버가 1차 네임서버를 조회 실패시 재시도할 시간 간격
1W : empiry 2차 네임서버가 1차 네임서버를 재조회 했을 때 실패하여 retry 하였는데 그 기간이 1주일이 지 나면 2차 DNS의 정보를 파기 하겠다는 의미이다.
1D ; minimum Negative caching ttl을 의미하는 필드로서, 앞쪽에 있는 $TTL 은 4.X 버전에서는 같은 의미를 가 졌지만 8.X 버전 이후 버전에서는 조회한 도메인의 정보가 없을 시에 “NXDOMAIN (no-suchdomain)” 이란 응답을 받게 되는데 “NXDOMAIN” 정보를 캐시 할 시간이다.

nslookup

nolookup 명령어를 통해 서버와 질문을 주고 받을 수 있다.

[root@client ~]# nslookup
> www.encore.class4
Server:         10.0.2.10
Address:        10.0.2.10#53

Name:   www.encore.class4
Address: 10.0.2.20
> exit

'클라우드 > 리눅스' 카테고리의 다른 글

리눅스 | HTTPS (HTTP Secure)  (0) 2022.03.11
리눅스 | Apache, 가상 호스트  (0) 2022.03.10
리눅스 | 방화벽 (firewall)이란?  (0) 2022.03.07
리눅스 | SSH란?  (0) 2022.03.07
리눅스 | 네트워크 설정 feat. nmcli  (0) 2022.03.04
Comments