경작 3일차 DNS

한정화·2023년 1월 30일
0

230130 월

원래 컴여세 3장까지 읽은 걸로 벨로그를 쓸까 생각 중이었는데 농장주님께서 감사하게도 DNS 공부라는 새로운 주제를 던져주셔서 그걸 공부하는 글을 써볼까 한다.

DNS 정도는 외워줘야 신상에 좋을 거라는 말씀과 함께 보내주신 유튜브 영상이 4분짜리길래 뭐야? 이정도는 외우지ㅋ 나 아직 안 죽었다 ㅋ 하고 봤는데 플레이리스트가 있었고.. 2시간짜리 강의였다. 좋다 말았네

이 채널의 내용을 이해한 대로 열심히 정리해보겠사옵니다.

생활코딩 WEB2 - Domain Name System
https://www.youtube.com/watch?v=zrqivQVj3JM&list=PLuHgQVnccGMCI75J-rC8yZSVGZq3gYsFp

1. IP 주소란?

IP주소는 네트워크에서 컴퓨터 장치들이 서로 통신하기 위해 필요한 주소이다. 클라이언트가 서버에 접속하려면 서버의 IP주소가 있어야 하고, 접속한 서버가 결과에 응답해 클라이언트에게 전송하려면 클라이언트의 IP주소가 있어야 한다. 따라서 인터넷에 참여하는 모든 클라이언트, 서버 등의 컴퓨터 혹은 컴퓨터 장치들은 IP주소를 가지고 있어야 하며, IP주소를 가진 네트워크에 연결된 이 장치들을 host라고 한다.

하지만 우리 같은 숫자 암기에 약한 클라이언트가 서버 IP 주소를 외워서 접속하는 것은 어려울 것이다. 따라서 우리는 유튜브를 시청할 때 유튜브 서버의 IP주소 대신 youtube.com과 같은 hosts의 쉬운 이름(도메인)으로 서버에 접속하고 싶어할 것이다. 다행히 모든 운영체제에는 이를 위한 hosts라는 파일이 있으며, youtube.com의 IP 주소가 hosts에 저장되면 클라이언트가 youtube.com에 접속했을 때 컴퓨터가 이 hosts 파일을 저장된 IP주소로 접속한다.

자, 인생은 실전! hosts 파일을 직접 수정해볼까? 물론 hosts 파일을 임의로 수정하면 해킹을 당할 수도 있으므로 메모장에서 열어서 수정해볼 것이다. 운영 체제별로 설명해주셨지만 나는 귀찮으므로 우리 그램이의 windows 방식만 찾아보겠다.
(4일 뒤에 맥북 오는데요?
ㄴ 그건 나중에 생각해보도록 하자.)

메모장을 관리자 권한으로 실행 -> file -> open -> (C:\Windows\System32\drivers\etc) hosts 선택

하면 다음과 같이 메모장에 hosts 파일의 내용이 뜬다.

그 아래에 IP주소와 이름을 입력해주면

junghwabirthday.com를 브라우저에 검색했을 때 20.01.07.04라는 IP주소를 가진 사이트로 이동한다. 물론 나는 귀찮아서 진짜 저 사이트를 만들진 않았다. 만약 junghwabirthday.com이라는 도메인을 가진 다른 IP주소의 서버가 있더라도 내가 저렇게 지정한 이상 내 컴퓨터에서는 내가 저장한 도메인이 우선순위를 갖게 되어 내가 저장한 IP주소로 이동하게 된다고 한다. 우와 짱


2. Stanford Research Institute

DNS 이전에 DNS와 유사한 기능을 했던 기관이다. 이 기관은 전 세계의 hosts 파일을 관리하였다. 특정 서버의 IP주소에 접근하기 위한 이름을 모든 사람들이 똑같이 사용한다면 서버 관리자는 IP주소를 바꾸게 되더라도 이름을 유지하여 사람들이 계속 편하게 쓰게 할 수 있고, 이름으로 서버의 특성을 드러낼 수도 있는 유연성을 갖게 된다. 이를 가능하게 하기 위해 하나의 신뢰할 수 있는 기관이 생기게 된 것이다. 서버 관리자는 자신의 IP 주소와 연결할 원하는 이름을 이 기관에 등록했고, 인터넷 유저들은 이 기관의 hosts 파일을 다운로드 받아 이름을 사용했다.

그러나 인터넷이 커짐에 따라 이러한 방식에는 여러한 문제점이 생겨났다. hosts 파일을 다운받기 전까지는 추가된 이름을 사용할 수 없었으며, 기관은 수동으로 hosts 파일에 입력하며 많은 시간과 비용이 들었다.

이에 따라 Jon Postel과 Paul Mockapetries는 1983년 도메인 메인 시스템을 개발하게 되었다.


3. DNS 사용의 기본 원리

서버 관리자는 DNS Server에 자신의 IP와 IP에 갖고 하고 싶은 도메인 이름을 전송하고, server는 요청을 받고 이를 기억하게 된다.
그렇다면 우리와 같은 클라이언트는 어떻게 접속할까? 우선 집에 있는 컴퓨터의 랜선을 꽂거나 와이파이에 접속을 하면 그 순간에 *DHCP를 통해 DNS Server의 IP주소가 자동으로 세팅이 된다. 그리고 도메인 이름으로 서버에 접속하려고 하면 컴퓨터는

1) hosts 파일을 찾아감
2) 없다면 DNS server에 접속함

의 과정을 거치며, DNS server는 IP주소를 반환해준다.

*DHCP(Dynamic Host Configuration Protocol) 는 몰라도 된다고 해서(딱 봐도 어려울 것 같다. 원래 메카니즘은 배우기 어렵다..) 정의만 찾아봤다.
호스트의 IP주소, TCP/TP의 기본 설정을 접속한 클라이언트에게 자동으로 제공해주는 프로토콜이라고 한다.


4. Public DNS란?

앞서 얘기했 듯 우리가 집 컴퓨터를 인터넷에 연결하면 DNS Server의 IP 주소를 알게 된다. 이는 ISP(internet service provider, kt 같은 통신사)가 DNS Server의 IP를 자동으로 세팅해주기 때문에 가능하다. 그런데 통신사가 제공하는 DNS Server는 우리가 도메인으로 접속할 때 어느 도메인에 접속하는지 당연히 알게 되며, 통신사는 이를 저장할 수도 있다. 이러한 privacy 문제가 마음에 들지 않을 수도 있고, 혹은 그냥 DNS server의 성능이 마음에 들지 않을 수 있다. 만약 통신사가 제공하는 server보다 더 안전하고 성능이 좋은 server를 사용하고 싶다면 어떻게 해야할까? 다른 public server를 사용하는 것이다.

예를 들어, 내가 구글이라는 회사를 신뢰하고 구글이 운영하는 server의 성능을 선호한다면 구글이 제공하는 public server를 사용하면 된다.

네트워크 설정의 DNS 설정을 8.8.8.8로 바꾸면 우리가 도메인을 이용할 때 우리의 컴퓨터는 8.8.8.8의 IP 주소를 사용하는 컴퓨터 google public DNS Server에 도메인 주소를 묻는다.

영상에서는 이번에 새로 개발된 1.1.1.1 서버가 굉장히 좋아보여서 나도 바꿔보려고 한다 ㅋㅋㅋㅋㅋㅋ

제어판-> 네트워크 및 인터넷 -> 네트워크 및 공유센터 -> 연결(의 정보 클릭) -> 속성 -> 인터넷 프로토콜 버전 4 클릭 -> 속성 클릭 -> 자동으로 DNS 서버 주소 받기를 다음 DNS 서버 주소 사용으로 변경


클라이언트로서 컴퓨터를 주로 사용하는 입장에서 알 만한 내용들은 여기까지라고 한다. 하지만 내가 언제 생산자, 서버 관리자의 입장이 될 지 모르니 계속 공부해보도록 하자.


5. 도메인 이름 구조

앞서 알아본 DNS Server는 전 세계에 단 한 개뿐일까? 그렇지 않다. 수만 개의 DNS Server들이 서로 협력하고 있다. 어떻게 이것이 이루어지는 걸까?

도메인 이름은 다음과 같이 분류할 수 있고,

도메인 이름의 각 부분을 DNS Server가 관리한다. 이들은 기능적으로 동일하나, 전담하는 부분이 다르다. 또한 각 부분을 담당하는 DNS Server는 하위 부분을 관리하는 Server의 IP주소의 목록을 알고 있어야 한다. 예를 들어, Root를 담당하는 Root Name Server는 top-level 도메인를 담당하는 Server들의 목록을 알고 있어야한다.

따라서 클라이언트가 어떤 서버에 접속하기 위해서 Root IP주소는 반드시 필요하므로, 모든 컴퓨터는 Root를 관리하는 Root Name Server의 IP 주소는 기본적으로 모두 알고 있다.

그 다음 과정을 마치 선물 주는 것처럼 쉽게 비유해보면(나의 이해력이 여기까지임ㅎ) 클라이언트가 도메인 이름을 입력하면 Root Name Server는 Top-Level Name Server들의 IP 주소를 알려준다. Top_Level Name Server는 Second_Level Name Server의 IP주소 목록을 알려줄 것이다. ..(생략).. 최종적으로 Sub Name Server에 접속되어 IP 주소를 받게 된다.


6. DNS register 등록 과정

그렇다면 이제 IP주소를 등록하고 싶은 registrant의 입장에서 생각해보자.

연두색 : ICANN이 관리하는 Root Name Server
하늘색 : Registry 등록 기관들이 관리하는 Top-Level Name Server
보라색 : Registrar 등록대행소 기관들에 등록한 Registrant 등록자의 Name Server(등록자가 운영하는 서버)
분홍색 : 클라이언트가 컴퓨터를 인터넷에 연결할 때 접속되는 DNS Server

ICANN 기관은 전 세계의 IP 주소를 저장하고, Root Name Server를 관리하는 비영리단체이다. 지구에는 총 13개의 Root Name Server가 있다(a.root-servers.net~m.root-servers.net). 이번 예시에서는 a.root-servers.net이 쓰였다고 가정하자.

Registry 기업/기관들은 .com, .net, .co.kr 등의 Top-Level Name Server를 관리한다. 예를 들어, .com 도메인을 관리하는 서버로는 a.gtld-servers.net이 있다.

Registrar는 registrant의 도메인 등록 작업을 대행해주는 업체 혹은 기관이다.

간단하게 설명하면 Registrant는 Registrar를 통해 원하는 도메인 이름을 얻는다. Registrant의 계약이 종료될 때까지 다른 registrant들은 동일한 도메인에 IP주소를 등록할 수 없다. 등록이 완료되면 ICANN가 관리하는 a.root-servers.netcom NS a.gtld-servers.net을 저장한다.

그러나 Registrant가 실질적으로 도메인을 운영하기 위해서는 스스로 서버를 마련하고 그 컴퓨터에 name server를 설치하여야한다. 이를 a.iana-servers.net이라고 해보자. 하지만 꼭 스스로 서버를 구축하지 않아도 Registrar 등에서 제공하는 다양한 무료 서버를 이용할 수도 있다. Registrant는 Registrar에게 (도메인 이름) NS a.iana-servers.net을 알리고, 이것이 Registry가 관리하는 Top-Level Name Server (a.gtld-servers.net)로 전달되어 (도메인 이름) NS a.iana-servers.net을 기억한다.

또한, 도메인에 IP 주소를 연결하려면 컴퓨터의 name server에 접속하여 (도메인 이름) A (IP주소) 를 전달한다. name server는 이를 기억한다.

지금까지 살펴본 예시 과정에서

a.root-servers.net이 기억하는 com NS a.gtld-servers.net,
a.gtld-servers.net이 기억하는 (도메인 이름) NS a.iana-servers.net,
a.iana-servers.net이 기억하는 (도메인 이름) A (IP주소)
를 모두 레코드라고 한다. 레코드는 NS(name server)타입, A(주소)타입을 가질 수 있다.

이렇게 등록이 완료되면 이 서버에 접속하려는 클라이언트에게는 어떤 과정이 일어날까? 3. DNS 사용의 기본 원리에서 알아본 내용이지만 다시 한 번 구체적으로 살펴보자.
클라이언트의 컴퓨터는 NS a.root-servers.net를 기억하고 있는 DNS Server를 통해 IP 주소를 알게 된다. 5. 도메인 이름 구조에서 말했듯, DNS ServerNS a.root-servers.net(물론 이름은 예시이다)를 알고 있어야 위에서 언급한 모든 과정이 가능하다.


cf)
DNS Server뿐만 아니라 a.iana-servers.net, a.root-servers.net, a.gtld-servers.net도 Root Name Server의 IP 주소(NS a.root-servers.net)는 모두 기억하고 있다.


이어서 말하면, 클라이언트의 컴퓨터가 DNS Server에 접속하여 도메인 이름의 IP주소를 요청하면 DNS Server는 저장하고 있던 Root name server의 IP주소를 알려준다. 컴퓨터가 Root name server에 접속하여 도메인 이름의 IP주소를 요청하면 Root name server는 저장하고 있던 Top-Level name server의 IP주소를 알려준다. ..(생략).. 최종적으로 등록자가 사용한 서버의 Name server가 클라이언트에게 IP주소를 알려준다. 이 과정은 5. 도메인 이름 구조에서 설명한 것과 동일한 것이다.

아직 강의가 40분 정도 남았는데 힘드니까 그만해야겠다.. 내일 할게요(내일 또 새로 할 거 생길 텐데 큰일나따!! 내일의 나 힘내!!)

끝!

0개의 댓글