DNS(Domain Name System)
DNS에서
text주소 : IP주소로 이루어진 것을 A record라고 함 => 문자주소를 가지고 ip를 조회
IP주소 : text주소로 이루어진 것을 PTR record라고 함 => ip로 문자주소를 조회
=> 게이트웨이는 무조건 내부를 사용해야 하지만 DNS 서버는 같은 망이 아닌 외부망 것을 사용해도 됨!
=> 192.168.50.10에서도 DNS Server에 있는 캐시테이블을 조회하여 사용할 수 있음
=> 192.168.50.10에서 DNS Server를 192.168.10.20으로 설정)
** DNS는 문자주소를 기반으로 IP를 조회하거나 IP를 기반으로 문자주소를 조회함
** IP를 기반으로 MAC 주소를 찾는 것을 ARP, MAC 주소 기반으로 IP를 찾는 것을 RARP
** 리눅스, 유닉스, 윈도우 등 모든 운영체제에서 동일함
조회(lookup)
- 정방향조회 : 문자주소를 기반으로 IP주소를 조회
- 역방향 조회 : IP주소를 기반으로 문자주소를 조회
DNS 서버 구축(데이터베이스)
1) 프로그램설치 : bind 프로그램
2) 환경설정
- 정방향 조회영역(zone) : A record(text주소 : IP주소)
- 역방향 조회영역(zone) : PTR record(IP주소 : text주소)
test.com | ||||
정방향 조회영역 | 역방향 조회영역 | |||
www | 1.1.1.1 | 1.1.1.1 | www | |
ftp | 1.1.1.2 | 1.1.1.2 | ftp | |
telnet | 1.1.1.3 | 1.1.1.3 | telnet |
A record
=> ftp.open.net의 IP는 192.168.70.10이야!
=> 너의 IP는 xxx.xxx.xx.xx야
CNAME
CNAME은 별칭을 의미함.
Details 부분에 IP주소가 아닌 별칭
open.net의 별칭은 www.open.net이야. www.open.net의 IP는 192.168.50.20이야
한 서버의 별칭을 여러 개 지정해 놓으면 그 별칭에 대한 IP는 있어야 함.
=> open.com이랑 open.net의 별칭은 www.open.net이야.
=> 사이트가 여러 개일 때 한 곳으로 가도록 CNAME을 설정할 수 있음
NS Record
2번 라인 레코드를 보면 ns.open.net는 DNS 서버임을 파악할 수 있음.
레코드 타입을 보면 이 서버의 기능을 파악할 수 있음
=> ns record == dns record
=> 그 회사의 dns 서버를 ns라고 함
[cmd창 명령어 실행]
입력 > nslookup www.naver.com
입력 > nslookup -type=a www.naver.com
=> 위 두 개 명령어는 반환값이 동일
=> 첫 번째 명령어에서 -type=a 생략한 것
=> A record
입력 > nslookup -type=ns naver.com
=> 네이버의 서버 중 DNS 서버는 누구야?? 라고 물어보는 것
=> 네이버의 ns(nameserver)는 ns2.naver.com, ns1.naver.com이고, 그것의 IP는 125.209.248.6, 125.209.249.6야
입력 > nslookup -type=mx naver.com
=> mail server를 의미
입력 > nslookup -type=soa naver.com
DNS 특징
DNS는 분산된 계층적 구조를 가지고 있는 데이터베이스
DNS Name Resolution
내가 지정해서 사용하는 서버(회사 서버, 통신사가 제공해주는 서버)이기 때문에 Local Name Server(또는 Recursive Name Server)라고 함
DNS는 재귀적 질의와 반복적 질의로 구성되어 있음
=> 재귀적 질의는 DNS Client가 Local DNS Server에게 질문을 던지는 것
=> 반복적 질의는 DNS Server와 DNS Server 사이의 요청/응답을 반복하는 것
=> 대부분의 패킷이 UDP 사용
=> 응답메시지의 크기가 512 byte보다 크면 TCP 사용
회사가 크면 회사 자체에 DNS 서버를 가지고 있음.
직원 pc가 사용하는 서버를 DNS Resolver(Local DNS Server, Authoritative Name Server)라고 함
- Auth NS : 사내망 서버들의 주소를 등록하고 있음
- Cache NS : 외부망 서버들의 주소들을 등록
=> 서버 내에는 Cache Name Server를 생성(회사에서 이걸 구성할 수도 있고 안 할 수도 있음) → 이걸 안하면 통신 사업자의 것을 사용
DNS Server
dns client가 www.open.net에 접속하려고 하면
1. 자신의 cache를 조회
2. hosts파일을 조회
3. 없다면 Local Name Server로 이동
- Local Name Server는 Master Name Server와 Caching Name Server로 구성됨
- 이 중 Caching은 회사에서 구성할 수도 있고, 통신사 것을 사용할 수도 있음
- 우리 회사의 사내망 주소를 조회하려면 Master NS의 도움을 받으면 됨
- 우리 회사 사이트가 아니면, 이전에 직원들이 조회한 기록을 Caching NS에서 조회해보고, 없다면 Master가 작동
4. Master가 다운될걸 대비하여 Slave에 백업시켜 놓고 이 둘은 tcp로 운영됨
DNS Server 설치 영역
DNS는 DMZ 구간에 구성을 할 수 있고, Intranet에 구성할 수도 있음.
- 인트라넷은 직원을 위한 것, DMZ는 서비스 차원에서 제공
DNS Message
DNS에는 메시지가 2가지
- 질의 메시지 : header와 질의section으로 구성
- 응답 메시지 : header와 질의, 응답, 권한, 추가section으로 구성(section 4가지)
질의 section | 질의와 응답 메시지에 모두 존재 |
응답 section | 응답 메시지에 존재, 서버가 클라이언트에게 응답 |
권한 section | 응답 메시지에만 존재, 질의에 대한 권한이 있는 서버에 대한 정보를 제공 |
추가 section | 응답 메시지에만 존재, 해석기(resolver)에서 도움이 될만한 추가적 정보 제공 |
DNS Header
Header : Transaction ID
=> Transaction ID는 질의에 대한 고유번호
=> 질문과 질문에 대한 응답의 Transaction ID는 동일
=> 한세트 파악 가능
Header : Flags
=> 1번 플래그(QR) : 0이면 질의, 1이면 응답
=> 2번 플래그(OPCode) : 0이면 정방향조회, 1이면 역방향조회 (서버상태요청:2)
=> 3번 플래그(TC) : 0이면 udp, 1이면 tcp로 운영
=> 4번 플래그(RD) : 1이면 반복적 질의를 진행(너가 모르면 다른 서버에게 물어봐서라도 알려줘)
=> 5번 플래그 : 1이면 예약 필드
Section : Queries
=> wireshark.org에 대한 IP주소를 요청
=> A record : 정방향조회
Section : Answers
=> 요청에 대한 응답
=> wireshark.org에 대한 IP 주소 응답 : 128.121.50.122
[정리]
=> No 1,2를 보면 query와 response로 나눠지는 것을 확인할 수 있음
=> 여기서 4.2.2.1은 DNS Server
=> 1번 플래그(QR) : 1이므로 응답메시지
=> 2번 플래그(OPCode) : 0이므로 정방향조회
=> 3번 플래그 : 신뢰할 수 있는 서버를 통해서 값을 얻었는지 아닌지
=> 5번 플래그 : RD는 클라이언트가 반복적 질의를 요청함을 의미.
=> 6번 플래그 : 그에 맞춰 응답함. RA는 반복적 요청이 활성화되어 진행됨을 의미
=> 10번 플래그 : Reply code(RCODE), 오류가 존재하는지 표시
Reply code(RCODE) | ||
0 | NoError | 오류 없음 |
1 | FormErr | 형식 오류(쿼리가 잘못된 경우) |
2 | ServFai | 서버실패(DNS 서버 자체 문제) |
3 | NXDomain | 네임 오류(도메인 네임이 존재하지 않는 경우) |
4 | NotImp | DNS 서버가 Query를 지원 못함) |
5 | Refused | 거부(정책적 이유로 Query 거절) |
[추가] Zeek 설명
zeek이 설치되어 있는 위치 /opt/zeek/
zeek의 환경설정 위치 /opt/zeek/etc
관제할 대역대 설정 networks.cfg
랜카드 주소 설정 node.cfg
★zeekctl.cfg 중요!!!
LogDIr : 일정시간이 지나면 백업시켜놓는 공간
SpoolDir : 실시간으로 쌓이는 트래픽
dns.log 확인
# cd /opt/zeek/spool/zeek
# nano dns.log
포스팅 이미지는 SK쉴더스 루키즈 16기 클라우드기반 시스템 운영/구축 실무 과목에서 제공된 자료입니다.