- 공기와 같이 당연하게 항상 있는 것이 있다.
- 수많은 것이 있겠지만, 그 중 하나가 DNS Server다.
- 이 DNS Server가 없다면, 무수히 많은 IP 주소를 담은 리스트를 각 PC마다 보유하고 있어야할 것이다.
- 무수히 많은 IP 주소와 함께, 무수히 많은 도메인도 존재한다.
- IP와 도메인이 매칭되어 사람이 읽기 쉬운 문자의 도메인 이름을 입력하면, 원하는 도메인으로 이동하는데, 그 과정에서 DNS Server 도움이 필요하다.
- 관련 내용은 [CISCO] DNS(Domain Name Service) 알아보기 [Packet Tracer]에서 알아보았는데, 구축하면서 느낀점은 아주 간략하게 알아보았다는 점이다.
- 테스트하고 정리하여 올리는 이 글 또한 DNS의 전부를 담은 것은 아니다. 제일 복잡했고 제일 힘겨웠다. 알게 된 것들을 정리하는 것에 의의를 두어야겠다.
[Linux DNS Server 정리 및 구축]
[도메인 체계]
참고 : 한국인터넷정보센터
[도메인 검색 흐름도]
/etc/hosts와 /etc/resolv.conf의 우선순위
/etc/hosts를 수정하기 전에 임의 도메인 주소의 IP를 알아보자.
nslookup
- www.google.com을 입력하여 IP 주소를 알아온다.
- 142.250.206.196이라는 IP 주소를 받았다.
- 과연, www.google.com이라는 도메인주소의 IP가 정말 맞는지 확인해보기 위해 Ping Test를 진행한다.
- 위에서 알아온 IP로의 Ping Test가 정상적으로 진행되었다.
- 이제, /etc/hosts 파일을 수정하여 우선순위를 알아본다.
- /etc/hosts 파일을 열어서 www.google.com의 IP 주소를 1.1.1.1이라고 변경한다.
- 실제로 1.1.1.1은 DNS를 서비스하는 IP 주소다.
- 위에서, 142.250.206.196이라는 IP를 가진 도메인의 주소가 [www.google.com]인 것을 알았다.
- /etc/hosts 파일에서 [www.google.com]의 IP를 1.1.1.1로 변경 후, Ping Test를 시도했다.
- 정상적으로 통신이 되기는 하지만, 1.1.1.1의 실제 주소는 [https://1.1.1.1/dns/] 이다.
- /etc/hosts파일에서 1.1.1.1 [www.google.com] 으로 설정되었고, [www.google.com] 으로 통신하고자 할때, 먼저 /etc/hosts파일을 참고하는 것을 확인할 수 있다.
DNS Query의 종류
- Recursive Query (재귀 쿼리)
= DNS Client 와 Local DNS Server 간 통신에 사용하는 쿼리
- Interactive Query (반복 쿼리)
= Local DNS Server 와 외부의 다른 DNS Server와 통신에 사용하는 쿼리
DNS Root Domain File
- NS(Name Space)에 대한 권한 보유 DNS Server
(Local DNS Server가 요청한 영역을 가지고 있을 경우)
= 요청 받은 쿼리에 대한 IP 주소 응답
- NS(Name Space)에 대한 권한이 없는 DNS Server
(Local DNS Server가 요청한 영역을 가지고 있지 않을 경우)
= Root Hint 파일을 이용하여 IP 주소를 응답 받아서 전달
/etc/named.conf
- 참조할 Root Domain에 대한 설정파일.
zone "." IN
= Root Domain 정의 하나의 온점으로 지정 / 존에 대한 클래스를 정함 / Internet Class의 약자
type hint;
= Root Zone 자신을 포함하면서, Top-level Domain에 대한 서버의 힌트를 포함하고 있다는 의미의 Zone type
file "named.ca";
= Root Zone에 대한 힌트를 담고 있는 파일 지정
};
more /var/named/named.ca
- Local DNS Server에서 가지고 있지 않은 DNS 정보는 /var/named/named.ca 에 있는 Root Hint를 통하여 요청 받은 IP 주소를 찾아간다.
[종합 정리]
1.Recursive Query를 통하여, 내부에서 요청한 Query를 처리한다.
2.처리할 수 없으면, Interactive Query를 통하여 외부 DNS Server와 통신하여 IP주소를 받는다.
3.외부 DNS Server로 통신할 때의 기준은 두 개의 파일이다.
3.1/etc/namd.conf과 /var/named/named.ca다
3.2 /etc/namd.con 에서 Root Domain에 대한 영역과 그에 대한 힌트 파일을 확인한다.
3.3 /var/named/named.ca 파일 내부에 있는 Root Hint를 참고하여 IP를 받아온다.
DNS Server 구축하기
1. DNS Server 설치하기
yum -y install caching-nameserver
yum -y install bind*
- 위 명령어 모두 DNS Server를 설치할 수 있는 명령어다.
- 둘 중 하나의 명령어를 입력하여 DNS Server를 설치한다.
2. DNS Server Main File 수정
vim /etc/named.conf
- 설치 후, 위의 파일을 열어보면 다음과 같이 설정되어있다.
- Port 번호 53(DNS)를 Localhost에서만 Listening 상태로 설정되어있다.
- allow-query도 마찬가지다.
- 두 개의 설정을 모든 IP로부터 오는 요청을 응답하도록 변경한다.
listen-on port 53 { any; };
-모든 IP로부터 네임 서버로서 응답
allow-query { any; };
-네임 서버가 제공하는 도메인 정보에 대한 질의 가능 클라이언트 지정
-any로 모든 IP 가능
- 저장 후 DNS Server를 실행한다.
1.1 짧막한 DNS Server Test
systemctl start named
- 실행하여, google.com으로 Ping Test를 해보았다.
- 먼저, 현재 설정하고 있는 DNS Server의 DNS Server IP 는 8.8.8.8 으로서, 외부에 IP를 요청하고 그 응답을 받아온다.
- 따라서, 다음과 같이 도메인 영역을 가지고 있지 않아도, Root Domain에 Query를 보내어서 정보를 받아온다.
- 만약, DNS Server 주소를 8.8.8.8에서 자신으로 변경 후 DNS Server를 끄면 어떻게 될까
- 자신의 IP [192.168.1.132] 으로 DNS Query에 대한 요청을 응답해야하는 상황이다.
systemctl stop named
- DNS Service를 중지하고, Ping으로 Test 해본다.
- 자기 자신에게 google.com에 대한 IP를 요청했으나, DNS Service를 중지하였기 때문에, IP를 알아올 수 없다.
2. 도메인 영역 지정
vi /etc/named.rfc1912.zones
- 위의 파일을 수정하여 도메인 영역을 지정하고 Zone File을 지정한다.
- tiene.vm이라는 도메인 영역을 생성하고, 관련 파일은 tiene.vm.zone으로 지정한다.
- 확장자 [.zone] 은 임의로 지정할 수 있다. 하지만, 보통 zone으로 보기 편하게 사용한다.
- 저장 후 빠져나온다.
systemctl restart named
- DNS Service를 재시작해야함으로 명령어를 실행했다.
- 하지만, 다음과 같은 Error Log로 인하여 실행할 수 없었다.
- systmectl status named으로 관련 내용을 살펴볼 수 있다.
systmectl status named
- DNS Service 상태 확인 명령어를 통해, 어떤 Error가 발생하였는지 확인할 수 있다.
- zone tiene.vm에 대한 파일을 불러오는 과정에서 Error가 발생한 것으로 보인다.
- 아래에 file not found라는 Log도 보이는데, 이 Error는 당연한 Error다.
- 도메인 영역 지정 시, File만 지정했을 뿐, File을 생성해야하기 때문이다.
- 따라서, tiene.vm에 대한 도메인 영역 파일을 생성해야한다.
3. 도메인 영역 파일 생성
cd /var/named
cp -p named.localhost tiene.vm.zone
- 명령어 cp의 [-p] 옵션은 허가권과 소유권을 같이 복사한다.
- 도메인 영역 파일은 허가권과 소유권이 각각 640 / root | named 이어야한다.
- 또한, name.localhost는 정방향 / name.loopback은 역방향에 대한 도메인 영역 파일 견본이다.
- 다음과 같이 허가권과 소유권이 올바르게 생성되어 복사되었다.
systemctl start named
systemctl status named
- DNS Server를 재시작하고 상태를 확인한 결과, 정상적으로 실행되었다.
4. 주 영역 네임 서버 구축
vi tiene.vm.zone
- 이제, 주 영역 NS의 설정이 필요하다.
- 관련 DNS Record는 여기서 확인할 수 있다.
$TTL 1D [캐시를 저장하는 시간]
@ IN SOA @ root.korea.vm. ( [@ = 자신의 도메인 영역 root.korea.vm = 관리자 이메일]
0 ; serial 갱신 번호 (클수록 최신 버전이다)
1D ; refresh 갱신 주기 시간
1H ; retry 갱신 여부 확인 실패 시, 재 시도 시간
1W ; expire 갱신 실패 시, DNS 정보 질의 중단 시간
3H ) ; minimum 갱신 반영 최소 시간
NS ns1.korea.vm.
A 192.168.1.10
www A 192.168.1.10
ns1 A 192.168.1.10
- 저장 후 재시작하여 Web Server로 접속해보자.
* - named.conf 파일과 Zone 파일의 오류로 인해 정상적으로 실행되지 않을때가 있다.
- 그래서 2개 설정에 대해서 오류 검사를 하는 명령어를 확인해 보았다
- named-checkconf 명령어를 통하여 현재 사용 중인 conf 파일의 오류를 알아낼 수 있다.
named-checkconf /etc/named.conf
- 아무런 반응이 없다면 정상인것 이다.
named-checkzone tiene.vm /var/named/tiene.vm.zone
- named-checkzone aaa.com(도메인명,name.conf에 설정된것) /var/named/aaa.com.zone(zone파일의 경로 및 파일명)
- OK가 나온 것으로 보다 정상적으로 수정 및 적용이 된 것 같다.
- 약간의 오타로 다시 확인해 보았을 때 아래와 같이 오류가 발생한다.
5. Web Server 접속해보기
- 먼저, DNS Server에서 tiene.vm에 대한 ns 정보를 query했다.
- 아래와 같이 잘 나온다.
추가 - Wireshark로 각 Protocol 확인해보기
1) DNS
2) HTTP
'IT > ㄴ Linux' 카테고리의 다른 글
[CentOS] Linux DNS PTR 조회해보기 [ /etc/named.rfc1912.zones] (0) | 2023.08.09 |
---|---|
[CentOS] Linux 보조 DNS Server 구축 [/etc/named / slave] (0) | 2023.08.07 |
[CentOS] Linux DHCP Server 구축하기 [dhcpd.conf / DHCP IP Mac 고정] (0) | 2023.07.28 |
[CentOS] Linux Samba Server 공유 / 인증 디렉토리 생성 [smbpasswd / testparm] (0) | 2023.07.27 |
[CentOS] Linux Samba Server 구축 및 사용 [smbclient / samba] (0) | 2023.07.27 |