리눅스

Linux 리눅스 DNS

두뚜 2021. 8. 11. 11:07

# /etc/hosts 파일

호스트의 개수가 많지 않은 경우에, hosts 파일에 설정해서 뒤에 주소만으로 접근 할 수 있다. 일부 호스트에 대해서만 관리 할 수 있다.

 

 

hosts에 있는 파일에 192.168.100.1   www.naver.com  을 추가하여 확인해보자

실제 네이버가 아닌 hosts 파일에 설정된 ip로 연결된다. DNS보다 우선순위가 높다.

 

 

하지만 현재의 인터넷 환경은 호스트 수가 너무 많아서 모든 호스트를 파일에 직접 기록 할 수 없기 때문에 다른 방식으로 호스트의 IP주소를 확인 할 수 있는 DNS 서비스가 만들어 졌다.

 

 

 

# FQDN

FQDN (FUll Qualified Domain NAME)은 정규화된 도메인 이름이다. 일정한 규칙을 가지고 있다.

Hostname + Domain Name (Subdomain)

ex) www.naver.com  

www(Hostname) naver.com(Domain Name)

naver에게 www라는 호스트를 물어본다.

 

 

# DNS 동작 방식

 

 

DNS 요청 및 응답

클라이언트가 어떤것을 요청해도 전부 알고있다면 이와같은 구조로 동작하는것이 가능하다. 하지만 인터넷의 모든 도메인 이름 정보를 한 서버에 가지고 있는것은 불가능 하기 때문에 계층적인 DNS 구조가 필요하다.

 

 

DNS 계층 구조 및 응답 방식

더보기

http://www.google.com 으로 접속을 시도한다, 현재 해당 도메인에 대한 정보를 전혀 모르는 상태

  1. PC의 호스트 파일에 www.google.com 에 대한 IP 주소 정보가 있는지 확인 (윈도우 : c:\windows\system32\drivers\etc\hosts , 리눅스 : /etc/hosts)
  2. PC의 DNS 캐시에 www.google.com 에 대한 IP 주소가 있는지 확인
  3. Local DNS (PC 에 설정되어 있는 네임서버)에 www.google.com 에 대한 DNS 질의(query)를 보냄
  4. Local DNS 의 DNS 캐시 정보에 www.google.com 에 대한 IP 주소가 있는 지 확인, 캐시값이 있다면 www.google.com에 대한 IP주소를 반환하고, 캐시 된 내용이 없다면 ⑤의 과정을 거침
  5. Local DNS 는 Root DNS 에 www.google.com 에 대한 IP 주소를 요청하는 DNS 질의를 보냄
  6. Root DNS 는 자신의 존 파일에 정보가 있다면 IP 주소를 응답하고, 없다면 COM 의 DNS 서버 주소를 응답
  7. Local DNS 는 Root DNS 에서 받은 COM DNS 에 www.google.com 에 대한 IP 주소 정보를 요청하는 DNS 질의를 보냄
  8. COM DNS 는 자신의 존 파일에 정보가 있다면 IP 주소를 응답하고, 없다면 google.com 의 DNS 서버 주소를 응답
  9. Local DNS 는 COM DNS 에서 받은 google.com DNS 에 www.google.com 에 대한 IP 주소 정보를 요청하는 DNS 질의를 보냄
  10. google.com DNS 는 존 파일 정보를 확인하여 IP 주소를 응답
  11. Local DNS 는 google.com DNS 에서 응답받은 IP 주소를 client 에 응답하고 TTL 시간 동안 www.google.com 의 IP 주소를 캐싱
  12. client 는 Local DNS 에서 받은 IP 주소(www.google.com)로 접속 요청하고 TTL 시간 동안 www.google.com 의 IP 주소를 캐싱
  13. www.google.com 서버는 www.google.com 첫 화면을 client 에 전송

 

 

 

# 재귀 쿼리 (Recursive Query)

사용자는 자신이 요청한 DNS서버에게만 요청을 전송하고, 요청에 대한 응답을 수신한다. 이렇게 이름 요청을 전송하고, 요청에 대한 정확한 응답을 수신하는 과정을 재귀쿼리라고 한다. 재귀쿼리는 클라이언트가 DNS 서버에게  요청할 때 발생한다.

 

# 순환 쿼리 (Iterative Query)

클라이언트의 요청을 수신한 DNS서버는 요청을 처리하기 위해 다른 DNS서버로부터 단계적으로 질의하는 과정을 수행한다. 이 과정을 순환 쿼리라고 한다. 순환 쿼리과정을 통해 DNS 서버는 요청을 처리하기 위한 정보를 순차적으로 수집하게 되고. 최종적으로 정확한 IP 주소를 획득 할 수 있다.

 

# 동작 방식

Root DNS 서버는 순환 쿼리를 처리하기 위한 가장 높은 단계의 요청을 처리하는 서버이다. 모든 이름의 정보 대신 다음 단계의 이름에 대한 답을 가지고 있는 서보의 정보를 가지고 있다.  '.com  .net .gov .kr '로 끝나는 이름에 대한 정보를 가지고 있는 각 서버의 목록을 저장한 후, 사용자의 요청에 맞는 DNS 서버로 안내한다. .com .net 같은 이름을 최상위 도메인 이름이라고 한다.

 

DNS 서버 구조에 중간 단계의 각 DNS 서버들은 다음단계의 도메인 이름에 대한 요청을 처리한다. 예를들어 ldh.co.kr의 DNS 서버인 ns.ldh.co.kr 서버는 'www.ldh.co.kr' ,'mail.ldh.co.kr 등 'ldh.co.kr'이라ㄴ 특정 도메인에 해당하는 정보를 가지고 있다. 이 범위를 영역 (zone)이라고 한다.

 

 

# 정방향 조회 / 역방향 조회

 

# 정방향 조회

어떤 이름을 알고있는데 그 이름에 대한 IP 를 모를 때 IP를 요청하는것

 

# 역방향 조회

특수 도메인 in-addr.arpa 도메인을 이용하여 IP를 가지고 이름을 찾아낸다. 포인터 레코드 (PTR)이 필요하다.

 

 

# DNS 캐시

최근 조회했던 내용을 다시 조회할 때 , 조회할 때마다모든 과정을 거치는 비효율적이다.  DNS 캐시에 정보를 저장해 놓고 다른 과정을 거치지 않고 DNS 캐시에 저장해 놓은 정보를 제공해준다.일정 규모 이상의 네트워크가 구성 될 경우 네트워크 내부에 DNS 서버를 구성하고, 네트워크 내부 호스트들이 내부 DNS 서버를 통해 DNS 조회를 수행하록 구성하면 DNS에 관련된 불필요한 외부 트래픽을 감소시킬 수 있다.

 

 

# DNS 레코드

A record

A (Address Mapping records) : 주소/호스트 레코드

도메인(domain) name에 IP Address를 매핑하는 방법이다. 정규화된 도메인 이름/호스트명(FQDN)을 IPv4에 연결한다.

 

AAAA record

AAAA (IP Version 6 Address records) : 주소 레코드

주어진 호스트에 대해 IPv6 주소를 알려준다. A 레코드와 같은 방식으로 작동하며 차이점은 IP 주소 유형이다.

 

CNAME record

CNAME (Canonical Name) : 별칭 레코드

도메인 이름의 별칭을 만드는 데 사용한다. 실제 호스트명(A레코드)과 연결되는 별칭,별명을 정의 한다.

 

MX record

MX (Mail Exchange) : 메일 교환 레코드

메일서버(사서함)에 도달할 수 있는 라우팅정보(메일서버)를 제공한다. DNS 도메인 이름에 대한 메일 교환 서버를 알려주고 이 정보는 SMTP (Simple Mail Transfer Protocol)가 전자 메일을 적절한 호스트로 라우팅하는 데 사용한다.

 

PTR record

PTR (Pointer) : 포인터 리소스 레코드

정방향 DNS 확인 (A 및 AAAA 레코드)과 달리 PTR 레코드는 IP 주소를 기반으로 도메인 이름을 찾는 데 사용한다.

 

NS record

NS (Name Server) : 네임 서버 레코드

DNS서버의 목록을 가지고 있다. 도메인이 속해있는 IP를 찾아온다.

 

SOA record

SOA (Start Of Authority) : 관리 권한 레코드

도메인의 모든 정보와 권한을 의미한다. SOA 레코드는 도메인의 대한 관련 타이머 설정이고 SOA 레코드가 없을 경우 다른 레코드를 등록할 수 없다.