2022. 11. 29. 17:23ㆍ리눅스(Linux)
DNS : Domain Name System
- Domain Name → IP주소로 변환(정방향 조회) / 일반적인 클라이언트가 조회하는 방식
- IP주소를 Domain Name으로 변환(역방향 조회) / 특수한 상황에서만 사용이 된다
- DNS 사용 Port : TCP/53(영역전송), UDP/53(영역전송, DNS Query 전송)
- Internet 통신은 (TCP/IP) 프로토콜을 이용하여 통신을 진행하므로, 클라이언트에게 IP주소 체계를 쉽게 사용 할 수 있도록 도움을 주기위해 반드시 필요하다.
- 회사에서 관리해야할 도메인은 서브도메인이다.
- bind, named 패키지를 사용
$ Domain Name 구조
www.(Host Name) . Google .com(Domain Name) . (Root Domain)
호스트네임
WEB : www
MAIL : mail
FTP : ftp
$ DNS Record 종류
SOA Record (Start of Authority)
- Domain을 관리할 수 있는 권한을 정의, Slave DNS서버(보조네임서버)와의 연결에 관한 값을 정의
- 모든 DNS의 첫 번째 레코드로 설정.
NS Record (Name Server)
- 해당 Domain에 대한 영역 파일을 보유하고 있는 Server를 지칭하는 Record, SOA와 마찬가지로 필수적인 Record가 된다.
* SOA, NS Record는 필수 레코드
A(AAAA) Record
- 실질적으로 가장 많이 사용되는 Record로써, Host Name에 대한 IP주소를 Mapping하는 Record이다.
- Host Name은 Service를 구분하는 이름이므로 A Record를 이용하여 각 Service가 실행되고 있는, Server의 IP 주소와 Host Name을 Mapping한다.
- A Record- www 192.168.1.129 (Web Server IP) www + kgitbank.com = FQDN : www.kgitbank.com
- A Record- ftp 192.168.1.130 (FTP Server IP) ftp + kgitbank.com = FQDN : ftp.kgitbank.com
- A Record (IPv4), AAAA Record (IPv6)
FQDN : 모든 리소스가 정의된 도메인 (www 라는 호스트 네임 안적어도 접속이 가능하게 만듬)
CNAME Record
- A Record에서 Mapping 된 Host Name의 별칭을 지칭하는 Record
MX Record
- MX Record는 메일 서버를 지칭하는 Record로써 메일서버의 IP주소를 Mapping하는 용도로 사용된다.
SPF Record (Sender Policy Framework) : 메일서버등록제 Record
- 메일서버 정보를 사전에 DNS에 공개 등록함으로써 수신자료 하여금 E-Mail에 표시된 발신지 정보가 실제 메일서버의 정보와 일치하는지를 확인할 수 있도록 하는 인증기술
- 발신자 : 자신의 메일서버 정보와 정책을 나타내는 SPF Record를 해당 DNS에 등록
- 수신자 : E-Mail 수신 시 발송자의 DNS에 등록된 SPF Record 를 확인하여 해당 E-Mail에 표시된 발송 IP와 대조하고 그결과값에 따라 수신여부를 결정
$ dns 설정 파일
# /etc/hosts
IP주소 문자주소 [문자주소] ... [문자주소]
- 컴퓨터에 입력되는 FQDN을 특정 IP로만 고정적으로 연결시키기 위해 사용
- 리눅스에서 dns보다 먼저 호스트명을 ip로 풀어주는 파일
# /etc/resolv.conf
nameserver <DNS IP>
* DNS server 주소 예시
168.126.63.1 (KT DNS)
8.8.8.8 (google DNS)
- 요청할 dns서버를 지정할 때 사용
- IP 설정에 입력된 DNS server 주소가 저장, 실제 DNS server 연결 시 참조하는 파일
- network 데몬이 실행될 때 마다 DNS server 주소 정보가 다시 로드
/etc/named.conf
# vi /etc/named.conf
12 options {
13 listen-on port 53 { any; };
- 127.0.0.0.1 (IPv4 루프백 주소), any로 바꿔줘야 클라이언트 측이 DNS 검색 가능해짐
- DNS는 내부에서 사용하기 위해 쓰는 것이 아니라 외부에서 공개로 사용하기 때문에 any로 풀어줘야 한다.
14 listen-on-v6 port 53 { ::1; };
- ::1 (IPv6 루프백 주소)
15 directory "/var/named";
- 실제 작업 디렉토리
16 dump-file "/var/named/data/cache_dump.db";
- 캐시 정보가 저장되는 위치
17 statistics-file "/var/named/data/named_stats.txt";
- 상태정보 관련 파일 저장 위치
18 memstatistics-file "/var/named/data/named_mem_stats.txt";
19 recursing-file "/var/named/data/named.recursing";
20 secroots-file "/var/named/data/named.secroots";
21 allow-query { any; };
- 13번 줄과 비슷한 역할, 쿼리에 대한 허용
22 recursion yes;
- no로 바꿔서 운영해야함
- yes: 캐시서버의 역할을 허용, no:캐시서버의 역할을 수행하지 않음,
- 특정 클라이언트가 내가 관리하는 도메인이 아닌 다른 도메인을 질의 했을 때 무시한다.
- 등록해놓은 질의만 받아들이고 그거에 대한 응답만 수행한다.
43 zone "." IN {
44 type hint;
45 file "named.ca";
46 };
- type hint (cache server)
- ‘.’에대한 정보를 named.ca에서 가지고 있다.
48 include "/etc/named.rfc1912.zones";
49 include "/etc/named.root.key";
- 원래는 named.conf에 모두 넣어둬야 하는데 그러게하기엔 너무 파일이 커져서 나눠서 관리
- include 함수를 사용하여 지정 파일을 참조하도록 설정
$ Recursion 정책 설정
# vi /etc/named.conf
12 acl AllowRecursion {
- options 위에 새로 정의
13 192.168.1.150;
- 대역대로도 설정가능(192.168.1.0/24)
14 };
26 recursion yes;
- 리큐전 허용으로 변경
27 allow-recursion { AllowRecursion; };
- 밑에 새로 정의, 내가 설정한 리큐전 규칙만 허용하는 정책
/etc/named.rfc1912.zones
vi /etc/named.rfc1912.zones
43 zone"itbank.com" IN {
- 정방향 조회영역, 내가 사온 도메인네임 기입
44 type master;
- 직접 도메인을 운영한다는 정의 , (master / hint / slave)
- master : 실제 내가 이 도메인을 운영한다.
- hint : cache Server 역할을 한다.
- slave : 이중화 구성할 때 사용한다.(backup Server),
특정 도메인에대한 정의를 하지 못함. 변경사항을 부여 못함.
45 file "itbank.zone";
- .zone (정방향 영역파일)
- 레코드를 정의하고 있는 영역 파일 명시 , 작업파일 위치 /var/named/
46 allow-transfer { 192.168.1.150; };
- 영역파일을 전송할 곳, Slave DNS Server IP
47 };
48
49 zone "1.168.192.in-addr.arpa" IN {
- 역방향 조회영역, 보통 Mail 서버 설정
50 type master;
51 file "itbank.rev";
- .rev (역방향 영역파일)
52 allow-transfer { 192.168.1.150; };
53 };
DDNS : DHCP 같은 동적인 IP 주소를 동적으로 매핑시켜주는 서비스 ex)공유기
allow-update
- ddns를 구축할 때 웹서버에서 dhcp를 사용한다면 ip가 바뀔 때 자동으로 업데이트 해준다.
$ 작업 파일 설정
# cd /var/named
- 작업 파일 위치
# cp named.localhost itbank.zone
# cp named.localhost itbank.rev
- 기존 작업파일의 형식을 쓰기 위해 복사후 작업한다.
# ls -ld ./itbank*
-rw-r----- 1 root root 152 7월 6 10:57 ./itbank.rev
-rw-r----- 1 root root 152 7월 6 10:57 ./itbank.zone
- 소유권이 named가 아니면 인식을 못할 수 가 있음
# chown .named ./itbank.*
-rw-r----- 1 root named 152 7월 6 10:57 itbank.rev
-rw-r----- 1 root named 152 7월 6 10:57 itbank.zone
- named.conf 소유권이 root named 라서 연동이 잘되고 인식되게하려면 똑같이 소유권 맞춰줘야 함
# vi ./itbank.zone
$TTL 1D
- 영역파일 유효기간 1day라는 뜻
@ IN SOA ns1.itbank.com. root (
- @ 오리진, 도메인네임 의미
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
IN NS ns1.itbank.com.
- 두개 이상 선언 시 마스터, 슬레이브 운용 가능
- NS 선언 한 수 만큼 FQDN 추가 선언
ns1 IN A 192.168.1.100
- www(호스트 네임) + 도메인 네임 = FQDN(IP)
www IN A 192.168.1.100
aaa IN CNAME www.itbank.com.
- 별칭 지정, aaa.itbank.com → www.itbank.com 으로 접속, alias기능
- 도메인 네임은 /etc/named.rfc1912.zones 여기에 명시되어 있음
root (
- SOA 레코드값, 권한 정의, Master-Slave 연결 구조 정의
- root 부분에 E-Mail address 작성(문제가 발생시 알려줄 주소)
- root라고 작성하면 각 계정 내부에 있는 메일함에 보냄
0 ; serial
- 변경사항 횟수, master에서 변경사항을 수정한 후 수동으로 serial번호를 바꿔주면 slave에서도 변경사항이 변경된다.
- 보통 변경한 날짜로 기입
1D ; refresh
- master-slave 변경사항이 맞는지 새로고침으로 업데이트
1H ; retry
- 새로고침을 시도했는데 연결이 안되었을 경우, 1시간단위로 재시도
1W ; expire
- 일주일동안 master-slave 연결이 안되면 폐기
3H ) ; minimum
- 누군가 정보를 가져갈 때 남는 캐시를 가지고 있는 시간 설정
# vi ./itbank.rev
$TTL 1D
@ IN SOA ns1.itbank.com. root (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
IN NS ns1.itbank.com.
100 IN PTR ns1.itbank.com.
- rfc 파일에서 역방향을 명시했을 때 1.168.192라고 정의해줬기 때문에
100 IN PTR www.itbank.com.
- 100을 적고 시작
# systemctl start named
# firewall-cmd --permanent --add-service = dns
# firewall-cmd --reload
# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens32
sources:
services: dhcpv6-client dns http ssh
ports: 5044/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
$ Cient 환경에서 테스트
[ win에서 DNS 주소를 192.168.1.100으로 변경 ]
C:\Users\ITBANK_TAEHEI>nslookup
기본 서버: www.itbank.com
Address: 192.168.1.100
> www.itbank.com
서버: www.itbank.com
Address: 192.168.1.100
이름: www.itbank.com
Address: 192.168.1.100
> www.google.com
서버: www.itbank.com
Address: 192.168.1.100
*** www.itbank.com이(가) www.google.com을(를) 찾을 수 없습니다. Query refused
- win환경 cmd 창
- 리큐전 acl로 192.168.1.150만 허용했기때문에 다른주소는 검색할수가 없음
[ Linux 192.168.1.150 ]
#vi /etc/resolv.conf
# Generated by NetworkManager
nameserver 192.168.1.100
- 재부팅시 원상 복구
- 일시적인 테스트를 위해 변경, 원래 우선순위로 위에다가 적어두면됨
# nslookup
> google.com
Server: 192.168.1.100
Address: 192.168.1.100#53
Non-authoritative answer:
Name: google.com
Address: 172.217.27.46
Name: google.com
Address: 2404:6800:4005:808::200e
- 검색이 가능해짐
$ DNS 이중화 구성
- master :192.168.1.100
- slave :192.168.1.150
[ Master 서버 ]
# cd /var/named
# vi itbank.zone
$TTL 1D
@ IN SOA ns1.itbank.com. root (
0 ; serial
60 ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
IN NS ns1.itbank.com.
IN NS ns2.itbank.com.
ns1 IN A 192.168.1.100
ns2 IN A 192.168.1.150
www IN A 192.168.1.100
aaa IN CNAME www.itbank.com.
# vi itbank.rev
$TTL 1D
@ IN SOA ns1.itbank.com. root (
0 ; serial
60 ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
IN NS ns1.itbank.com.
IN NS ns2.itbank.com.
100 IN PTR ns1.itbank.com.
150 IN PTR ns2.itbank.com.
100 IN PTR www.itbank.com.
# vi /etc/named.rfc1912.zones
43 zone"itbank.com" IN {
44 type master;
45 file "itbank.zone";
46 allow-transfer { 192.168.1.150; };
- slave 서버 ip / 작업파일 전송
47 also-notify { 192.168.1.150; };
- slave 서버 ip / 변경사항을 전송
48 };
49
50 zone "1.168.192.in-addr.arpa" IN {
51 type master;
52 file "itbank.rev";
53 allow-transfer { 192.168.1.150; };
54 also-notify { 192.168.1.150; };
55 };
[ Slave 서버 ]
# yum -y install bind-*
# firewall-cmd --permanent --add-service=dns
# firewall-cmd --reload
# vi /etc/named.conf
12 options {
13 listen-on port 53 { any; };
14 listen-on-v6 port 53 { ::1; };
15 directory "/var/named";
16 dump-file "/var/named/data/cache_dump.db";
17 statistics-file "/var/named/data/named_stats.txt";
18 memstatistics-file "/var/named/data/named_mem_stats.txt";
19 recursing-file "/var/named/data/named.recursing";
20 secroots-file "/var/named/data/named.secroots";
21 allow-query { any; };
22
23 recursion no;
# vi /etc/named.rfc1912.zones
43 zone "itbank.com" IN {
44 type slave;
45 file "slaves/itbank.zone.slave";
46 masters { 192.168.1.100; };
- master 서버 ip / 작업 파일 로드
47 masterfile-format text;
- 바이너리 형식의 문자를 우리가 알아볼수 있는 아스키형태 문자로 포맷시키는 명령문,
실무에선 안 씀
48 notify yes;
- 변경정보를 로드하겠다는 의미
49 };
50
51 zone "1.168.192.in-addr.arpa" IN {
52 type slave;
53 file "slaves/itbank.rev.slave";
54 masters { 192.168.1.100; };
55 masterfile-format text;
56 notify yes;
57 };
# systemctl restart named
# systemctl restart named
# cd /var/named/slaves
- 이 디렉터리에 master 서버로부터 로드된 작업 파일이 있는지 확인
'리눅스(Linux)' 카테고리의 다른 글
[Centos 7] Apache 서버 구동 (httpd 패키지) (0) | 2022.12.01 |
---|---|
Web Server (웹 서버) & WAS Server (왓스 서버)& 웹 프로그래밍 (0) | 2022.11.30 |
[Centos 7] PAM (Pluggable Authentication Modules) 실습 (0) | 2022.11.29 |
[Centos 7] Linux Authentication Module - PAM (Pluggable Authentication Modules) (0) | 2022.11.29 |
[Centos 7] Linux Backup 실습 (Tar, xfsdump, xfsrestore, dd, TimeShift, Rsync) (0) | 2022.11.29 |