[Server] Linux - 도메인(domain)

seonjeong·2023년 12월 3일
0

Server

목록 보기
14/15
post-thumbnail

도메인(domain)

: 인터넷에 연결된 컴퓨터를 사람이 쉽게 기억하고 입력할 수 있도록 문자(영문, 한글 등)로 만든 인터넷주소

❤️ DNS 설정 파일

도메인 이름을 IP 주소로 변환할 때, 다음과 같은 과정을 거친다.

  1. 사용자가 도메인 이름을 입력
  2. hosts 파일에서 해당 도메인 이름을 찾아 IP 주소 매핑이 있는지 확인
  3. IP 주소를 찾지 못한 경우, resolv.conf 파일에 설정된 DNS 서버로 쿼리를 보냄
  4. DNS 서버에서 도메인의 IP 주소를 찾아 시스템에 반환

hosts 파일

컴퓨터에서 도메인 이름과 IP 주소 간의 매핑을 정의하는 텍스트 파일이다. hosts 파일에 도메인과 IP를 임의로 지정하게 되면 DNS 서버보다 우선된다. hosts 파일은 /etc에 있다.

hosts 파일에 도메인 설정

[편집기] /etc/hosts
  • nanovi같은 편집기를 이용하여 아래와 같이 google.com도메인을 추가해준다.
  • 파일을 저장하고 ping google.com명령어를 실행하면 google.com 도메인이 hosts파일에 등록한 IP 주소로 연결된 것을 확인할 수 있다.
    • ping [도메인 또는 IP 주소] : 네트워크 상태를 확인하는 명령어

resolv.conf 파일

서버가 사용할 네임서버를 지정해둔 파일이다. 시스템이 DNS를 사용하여 도메인 이름을 IP 주소로 해석할 때 필요한 구성 정보를 제공한다. hosts 파일과 마찬가지로 /etc에 있다.

resolv.conf파일에는 다음과 같은 내용이 있다.

nameserver 8.8.8.8
nameserver 8.8.4.4

nameserver 항목

이 서버에서 사용할 네임서버를 지정해둔 것이다. 특정 도메인에 대한 IP 정보를 어떤 네임서버에서 찾을 것인가를 지정한 것이다.

따라서, 이 값에는 네임서버의 도메인을 입력해서는 안되며 사용할 네임서버의 IP 주소값이 설정되어 있어야 한다.


hosts 파일과 resolv.conf 파일의 차이점

  • hosts 파일은 로컬시스템에서 도메인이나 IP 주소를 해석해주는 기능을 함
  • hosts 파일에 인터넷 사이트의 도메인 주소를 단축시켜 단축시킨 이름으로 웹서핑이나 telnet, ftp등에서 사용할 수 있는 이점이 있음
  • 이용 사이트가 많아지면 파일에 추가하는 데 한계가 있으므로 도메인에 대한 많은 데이터베이스를 가지고 있는 네임서버가 필요함
  • resolv.conf 파일에 네임서버 옵션으로 네임서버 주소를 지정해주면 수많은 도메인에 대해 쉽게 변환이 이루어지므로 클라이언트 환경에서 인터넷을 사용할 때 편리함

참고

사용할 네임서버 지정파일 : /etc/resolv.conf
hostname, resolv.conf 설정


❤️ 서브 도메인

기본 도메인 이름의 하위 부분으로, 일반적으로 도메인의 왼쪽에 위치한 섹션이다. 도메인 이름은 일반적으로 subdomain.example.com과 같은 형식을 가지는데 subdomain이 서브 도메인에 해당한다.

서브 도메인을 통해 하나의 도메인 아래에서 다양한 웹 사이트 또는 서비스를 구축하고 관리할 수 있으며, 해당 서브 도메인을 가리키는 IP 주소는 메인 도메인의 IP 주소와 다를 수 있다.

서브 도메인 추가

서브 도메인을 적용시키기 위해서는 DNS 정보를 설정해줘야 한다. 도메인을 등록한 곳 또는 DNS 서비스 제공업체의 웹 인터페이스를 사용하여 DNS 레코드를 업데이트한다.


Apache 서브 도메인 설정

1. 가상 호스트(Virtual Host) 추가

Apache의 설정 디렉토리에 새로운 가상 호스트를 추가한다

nano /etc/apache2/sites-available/subdomain.conf

subdomain.conf 파일 내용

<VirtualHost *:80>
    ServerName subdomain.example.com
    DocumentRoot /var/www/subdomain
</VirtualHost>

2. DocumentRoot에 웹 콘텐츠 추가

새로운 DoumentRoot에 해당하는 디렉토리를 생성하고 웹 콘텐츠를 추가한다

mkdir /var/www/subdomain
echo "Hello, Subdomain!" > /var/www/subdomain/index.html

3. 가상 호스트 활성화

sites-available에서 sites-enabled로 심볼릭 링크를 생성하여 새로운 가상 호스트를 활성화한다.

ln -s /etc/apache2/sites-available/subdomain.conf /etc/apache2/sites-enabled/
  • ln : link, 리눅스 파일시스템에서 링크 파일을 만드는 명령어
    • 심볼릭 링크(Symbolic Link) : 단순히 원본파일을 가리키도록 링크만 시켜둔 것
      ln -s [원본 디렉토리 경로] [링크 디렉토리 경로]
    • 하드 링크(Hard Link) : 원본파일과 다른 이름으로 존재하는 동일한 파일 (내용 동일, 다른 파일)
      ln [원본 파일명] [대상 파일명]

4. Apache 서비스 재시작

sudo service apache2 restart

6. Sub Domain 적용 (Dev, Prod) - Apache2 참고


❤️ DNS 동작원리

  1. 사용자가 웹 브라우저에 naver.com을 입력하면, 쿼리가 인터넷으로 이동하고 DNS 재귀 확인자가 이를 수신한다.
  2. 확인자가 루트 DNS 서버(.)를 쿼리한다.
  3. 루트 서버가 도메인에 대한 정보를 저장하는 최상위 도메인(TLD) DNS 서버(.com)의 주소로 확인자에 응답한다.
  4. 확인자가 .com TLD에 요청한다.
  5. TLD 서버가 도메인의 네임 서버(naver.com)의 IP 주소로 응답한다
  6. 재귀 확인자가 도메인의 네임 서버로 쿼리를 보낸다.
  7. naver.com의 IP 주소가 네임 서버에서 확인자에게 반환된다
  8. DNS 확인자가 처음 요청한 도메인의 IP 주소로 웹 브라우저에 응답한다.

DNS 서버 유형

캐싱이 없는 일반적인 DNS 조회에서는 이 네 가지 DNS 서버가 함께 작동하여 지정된 도메인의 IP 주소를 클라이언트에 전달한다.

✔️ DNS 재귀 확인자

  • DNS 쿼리의 첫 단계
  • 클라이언트와 DNS 네임서버 사이의 중개자 역할
  • 웹 클라이언트로부터 DNS 쿼리를 받은 후 캐시된 데이터로 응답하거나 요청을 루트 네임서버로 보냄
  • IP 주소가 있는 권한 있는 네임서버로부터 응답을 받은 후 응답을 클라이언트에 보냄

✔️ 루트 DNS 서버

  • 13개의 루트 DNS 서버가 알려져 있음
  • 재귀 확인자가 DNS 레코드를 요청하는 과정의 첫 단계
  • 도메인 이름을 포함한 재귀 확인자의 쿼리를 수용하며 해당 도메인의 확장자(.com, .net 등)에 따라 재귀 확인자를 TLD DNS 서버에 보내 응답함

✔️ TLD(최상위 도메인) DNS 서버

  • .com, .net과 같은 도메인의 마지막 부분인 확장자를 공유하는 모든 도메인 이름의 정보를 유지함
  • 예를 들어 .com으로 끝나는 모든 웹 사이트의 정보를 가지고 있음
  • 해당 도메인의 권한 있는 DNS 서버를 가리켜 응답함

✔️ 권한있는 이름 서버

  • IP 주소를 확인하는 확인자의 마지막 단계
  • 재귀 확인자가 TLD 네임서버로부터 응답을 받으면, 확인자는 해당 응답을 권한 있는 네임서버로 보냄
  • 도메인 이름에 고유한 정보(예를 들어google.com)를 포함
  • 요청한 레코드에 대한 엑세스 권한이 있다면, 요청한 도메인 이름의 IP 주소를 초기 요청을 한 재귀 확인자에게 보냄

💡 DNS 쿼리

클라이언트가 도메인 이름을 IP 주소로 또는 그 반대로 변환하기 위해 DNS 서버에게 보내는 요청

💡 DNS 캐시

이전에 수행된 DNS 쿼리의 결과를 일정 시간 동안 저장하는 메커니즘


DNS 추적하기

dig +trace [도메인 이름] 명령을 사용하여 DNS 조회의 각 단계를 추적할 수 있다.

DNS란 무엇입니까? | DNS 작동 원리 참고



Reference

생활코딩-리눅스 강좌

profile
🦋개발 공부 기록🦋

0개의 댓글