이번 주 월요일은 학원 휴일이었고, 화요일부터 이번 주 시작!
오늘은 C프로그래밍실습 중간고사라서 9시 반부터 1시간동안 시험을 보고나서, 수업에 참석했다.
이번 주도 새책! 일주일에 한 권씩 새 책을 배운다 ㅋㅋㅋㅋㅋㅋㅋ
강사님도 새로운 분이 오셨는데, 이전 선생님과 수업방식이 정말 다르다.
이전 선생님은 책을 위주로 강의를 하신 반면, 새로 오신 선생님은 실습을 하면서 책을 참고하는 정도?
암튼 DNS 서버에 대해 알아보고, 실습했다.
집에 빨리 가고싶으니까 서비스 flow랑 명령어만 간단하게 정리해야겠다.
DNS ( Domain Name System)
정방향 조회: 호스트 이름을 IP 주소로 변환해주는 DNS 조회 방식
역방향 조회: IP 주소에 대한 호스트 이름을 조회, in-addr.arpa 도메인에서 각 IP 주소의 대역대별로 IP 조회하도록 구성됨. 역방향 조회를 사용하려면 포인터 레코드가 필요.
DNS 캐시
모르는 이름에 대한 IP 주소가 필요할 때 DNS요청이 이루어짐. 하지만 최근 조회한 내용은 시스템이 기억하고 있는데(매번 받아오면 비효율적이기 때문), 이를 DNS 캐시라고 함. 엔드 포인트에서만 사용되는 것이 아니라, DNS 서버들도 DNS 캐시로 저장. DNS 관련된 불필요한 외부 트래픽 감소시킬 수 있음.
DNS 레코드
A, AAAA | 특정 호스트의 주소 (IPv4, IPv6) |
CNAME | 호스트의 별칭(Alias) 정보 (Canonical Name) |
MX | 메일 교환기(mail exchanger) |
NS | 도메인의 네임 서버 (name server) |
PTR | 도메인 이름에 대한 포인터 (Pointer) |
SOA | 영역의 권한 시작 정보 (Start of Authority) |
TXT | 텍스트 문자열 |
DNS 조회방법
host, dig, nslookup
host 사용법
host [option] name [server]
host google.com 8.8.8.8
Trying "naver.com"
Using domain server:
Name: 8.8.8.8
Address: 8.8.8.8#53
Aliases:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42330
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;naver.com. IN ANY
;; ANSWER SECTION:
naver.com. 153 IN SOA ns1.naver.com. webmaster.naver.com. 2020072005 21600 1800 1209600 180
Received 77 bytes from 8.8.8.8#53 in 55 ms
쿼리를 요청할 dns server 를 지정해 줄 수 있다. -a 옵션을 사용하면 all 모두 보인다.
nslookup 사용법
nslookup [opriont] [name] [server]
한 줄로 입력해도 되고, nslookup 하면 커멘드라인이 > 로 변한다. 대화형으로 쿼리 실행!
이 때 dns server 를 지정해도 되고, 검색하고 싶은 도메인 네임을 입력해도 된다.
dig 명령어 사용법
dig [@server] [option] [name]
dig @8.8.8.8 google.com
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-16.P2.el7 <<>> @8.8.8.8 naver.com ns
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 29044
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;naver.com. IN NS
;; ANSWER SECTION:
naver.com. 21440 IN NS ns2.naver.com.
naver.com. 21440 IN NS ns1.naver.com.
;; Query time: 53 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Tue Jul 21 11:16:29 KST 2020
;; MSG SIZE rcvd: 74
# trace 가능
dig @10.0.2.4 naver.com +trace | more
DNS 서버 구성
1. BIND 설치
yum info bind
yum -y install bind
bind 패키지가 설치되면 DNS 서비스를 제공하기 위한 named 서비스를 사용할 수 있다.
관련 설정 파일들
/etc/named.conf
/etc/named.rfc1912.zones
/var/named/*
data dynamic named.ca named.empty named.localhost named.loopback slaves
설치 시 생성되는 파일들이다. ( 내가 만든 적 없는데 있었음)
named.empty 가 설정 뼈대같은 거고, 이거 복사해서 설정하면 된다.
cp named.empty data/hyeonjoeng.kr.zone
cp named.loopback data/hyeonjeong.kr.rev
named.empty 의 내용
cat named.empty
$TTL 3H
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS @
A 127.0.0.1
AAAA ::1
named.rfc1912.zones 내용
// named.rfc1912.zones:
//
// Provided by Red Hat caching-nameserver package
//
// ISC BIND named zone configuration for zones recommended by
// RFC 1912 section 4.1 : localhost TLDs and address zones
// and http://www.ietf.org/internet-drafts/draft-ietf-dnsop-default-local-zones-02.txt
// (c)2007 R W Franks
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
zone "localhost.localdomain" IN {
type master;
file "named.localhost";
allow-update { none; };
};
zone "localhost" IN {
type master;
file "named.localhost";
allow-update { none; };
};
zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
type master;
file "named.loopback";
allow-update { none; };
};
zone "1.0.0.127.in-addr.arpa" IN {
type master;
file "named.loopback";
allow-update { none; };
};
zone "0.in-addr.arpa" IN {
type master;
file "named.empty";
allow-update { none; };
};
원래는 /etc/named.conf 에서 모든 설정을 했지만, 그럴 시 오류나고 꼬이는 경우가 많아져서 파일의 내용을 나누게 되었다고 한다. named.conf 에 기본 설정이 있고, 이젠 이 파일은 거의 수정하지 않는다고 한다.
대신 /etc/named.rgc1912.zones, /var/named/* 이 파일들을 수정한다.
2. 새로운 도메인 추가 설정
1. /etc/named.rgc1912.zones 파일에 zone 추가해주기!
// 2020.7.21 hyeonjeong added
//정방향 조회 설정
zone "hyeonjeong.kr" IN {
type master;
file "data/hyeonjeong.kr.zone";
allow-update { none; };
};
//역방향 조회 설정. arpa style 로 써야 하기 때문에 IP 주소를 뒤에서부터 써준다.
zone "4.2.0.10.in-addr.arpa" IN
type master;
file "data/hyeonjeong.kr.rev";
allow-update { none; };
};
2. /var/named 에 zone 파일 생성해서 설정해주기!
( * 유의점: zone 파일 권한 중 owner - group 을 named 로 줘야 한다. )
[root@web named]# ls -l data/hyeonjeong.kr.*
-rw-r-----. 1 root root 176 Jul 21 14:29 data/hyeonjeong.kr.rev
-rw-r-----. 1 root named 195 Jul 21 14:01 data/hyeonjeong.kr.zone
// data/hyeonjeong.kr.rev 파일의 그룹 권한이 root 이기 때문에 chgrp 명령으로 named로 바꿔줌
[root@web named]# chgrp named data/hyeonjeong.kr.rev
[root@web named]# ls -l data/hyeonjeong.kr.*
-rw-r-----. 1 root named 176 Jul 21 14:29 data/hyeonjeong.kr.rev
-rw-r-----. 1 root named 195 Jul 21 14:01 data/hyeonjeong.kr.zone
/var/named/data/hyeonjeong.kr.zone
정방향 설정
$TTL 3H
@ IN SOA @ master.hyeonjeong.kr. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS ns.hyeonjeong.kr.
A 10.0.2.4
ns A 10.0.2.4
/var/named/data/hyeonjeong.kr.rev
역방향 설정
$TTL 3H
@ IN SOA @ master.hyeonjeong.kr. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS ns.hyeonjeong.kr.
PTR hyeonjeong.kr.
3. 설정이 잘 되었는 지 확인하기!
//CASE1 : OK
named-checkzone hyeonjeong.kr /var/named/data/hyeonjeong.kr.zone
zone hyeonjeong.kr/IN: loaded serial 0
OK
//CASE2: 뭐 잘못됨 ㅋㅋ
named-checkzone hyeonjeong.kr /var/named/data/hyeonjeong.kr.rev
zone hyeonjeong.kr/IN: NS 'ns.hyeonjeong.kr' has no address records (A or AAAA)
zone hyeonjeong.kr/IN: not loaded due to errors.
[root@web named]# named-checkconf /etc/named.rfc1912.zones
/etc/named.rfc1912.zones:32: '{' expected near 'type'
[root@web named]# named-checkconf /etc/named.conf
/etc/named.rfc1912.zones:32: '{' expected near 'type'
named-checkzone ZoneName FileName |
named-checkconf FileName |
위의 두 명령어를 활용해도 되지만,
systemctl restart named.service 를 해보면 된다.
서비스 재실행이 잘 되면 문제가 없는거고, 잘 안됐으면 오류가 날거다.
나는 } 이거 기호 하나 빠뜨려서 오류가 났었다.
항상 그렇지만, 앞으로는 괄호 같은거나 ; 등을 더 유심히 봐야겠다.
3. DNS 서비스 동작 확인
host hyeonjeong.kr
nslookup hyeonjeong.kr
dig hyeonjeong.kr
DNS 서버 관리
DNS 서버에 장애가 발생한 경우를 대비하여 DNS 서버를 이중화 할 필요가 있다.
DNS 서버를 이중화하면 부하를 분산시키는 효과도 있다.
따라서 Master DNS 서버와 Slave DNS 서버를 구성하여 영역전송을 할 수 있다.
Master DNS 설정
영역을 전송하려면 기존 DNS 서버(Master)에서 영역 전송에 대한 허가를 해주어야 한다.
/etc/named.rfc1912.zones 에서 Allow-transfer { slave-DNS server address; }; 를 추가해준다.
slave 에서는 /etc/named.rfc1912.zones 에 아래의 slave type 을 적어준다.
zone "hyeonjeong.kr" IN {
type slave;
masters { master-dns-address; };
file "slaves/hyeonjeong.kr.slave";
};
'[혁신성장 청년인재] 인공지능을 활용한 보안전문가 양성과정' 카테고리의 다른 글
Day13: 리눅스 관리자 | FTP | NFS | 쉘프로그래밍 (0) | 2020.07.27 |
---|---|
Day12: 리눅스 관리자| 메일 서버 구성 | APM 구성 | apache PHP MariaDB + 노브레이크(no.break)의 김석 대표님 멘토링 (2) | 2020.07.22 |
Day10: 리눅스 관리자 복습 & 깃허브 특강 (0) | 2020.07.19 |
Day9: 리눅스 관리자 | OpenSSH | NTP서버 | 방화벽 관리 (0) | 2020.07.19 |
Day8: 리눅스 관리자 | 부트 프로세스| RPM | YUM | 네트워크 관리 (0) | 2020.07.16 |