DNS
DOMAIN 주소를 IP주소로 변환해주는 시스템
DNS의 구성요소
- 도메인 네임 공간DOMAIN NAME SPACE = 리소스 레코드Resource Rocord
- 네임서버Name Server = DNS Server
- 리졸버Rsolver
참고하면 좋은 사이트
https://wiki.kldp.org/KoreanDoc/html/PoweredByDNS-KLDP/index.html
DNS 서버
DNS 클라이언트가 도메인 주소를 요청하면, 가지고 있는 도메인 주소에서 찾아 IP 주소 (+ 기타 정보)를 알려주는 서버
(없을 시, 상위 DNS 서버에 질의)
디렉터리 구조와 유사한 네임서버 구조
(최상위 root domain은 . 이다. 그러므로, http://www.naver.com은 사실 http://www.naver.com. 을 의미)
(최상위 root domain은 전세계적으로 13개 존재하며 주로 미국이 많이 갖고 있고 아시아에서는 일본이 1개 있음)
Root Domain은 Top level Domain의 정보를 가지고, Top level Dmain은 그 하위 Domain 정보를 가진다.
이런 구조로 정보들이 각 도메인의 네임서버(NS:Name Server)로 분산, 관리된다.
Domain Name Resolving
TCP/IP 패킷에는 도메인명을 위한 공간이 없다.
때문에, 도메인명에 대한 IP 변환작업을 선행해야 한다.
resolver: OS에 들어있는 라이브러리
애플리케이션이 도메인을 접속할 때 resolver가 동작해서 해당 도메인에 대한 IP주소를 얻어온다. 이 과정을 resolving이라고 한다.
resolver는 OS에 자동으로 들어있어서 도메인을 치면 무조건 실행한다.
클라이언트가 도메인을 요청하면
1. hosts 파일 확인 ( /etc/hosts 윈도우는 \systemroot\system32\drivers\etc\hosts)
2. DNS 캐시 확인 ( /etc/resolv.conf ) ← 해당 파일은 직접 편집하지 않는 추세
3. Local DNS Server에 질의 ( nmtui 또는 /etc/sysconfig/network-scripts/ifcfg-인터페이스명 에 등록된 dns 주소 참고 )
( Local DNS 서버가 ABC.B 도메인 정보를 찾는 과정 = resolving 과정
1) Local DNS → 상위 DNS 서버 (정보가 없을때) → A 도메인 서버에 질의해보라는 응답
2) Local DNS → A 도메인 서버 (정보가 없을때) → B 도메인 서버에 질의해보라는 응답
3) Local DNS → B 도메인 서버에서 ABC.B 서브 도메인에 대한 IP 주소를 반환
4) Local DNS는 IP주소 응답을 클라이언트에게 반환 )
( 똑같은 도메인 주소 ABC.B에 대한 IP Resolving 결과는 매번 다를 수 있는데, 대다수 DNS 서버는 미러링 서버로 운영되고 부하를 줄이기 위해 한 도메인에 다수의 IP를 매핑하였기 때문 )
( 외부 인터넷 접속이 안될 때 : 네트워크 > 게이트웨이 > DNS 순으로 확인 )
( + Rocky Linux9, Centos9 에서는 /etc/sysconfig/network-scripts/ifcfg-인터페이스명 파일이 없고 다른 방식으로 설정하게 되었다고 한다
nmtui 또는 nmcli 사용 ( 참고 : https://svrforum.com/os/361727 )
ex) nmcli con mod 인터페이스명 ipv4.method manual ipv4.address 고정IP주소/prepix gw4 게이트웨이주소 ipv4.dns "dns주소1 dns주소2" )
도메인 질의 명령어
nslookup, dig, host
Resource Record 종류
SOA : 도메인 시작
NS : 네임서버
A : IPv4
AAAA : IPv6
PTR : 도메인 주소
MX : 메일서버
TXT : 스팸메일 확인할 때 사용
CNAME : 별칭
DNS 주소 에러 실습 : vi /etc/resolv.conf
nameserver 없는 ip주소 아무거나 설정
systemctl restart network 하여 초기화하면
/etc/resolv.conf 의 내용이 자동 복원되고 yum 다운로드가 정상적으로 되는 것을 확인할 수 있다.
nslookup, dig 실습
=> 윈도우와 달리 centos7과 rockey8에서는 yum으로 설치해야 한다
yum -y install bind-utils
=> dig의 출력형태가 dns 서버 설정파일 형태가 동일하므로 익숙한 dig 명령어를 쓰는 것을 권장 (비대화형만 지원)
실습) 총 4대를 각기 다른 host명으로 셋팅하여 준비하고 DNS 서버 설치하기
( centos-ns1, centos-ns2, rocky-ns1, rocky-ns2 )
hostnamectl set-hostname 호스트명
ex) hostnamectl set-hostname test-name.net
네트워크 재시작
Centos7은 systemctl restart network
Rocky linux8은 systemctl restart NetworkManager
( Rocky 는 재시작해도 ip a에 이전 ip정보가 남아있어 reboot까지 해주었다 )
ip는 192.168.100.3 ~ 100.6으로 순서대로 설정
centos-ns1, rocky-ns1에서 전체 셋팅하고
centos-ns2와 rocky-ns2는 도메인명만 땡겨오는 형식으로 백업 서버 용도로 사용한다.
DNS 서버는 53번 udp/tcp 포트를 사용한다
udp : tcp보다 빠르지만, 비신뢰성. 안정성이 tcp보다 나쁘다. ( DNS 도메인 질의시 기본 사용 )
tcp : udp보다 느리지만, 신뢰성. 안정성이 udp보다 좋고 대용량에 적합 ( DNS 동기화 할 때 사용, 도메인 질의 응답이 512byte를 넘어갈 경우 tcp로 도메인 질의 )
yum -y install net-tools
yum -y install bind bind-chroot bind-utils
// netstat 패키지 설치
// dns 네임서버 관련 패키지 설치 ( bind ), bind-chroot 보안강화, bind-utils 다양한 bind 도구들
rpm -ql bind
rpm -ql bind-chroot
rpm -ql buind-utils
// -ql 옵션으로 설명을 볼 수 있다
systemctl enable --now named
systemctl status named
netstat -nltup | grep named
패키지를 전부 설치한 후, 네임서버 서비스 실행, status에서 running (active) 상태를 확인한다.
netstat 에서 named로 grep하여 linsten 포트들 정보를 확인한다.
네임서버 전체 설정 파일: /etc/named.conf
13| listen-on port 53를 { 192.168.100.3; }; ← 자신의 ip로 변경 (any일 경우 모든 ip의 53번 포트가 열림)
21| allow-query를 { any; }; ← any로 변경
35| nssec-enable no;
36| dnssec-validation no;
centos-ns1 에서 systemctl stop firewalld 방화벽을 잠깐 내리고
window에서 nslookup을 통해 centos-ns1을 네임서버로 지정한 뒤, naver.com에 대해 질의해보았다.
정상적으로 응답이 돌아온다.
네임서버 관련 파일들
네임서버 전체 설정 : /etc/named.conf
서버 데몬 프로그램 : /usr/sbin/named
도메인 설정 파일 검사 프로그램 : /usr/sbin/named-checkconf
존파일 설정 파일 검사 프로그램 : /usr/sbin/named-checkzone
존파일이 저장된 디렉터리 : /etc/named/
rocky8-ns1에서 설치시, yum 대신 dnf로 변경되었다
다만 심볼릭링크가 걸려있어 yum을 사용할 수 있다
rocky8-ns1
firewall-cmd --permanent --add-service=dns
firewall-cmd --reload
firewall-cmd --list-services
방화벽에 dns 서비스를 추가했다