DNS 서버

김형선·2023년 9월 21일
0

Linux

목록 보기
14/16

DNS = Domain Name System

  • 예전엔 /etc/hosts파일에 자주 통신하던 각 호스트의 IP 주소 적어놨었는데 요즘은 IP주소가 많아져서 DNS서버 사용한다.
  • DNS서버가 DNS서비스를 제공(호스트의 IP 주소를 확인할 수 있음, 도메인에 연결된 서버 아이피를 찾아줌)
  • 그럼 DNS서버는 어떻게 찾아가나? /etc/resolv.conf 파일에 찾아가야할 곳이 적혀있다.

DNS 서버

  • 한 대의 서버에서 모든 DNS 정보를 처리하는 방식이 아닌, 계층적으로 이루어진 구조를 통해 단계별로 정보를 제공
  • 각 DNS 서버는 도메인 계층의 일부 영역을 담당하고 그곳에 속한 도메인을 관리한다
  • 상위 계층은 하위 계층 도메인에 대한 정보를 관리하며 하위 계층의 DNS서버 IP주소를 가지고 있다
  • 또한, 최상위 계층(루트 서버)의 IP주소는 모든 DNS 서버가 등록하여 관리하고 있다.

최상위 루트 서버에는 하위 계층인 'kr','com'과 같은 정보를 관리하고 그것들의 DNS 서버 IP주소가 등록되어 있다
DNS 시스템은 인터넷 세상에 존재하는 수많은 클라이언트들의 질의에 대응하기 위해서 계층화 구조를 만들었다

Recursive(재귀) DNS 서버

  • 재귀 DNS의 장점은?
    재귀 DNS 쿼리는 일반적으로 반복 쿼리보다 빠르게 해결하는데 캐싱 때문임
  • 재귀 DNS 서버는 수행하는 모든 쿼리에 대한 최종 응답을 캐시하고 특정 시간(Time-To-Live, TTL) 동안 최종 응답을 저장
  • 재귀 확인자는 캐시에 이미 있는 IP 주소에 대한 쿼리를 받으면 다른 DNS 서버와 통신하지 않고도 캐시된 응답을 클라이언트에게 신속하게 제공 가능
  • 캐시에서 응답을 신속하게 제공하는 것은 a) DNS 서버가 많은 클라이언트에게 서비스를 제공하거나 b) 요청된 웹 사이트가 매우 인기 있는 경우 매우 가능성이 높다

도메인 주소 받았을 때, 우선 로컬DNS cache 검색하고 없으면 hosts 파일 검색하고 없으면 dns 서버에 물어본다 그러면 로컬에 있는 recursive dns서버가 authoritative dns 서버에 물어보는데 여기서 root서버부터 물어본다 로컬에 있는 recursive dns서버를 통해 다시 client에게 돌아오는 것이라서 재귀라고 함(부메랑 생각하면 편함)

참고블로그 링크


정방향 조회 : 호스트이름 > IP주소로 변환


+trace 옵션 넣으면 자세하게 나온다.

역방향 조회 : IP주소에 대해 호스트이름을 요청하는 경우


☆ 실습 - DNS 서버 구성

(dns서버를 구성할건데 client에서 작업해버림. 그래서 client라고 써졌지만 서버역할하고, server라고 써진게 client역할임임)

yum -y install bind

필요한 패키지 설치하자

ps -ef로 깔렸는지 확인할 수 있다.

깔림

dns서버에서 중요한 파일이 /etc/named.conf파일이다

나중에 dns서버가 named.conf파일을 읽어올것임

vi named.conf하고
127.0.0.1부분을 any로 바꾸고, 밑에도 none으로 바꿀 거고, allowed-query도 any로 바꾸자.

/var/named

named.empty를 복제해서 쓸 거다 기본형식이라고 생각하면 됨

파일 복사할건데 지금 named.empty는 권한이 root, named이다.
그냥 바로 cp하면 root, root권한으로 복제된다 > 이러면 에러가 생김 아마 돌아가는 부분에서 생길것 그래서
cp -p 로 하면 권한도 그대로 감.

저 파일 이름이 내가 만드는 dns서버이름이 될 것임 그래서 뒤에 .zone 붙이는게 좋음(그런데 언더바 _ 쓰면 안 된다 그래서 dns_test를 mydns로 바꾸겠다)

위의 linux2, linux3, dns_test다 지우고 mydns.zone만 남기겠다.

이제 mydns.zone 수정하겠다.

빈 상태
NAT네트워크로 쓰자(나는 enp0s9를 NAT 네크워크로 해둠)

dns_test.zone을 다음과 같이 수정한다(점 잘 찍어야한다 없으면 에러남)

여기서 ns는 10.0.2.5
mail은 10.0.2.6
www는 10.0.2.7로 바꾼다면 나중에 nslookup mydns.co.kr 10.0.2.4를 쳤을 때 돌아오는 IP주소가 5,6,7로 다를 것이다. 다 4로 해둬서 저것들 돌아올것
nslookup mydns.co.kr 10.0.2.4에서 맨 뒤에 10.0.2.4를 쳐줘야하는 이유는
vim /etc/resolv.conf를 했을 때, nameserver를 다른 걸로 지정해둬서 임시로 쿼리 날릴 때 지금 dns서버가 10.0.2.4라는걸 알려줘야한다.


named.conf 맨 밑에 부분 보면 zone 부분 있는데 그거 복사해서 밑에 추가해줄것임.


다음과 같이 zone 추가해주면 된다.

잘 됐는지 확인하려면

또는
설정 바꾼 다음에 systemctl restart named를 해주고
nslookup으로 각각 확인할 수 있는데
nslookup www.mydns.co.kr 10.0.2.4
nslookup mail.mydns.co.kr 10.0.2.4
nslookup ns.mydns.co.kr 10.0.2.4로 각각 확인 할 수도 있다. /var/named/data/mydns.zone에 www mail ns를 각각 어떻게 설정했느냐에 따라 돌려받는 IP주소 다를 수 있다.

enable, start, status로 확인

nslookup으로 확인

/etc/resolv.conf를 수정하면 위에 10.0.2.4를 안 붙여도 저렇게 바로 address가 나온다.


위의 과정을 client에서 해버렸는데 사실 server에서 했어야한다. 그래서 client를 server로 생각하고 server를 client로 생각하겠다.

server에서 systemctl status named.service해서 active인지 확인하고

client에서 vi /etc/resolv.conf 들어가서 nameserver를 10.0.2.4로 고친다

그리고 server의 firewall-cmd --list-all에 services에 dns를 추가해야한다.

그리고 다시 client쪽에서 nslookup www.google.com해보면 된다(NAT는 끄고 NAT네트워크 켜야한다, 처음에 둘 다 켜놨더니 안 됐음)


nslookup으로 처음에 나오는건 nameserver(/etc/resolv.conf)이고 이게 dns서버 ip라고 생각하면 됨.
밑에는 내가 www.google.com의 IP주소를 알려주는 것임.

먼저 로컬의 DNS서버에서 cache검색해보고 없으면 authoritative dns 서버로 나가서 찾아오고 IP주소 반환해줌.

0개의 댓글

관련 채용 정보