Study/Network

[Network]DNS(Domain name System)

seomj 2023. 6. 14. 23:00

DNS

Domain Name System

도메인 이름 시스템

사람이 읽을 수 있는 도메인 이름(www.test.com)을 머신이 읽을 수 있는 IP 주소(192.168.0.74)로 변환한다.

 

DNS 서비스는 전 세계에 배포된 서비스로서, www.example.com과  과 같이 사람이 읽을 수 있는 이름을 192.0.2.1과 같은 IP 주소로 변환하여 컴퓨터가 서로 통신할 수 있도록 한다. 인터넷의 DNS 시스템은 이름과 숫자 간의 매핑을 관리하여 마치 전화번호부와 같은 기능을 한다. DNS 서버는 이름을 IP 주소로 변환하여 도메인 이름을 웹 브라우저에 입력할 때 최종 사용자를 어떤 서버에 연결할 것인지를 제어한다. 이 요청을 쿼리라고 한다. 

 

hosts 파일

전에는 전화번호부처럼 IP 주소를 각자의 컴퓨터 hosts 파일에 저장하는 방식을 사용했다.

windows에서는 C:\Windows\system32\drivers\etc\hosts

Linux에서는 /etc/hosts

 

수십에서 수백 대 정도의 네트워크 규모에서는 hosts 파일로 감당할 수 있었지만,

네트워크상의 컴퓨터가 기하급수적으로 늘어나면서 모든 IP 정보를 파일 하나에 기록하는 것에 무리가 따랐다. 

또한, 전화번호처럼 변경이 생긴다면 실시간으로 확인할 수 없다는 어려움이 있었다.

 

그렇기에 이를 전문으로 하는 서버 컴퓨터가 필요했고 해당 서버를 네임 서버(DNS 서버)라고 한다. 

전화번호와 비교를 했을 때 114와 같은 역할이라고 생각하면 된다.

 

 

과정

 

IP 주소를 얻는 내부 흐름

  1. URL 입력사용자가 웹 클라이언트(웹 브라우저 등)에서 URL을 입력한다(FTP나 ping 등의 명령도 모두 해당)
  2. /etc/host.conf 조회
    /etc/host.conf 파일을 조회해 우선순위가 무엇인지를 확인
    /etc/host.conf 파일에는 URL 입력 시 IP 주소를 얻기 위해 hosts 파일과 네임 서버 중 무엇을 먼저 확인할 것인지 설정되어 있다.
    'order hosts, bind': hosts 파일을 먼저 찾아본 뒤 관련 정보가 없다면 bind(DNS 클라이언트, 즉 /etc/resolv.co에 설정된 네임서버에 물어보라는 의미)를 이용
  3. /etc/hosts 확인
    우선순위가 가장 높은 것은 /etc/hosts 파일이므로 이 파일을 열어서 IP 주소가 적혀있는지 확인
  4. IP 주소 획득
    /etc/hosts에 IP 주소가 있다면 네임 서버에 물어볼 필요 없이 IP 주소를 획득해 연결
  5. /etc/resolv.conf
    /etc/hosts에 IP 주소가 없다면 /etc/resolv.conf 파일을 확인해 'nameserver 네임서버IP' 부분이 있는지 확인
  6. 네임 서버 설정 없음
    알 수 없음
  7. 네임 서버 설정 존재
    해당 네임 서버에 IP 주소 질의
  8. 응답 있음
    네임 서버가 IP 주소를 알면 알려줌
  9. 응답 없음
    알 수 없음

 

 

로컬 네임 서버 작동 순서

  1. 웹 브라우저에서 www.test.com을 주소창에 입력
  2. /etc/resolv.conf에서 로컬 네임 서버 IP 확인
  3. 로컬 네임 서버 질의
  4. 자신의 캐시 DB를 검색
    www.test.com의 정보가 들어 있는지를 확인하지만 대개는 정보가 없다
  5. ROOT(.) 네임 서버 질의
    ROOT 네임 서버도 www.test.com의 주소를 모르기 때문에 com 네임 서버의 주소를 알려주며 물어보라고 한다
  6. COM 네임 서버 질의
    com 네임 서버도 www.test.com의 주소를 모르기 때문에 test.com을 관리하는 네임 서버의 주소를 알려주며 물어보라고 한다
  7. test.com 네임 서버 질의
    test.com 네임 서버는 이를 구축한 네임 서버이므로 XXX.test.com이라는 이름을 가진 컴퓨터를 모두 안다. 그렇기에 IP 주소를 알 수 있다.
  8. PC로 응답
  9. 획득한 IP 주소로 접속

 

 

마스터 네임 서버 흐름

*마스터 네임 서버: 자신이 별도로 관리하는 도메인이 있으며 외부에서 자신이 관리하는 컴퓨터의 IP 주소를 물어볼 때 자신의 DB에서 그 주소를 찾아 알려주는 네임 서버

 

Server: 192.168.111.100

Server(B): 192.168.111.200

Client: 192.168.111.xxx

 

  1. 우선 테스트하기 위해 Server B 가상머신에 FTP 서버를 설치하고, Server 가상머신에는 네임 서버와 함께 웹 서버를 설치
    • Server 가상머신의 네임 서버 설정에서 www.seomjlinux.com은 Server 가상머신의 IP 주소인 192.168.111.100으로, ftp.seomjlinux.com은 Server(B) 가상머신의 IP 주소인 192.168.111.200으로 설정
  2. Client 가상머신에서 실제로 존재하는 네이트 사이트의 www.nate.com의 접속을 시도할 때 (캐싱 전용 네임 서버와 동일)
    1. 설정된 네임 서버인 192.168.111.100에게 www.nate.com의 IP 주소를 요청
    2. 192.168.111.100은 자신의 DB를 검색해 www.nate.com이 있는지 확인
      해당 내용이 없을 것이므로 외부 인터넷에서 www.nate.com의 IP 주소를 알아온다
    3. 알아온 www.nate.com의 IP 주소를 Client 가상머신에 알려준다
  3. Client 가상머신에서 www.seomjlinux.com의 접속을 시도할 때
    1. 설정된 네임 서버인 192.168.111.100에 www.seomjlinux.com의 IP 주소를 요청
    2. 192.168.111.100은 자신의 DB를 검색해 www.seomjlinux.com이 있는지 확인
      seomjlinux.com은 자신이 관리하는 도메인으로 www.seomjlinux.com의 IP 주소(192.168.111.100)와 ftp.seomjlinux.com의 IP 주소(192.168.111.200)을 가지고 있다. 즉, 외부 인터넷으로 나갈 필요 없이 바로 Client 가상머신에게 해당 IP 주소를 알려준다
  4. 외부 인터넷상에 있는 컴퓨터에서 ftp.seomjlinux.com에 접속할 때
    1. 외부 인터넷상이 컴퓨터는 자신의 로컬 네임 서버에 ftp.seomjlinux.com의 IP 주소를 요청
    2. 로컬 네임 서버는 아마도 ftp.seomjlinux.com의 IP 주소를 모를 것이므로 'ROOT 네임 서버'에 IP 주소를 요청
      ROOT 네임 서버는 COM 네임 서버의 주소를 알려 주며 그 쪽에 요청하라고 안내
    3. 로컬 네임 서버는 다시 COM 네임 서버에 IP 주소를 요청
      COM 네임 서버는 seomjlinux.com의 도메인을 관리하는 seomjlinux.com 네임 서버의 IP 주소인 192.168.111.100을 알려준다.
    4. 로컬 네임 서버는 seomjlinux.com 네임 서버인 192.168.111.100에 ftp.seomjlinux.co의 IP 주소를 요청
    5. seomjlinux.com 네임 서버는 자신의 DB에 ftp.seomjlinx.com의 IP 주소가 있으므로 ftp.seomjlinx.com의 IP 주소인 192.168.111.200을 알려준다
    6. 로컬 네임 서버는 ftp.seomjlinx.com의 IP 주소인 192.168.111.200을 요청했던 인터넷상의 컴퓨터에게 알려준다
    7. 인터넷상의 컴퓨터는 192.168.111.200으로 접속

 

 

마스터 네임 서버 구현

/etc/named.conf

zone "seomjlinux.com: IN {
	type master;
	file "seomjlinux.com.db";
	allow-update { none; };
};

해당 파일은 네임 서버 서비스(데몬)가 시작될 때 제일 먼저 읽는 파일

마스터 네임 서버는 master로 설정

options의 directory에 생성될 도메인 이름의 상세 설정 파일

2차 네임 서버의 주소

 

아래의 명령어를 통해 문법상 이상이 없는지 확인 가능

# named-checkconf

 

/var/named/seomjlinux.com.db (포워드 존 파일)

$TTL	3H
@	SOA	A	root.	( 2 1D 1H 1W 1H )
	IN	NS	@
	IN	A	192.168.111.100
    
www	IN	A	192.168.111.100
ftp	IN	A	192.168.111.200

@: /etc/named.conf에 정의된 seomjlinux.com을 의미

NS: Name Server의 약자로 설정된 도메인의 네임 서버 역할을 하는 컴퓨터를 지정

A: 호스트 이름에 상응하는 IP 주소를 지정하는 부분

 

아래의 명령어를 통해 문법상 이상이 없는지 확인 가능

# named-checkzoneseomjlinux.com seomjlinux.com.db

 

 

라운드 로빈 방식의 네임 서버

포털 사이트의 웹 서버에는 동시에 수십만 건 이상의 접속이 발생할 것이다. 이러한 대형 사이트에서는 웹 서버를 1대가 아니라 여러 대의 웹 서버를 운영해 웹 클라이언트가 서비스를 요청할 경우에 교대로 서비스를 실행한다. 그러면 웹 서버의 부하를 공평하게 여러 대가 나눌 수 있다.

 

/var/named/seomjlinux.com.db 

$TTL	3H
@	SOA	@	root.	( 2 1D 1H 1W 1H )
	IN	NS	@
	IN	A	192.168.111.100

ftp	IN	A	192.168.111.200

www	IN	CNAME	webserver.seomjlinx.com.

webserver	100	IN	A	1.1.1.1
		200	IN	A	2.2.2.2
		300	IN	A	3.3.3.3

 

 

 

<출처>

이것이 리눅스다.

https://aws.amazon.com/ko/route53/what-is-dns/

https://hanamon.kr/dns%EB%9E%80-%EB%8F%84%EB%A9%94%EC%9D%B8-%EB%84%A4%EC%9E%84-%EC%8B%9C%EC%8A%A4%ED%85%9C-%EA%B0%9C%EB%85%90%EB%B6%80%ED%84%B0-%EC%9E%91%EB%8F%99-%EB%B0%A9%EC%8B%9D%EA%B9%8C%EC%A7%80/

https://m.blog.naver.com/hmin011/150153001584

https://www.businessinsider.com/guides/tech/what-is-a-dns-server

'Study > Network' 카테고리의 다른 글

[Network]HAProxy 설치 및 설정  (0) 2024.07.30
[Network]SCAN(스캔) 공격  (0) 2024.07.09
[Network]HAProxy  (0) 2023.06.11
[Network]Load Balancing(로드밸런싱)  (0) 2023.06.10
[Network]NAT(Network Address Translation)  (0) 2023.05.26