728x90
📌INDEX
✔️ DNS란?
- DNS(Domain Name Server)란 IP주소를 Domain 형식(문자열)으로 변환해주는 서비스이다
- Domain Name이란?
- 네트워크에 연결되어있는 모든 시스템에는 숫자의 조합으로 구성되는 주소를 가짐
- 이러한 주소를 다 외우기는 불가능하므로, 알파벳으로 이루어지는 도메인 이름을 사용
- ex) naver.com = 222.122.84.250
- 도메인 등록 원칙
- 도메인 이름은 영문자(a-z), 숫자(0-9) 10개, 특수기호(-) 1개를 합쳐 총 37개의 글자 조합으로 나타낼 수 있음
- 영문자의 경우 대문자 소문자의 구별 X
- 특수 기호인 '-' 은 도메인의 처음과 끝에 올 수 없음
- 도메인 이름의 체계는 피라미드 구조를 하고 있으며, 각 단계별로 독자적으로 관리
- 도메인 이름은 전 세계적으로 겹치지 않게 하나만 부여됨
- 도메인 이름은 영문자(a-z), 숫자(0-9) 10개, 특수기호(-) 1개를 합쳐 총 37개의 글자 조합으로 나타낼 수 있음
- Domain Name 구조(피라미드 구조)
- "www.sungshin.ac.kr" 조회 과정
- 클라이언트가 www.sungshin.ac.kr 조회
- "." 최상위 서버에게 "kr" DNS 서버를 알아낸다
- "kr" 를 관리하는 서버에게 "ac.kr" DNS 서버를 알아낸다
- "ac.kr" 를 관리하는 서버에게 "sungshin.ac.kr" DNS 서버를 알아낸다
- "www.sungshin.ac.kr"을 알아낸다
- 클라이언트에게 질의에 대해 응답해준다
- DNS 주소 확인
- 1단계 : 직접 설정해둔 DNS 주소에서 확인
- client => DNS 서버 ( 내 컴퓨터에 설정된 DNS 주소)
- 해당 DNS 서버에서 관리하는 주소인 경우
- 바로 서비스 제공 => 신뢰도 높음, 속도도 빠름
- 그렇지 않은 경우(클라이언트 DNS서버에서 관리하는 주소가 아닌 경우)
- 이전에 요청이 있었던 경우
- 요청 했던 정보를 캐시로 저장 => 속도는 빠름, 신뢰도는 떨어짐
- 그렇지 않은 경우(이전에 요청이 한번도 없었던 경우)
- 재귀적인 쿼리를 통해 직접 확인 => 속도도 느리고, 신뢰도도 떨어짐
- 이전에 요청이 있었던 경우
- 1단계 : 직접 설정해둔 DNS 주소에서 확인
- 네임 서버의 유형
- 도메인에 대한 DNS 네임 처리를 해주기 위해서는 반드시 한 대의 네임서버가 필요하다.
- 통상 한 대의 DNS 서버로 운영은 가능하나, 이 네임서버가 다운될 경우 DNS로 하는 모든 작업이 중단되기 때문에 이를 대체할 수 있는 네임서버를 함께 구축해야한다.
- 주 네임서버(Primary Name Server)
- 1차 네임서버라고도 부르며, 이 네임서버는 영역에 대한 모든 데이터를 가지고 있기 때문에 한명에 대한 모든 권한을 가지고 있는 가장 중요한 서버이다.
- 보조 네임서버(Secondary Name Server) (slave)
- 2차 네임서버라고도 부르며, 이름에서 알 수 있듯이 1차 네임서버가 다운되었을 경우 동작하게 된다.
- 주 네임서버와 같은 내용(data)를 갖고있다 = 같은 값을 공유하고 있다
- 캐쉬 서버(Cache Server)
- 직접 입력이 불가능하고, 주 서버에서 정보를 가져와서 서비스하는 서버이다
- 일정 시간이 지나면 데이터가 없어진다
- 이전에 물어보지 않았던 것은 알 수 없다
- 도메인에 대한 DNS 네임 처리를 해주기 위해서는 반드시 한 대의 네임서버가 필요하다.
✔️DNS 관련 파일
🔹 /etc/hosts
- 인터넷 주소와 호스트 이름의 관계를 설정
- 매운 간단하게 설정할 수 있다는 장점이 있으나, 이 파일의 내용은 로컬 시스템에서만 유용하게 사용할 수 있다.
- 일반적으로 127.0.0.1 이 로컬 호스트 주소이다
[root@server ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
- vi 에디터를 통해 설정 및 수정이 가능
- 설정 후 ping을 통해 확인해볼 수 있다다
- DNS 서버가 없던 시절에는, 이와 같이 /etc/host 파일에 일일이 등록했었다
[root@server ~]# vi /etc/hosts
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
:wq
[root@server ~]# ping client
PING client (192.168.56.200) 56(84) bytes of data.
...
[root@server ~]# ping client.encore.class4
PING client (192.168.56.200) 56(84) bytes of data.
...
🔹 /etc/resolv.conf
- 호스트가 사용할 DNS 서버의 주소를 설정한다.
- 자신의 호스트가 DNS 서버라면 자신의 IP주소를 적어줘야한다.
[root@server ~]# cat /etc/resolv.conf
# Generated by NetworkManager
search encore.class4
nameserver [IP주소]
nameserver [IP주소]
🔹 /etc/named.conf
- DNS 서버의 환경을 설정하는 파일
- listen-on port 53 { any; }; : 어떠한 주소에서 질문이 들어오든지 들을 준비가 되었다
- listen-on port 53 { none; }; : 어떠한 질문에도 답하지 않겠다(비활성화)
- listen-on port 53 { 127.0.0.1; }; : 루프백에 대해서만 반응하겠다
- listen-on port 53 { [IP주소]; }; : 해당 IP주소를 지정하고, 이 주소에 대해서만 질문을 들을 준비가 되었다
[root@server ~]# cat /etc/named.conf
...
options {
listen-on port 53 { any; };
listen-on-v6 port 53 { none; };
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 { any; };
...
zone "." IN {
type hint;
file "named.ca";
};
zone "encore.class4" IN {
type master;
file "encore.class4.zone";
};
zone "2.0.10.in-addr.arpa" IN {
type master;
file "10.0.2.0.zone";
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
- 일반적인 정방향 조회 zone 설정
//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 모두 허용
};
- 일반적인 역방향 조회 zone 설정
- 역방향 도메인 형식
- 최소 단위는 C 클래스
- 마지막 자리를 제외하고, 나머지 세자리 순서를 뒤집어서 기록
- 그 다음, in-addr.arpa를 postfix로 붙여준다.
- 최소 단위는 C 클래스
- ex) 192.168.8.xx
- 마지막 자리를 제외 : 192.168.8
- 세자리 뒤집기 : 8.168.192
- postfix 붙이기 : 8.168.192.in-addr.arpa
- 역방향 도메인 형식
//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 모두 허용
};
🔹 zone 파일
- /etc/named.conf 파일에 추가한 zone영역의 내용을 보면, zone 파일의 이름 및 경로가 표시되어있고, option 영역의 Dictionary를 보면, /var/named가 기본값으로 설정되어있다.
- 즉, 우리가 만들 zone 파일은 /var/named/ 하위에 위치해야한다.
- cd 명령어로 /var/named/로 이동한 뒤, touch 또는 vi 명령을 통해 zone 파일 생성
- zone 파일 구성
- 도메인 주소를 적을 때에는 마지막에 마침표(.) 찍는 것을 잊지 말 것
- NS : 네임 서버 지정
- A : ipv4 주소
- AAAA : ipv6 주소
예시 : 역방향 조회
$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 파일에서 사용
✔️ 도메인 확인 명령어
🔹 nslookup
- DNS 서버에 질의를 하는 명령어
- DNS 서버와 대화식으로 질의하고 응답을 받는다
사용 예
[root@localhost ~]# nslookup
> www.linux.edu.kr
Server: 192.168.8.10
Address: 192.168.8.10#53
Name: www.linux.edu.kr
Address: 192.168.8.10
> 192.168.8.10
Server: 192.168.8.10
Address: 192.168.8.10#53
10.8.168.192.in-addr.arpa name = www.linux.edu.kr
🔹host
- 도메인 이름을 통해 IP주소를 알아거나 IP주소를 통해 도메인 이름을 알아내는 명령어
- 사용법 : host [option] [도메인|ip 주소] [DNS 서버]
- 옵션
- -t type : type을 지정하여 정보를 얻음
- A : 호스트ip주소
- NS : 검색한 호스트의 네임 서버 호스트명
- PTR : 도메인 네임 포인터
- ANY : 타입의 모든 정보
- -v : 자세한 정보 출력
- -a : -t ANY와 같은 기능 (all)
- -t type : type을 지정하여 정보를 얻음
사용 예
[root@server named]# host -t A 10.0.2.10
10.2.0.10.in-addr.arpa domain name pointer server.encore.class4.
[root@server named]# host -v -t A 10.0.2.10
Trying "10.2.0.10.in-addr.arpa"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 51680
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;10.2.0.10.in-addr.arpa. IN PTR
;; ANSWER SECTION:
10.2.0.10.in-addr.arpa. 10800 IN PTR server.encore.class4.
;; AUTHORITY SECTION:
2.0.10.in-addr.arpa. 10800 IN NS server.encore.class4.
;; ADDITIONAL SECTION:
server.encore.class4. 10800 IN A 10.0.2.10
Received 104 bytes from 10.0.2.10#53 in 0 ms
🔹 dig
- dig(Domain Information Groper)는 네임서버로 부터 정보를 가져올 수 있는 툴
- dig명령은 DNS 네임서버 구성과 도메인 설정이 완료된 후, 도메인 네임에 대한 DNS질의 응답이 정상적으로 이루어지는지를 확인 점검하는 경우에 많이 사용
사용 예
[root@server named]# dig 10.0.2.10
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.9 <<>> 10.0.2.10
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 32279
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;10.0.2.10. IN A
;; Query time: 4994 msec
;; SERVER: 10.0.2.10#53(10.0.2.10)
;; WHEN: 수 3월 09 02:19:19 KST 2022
;; MSG SIZE rcvd: 38
✔️ DNS 서버
🔹 DNS 서버 구성 과정
- 패키지 설치 (bind, bind-utils)
- 서비스 설정
- 고정 ip 설정
- DNS 서버 주소 설정
- hostname 설정
- /etc/named.conf 설정
- /var/named => zone 설정
- 서비스 활성화
- systemctl start named
- systemctl enable named
- 방화벽 설정
- firewall-cmd --add-service=dns --permanent
- firewall-cmd --reload
🔹 정방향 조회
- 정방향 조회 : 이름 -> 주소
1. 패키지 설치 (bind, bind-utils)
[root@server ~]# yum -y install bind bind-utils
2. 서비스 설정
- 고정 ip 설정
[root@server ~]# nmcli con add con-name static ifname enp0s3 type ethernet ip4 10.0.2.10/24 gw4 10.0.2.2
Warning: There is another connection with the name 'static'. Reference the connection by its uuid 'f480458d-cc92-4442-8885-ea67bfa2c480'
연결 'static' (f480458d-cc92-4442-8885-ea67bfa2c480)이 성공적으로 추가되었습니다.
- DNS 서버 주소 설정(설정 파일 3개, 호스트명)
- /etc/resolv.conf 파일에서 확인 가능
[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/6)
[root@server ~]# cat /etc/resolv.conf
# Generated by NetworkManager
search encore.class4
nameserver 10.0.2.10
- hostname 설정
- 여기서는 호스트명은 server.encore.class4로 지정
[root@server ~]# hostnamectl set-hostname [host명]
- /etc/named.conf 설정
- listen-on-port 53 {any;} ;로 설정
- allow-query {any; }; 로 설정
- zone 추가
- zone 마지막에 세미콜론(;) 잊지 말것
[root@server ~]# vi /etc/named.conf
...
options {
listen-on port 53 { any; };
listen-on-v6 port 53 { none; };
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";
recursing-file "/var/named/data/named.recursing";
secroots-file "/var/named/data/named.secroots";
allow-query { any; };
...
zone "." IN {
type hint;
file "named.ca";
};
//zone 추가
zone "encore.class4" IN {
type master; //master 1차 DNS server로 구성
file "encore.class4.zone"; //zone 파일 이름 지정
};
- /var/named => zone 설정
- 기존 형식 이용을 위해 named.empty를 활용할 수 있다.
[root@server named]# cd /var/named
[root@server named]# cp named.empty encore.class4.zone
[root@server named]# vi encore.class4.zone
[root@server named]# cat encore.class4.zone
$TTL 3H
@ IN SOA encore.class4. root.encore.class4. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS server.encore.class4. //네임 서버 지정
A 10.0.2.10
server A 10.0.2.10
www A 10.0.2.20
ftp A 10.0.2.30
mail A 10.0.2.40
3. 서비스 활성화 (named)
[root@server named]# systemctl start named.service
[root@server named]# systemctl enable named.service
4. 권한 설정
- 기존 상태
[root@server named]# ls -l encore.class4.zone
-rw-r-----. 1 root root 236 3월 7 16:08 encore.class4.zone
- 권한 변경
- chmod 660 : 접속할 수 있도록
- 그룹 named로 변경
[root@server named]# chmod 660 encore.class4.zone
[root@server named]# chown :named encore.class4.zone
[root@server named]# ls -l encore.class4.zone
-rw-rw----. 1 root named 236 3월 7 16:08 encore.class4.zone
[root@server named]# systemctl restart named.service
5. 방화벽 설정(dns)
[root@server named]# firewall-cmd --add-service=dns --permanent
success
[root@server named]# firewall-cmd --reload
확인
[root@server named]# host server.encore.class4
server.encore.class4 has address 10.0.2.10
[root@server named]# host www.encore.class4
www.encore.class4 has address 10.0.2.20
[root@server named]# host ftp.encore.class4
ftp.encore.class4 has address 10.0.2.30
[root@server named]# host mail.encore.class4
mail.encore.class4 has address 10.0.2.40
[root@server named]# host -t A www.encore.class4
www.encore.class4 has address 10.0.2.20
[root@server named]# host -v -t A www.encore.class4
Trying "www.encore.class4"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 37692
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;www.encore.class4. IN A
;; ANSWER SECTION:
www.encore.class4. 10800 IN A 10.0.2.20
;; AUTHORITY SECTION:
encore.class4. 10800 IN NS server.encore.class4.
;; ADDITIONAL SECTION:
server.encore.class4. 10800 IN A 10.0.2.10
Received 88 bytes from 10.0.2.10#53 in 0 ms
🔹 역방향 조회
- 역방향 조회 : 주소 -> 이름
- hostname 설정까지 정방향 조회와 동일
- /etc/named.conf 설정
- 변경 사항 : zone 추가
- 역방향 도메인 형식
- 최소 단위는 C 클래스
- 마지막 자리를 제외하고, 나머지 세자리 순서를 뒤집어서 기록
- 그 다음, in-addr.arpa를 postfix로 붙여준다.
- 최소 단위는 C 클래스
- 10.0.2.0
- 마지막 자리 제외: 10.0.2
- 나머지 세자리 순서 뒤집기: 2.0.10
- postfix 추가 : 2.0.10.in-addr.arpa
[root@server named]# cat /etc/named.conf
...
zone "2.0.10.in-addr.arpa" IN {
type master;
file "10.0.2.0.zone";
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
- /var/named => zone 설정
- 10.0.2.0.zone 파일 작성
- 정방향 조회 시 작성했던, encore.class4.zone 파일 활용
- 역방향은 PTR (PTR 리코드: 리버스 도메인) 작성
[root@server named]# cp encore.class4.zone 10.0.2.0.zone
[root@server named]# cat 10.0.2.0.zone
$TTL 3H
@ IN SOA encore.class4. root.encore.class4. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS server.encore.class4.
A 10.0.2.10
10 PTR server.encore.class4.
20 PTR www.encore.class4.
30 PTR ftp.encore.class4.
40 PTR mail.encore.class4.
- 이후부터(서비스활성화, 권한설정, 방화벽설정) 정방향 조회와 동일
참조
- Inverse Domain 설정 - 안녕리눅스 3 User Guide (gitbook.io)
- 25. Linux - DNS 서버 구축 3, Zone 파일 생성 및 구축 결과 확인 (tistory.com)
728x90