마스터 네임 서버

Violet_Evgadn·2023년 5월 8일
0

Linux

목록 보기
34/34

마스터 네임 서버

마스터 네임 서버란?

우리가 일반적으로 아는 DNS 서버는 로컬 네임 서버이다.

출처 : https://jung-story.tistory.com/53

클라이언트는 일단 /etc/hosts 파일에 해당 도메인명이 존재하는지를 파악한 뒤 만약 없다면 /etc/resolv.conf 파일에 기록되어 있는 DNS 서버로 도메인명에 해당하는 IP를 찾기 위해 UDP 요청을 보낸다.

만약 위 사진에서 "www.nate.com"이라는 서버의 IP 주소를 반환한다고 가정하자.
그럼 네임 서버는 ROOT 네임 서버에 IP를 문의한 뒤 COM 네임 서버 IP 주소를 받아 해당 서버로 다시 "www.nate.com"의 IP 주소를 문의한다.
그럼 COM 네임 서버는 nate.com 네임 서버의 IP 주소를 알려줄 것이고 네임 서버는 다시 nate.com 네임 서버 IP로 가서 www.nate.com의 IP 주소를 반환받을 수 있을 것이다.

출처 : https://jung-story.tistory.com/53

마스터 네임 서버는 특정 도메인에 속해 있는 컴퓨터들의 이름(도메인명)과 IP 주소를 관리해 주는 서버를 의미한다.
그리고 네임 서버는 마스터 네임 서버의 IP 주소를 알려줌으로써 네임 서버에 IP 주소를 질의하는 과정을 한 단계라도 줄일 수 있다.

예를 들어 위 사진에서 "인터넷상의 컴퓨터"가 www.john.com이라는 서버에 접속하고 싶다고 가정하자.
그럼 ROOT 네임 서버와 COM 네임 서버에 IP 주소를 질의하는 것까지는 동일하다.

이때 COM 네임 서버는 WWW 네임 서버의 IP를 알려주는 것이 아닌 사설 네트워크(VM Ware)에 존재하는 john.com의 네임 서버 & 웹 서버의 IP 주소를 반환해 준다.

그럼 john.com의 DB에 "www.john.com"과 "ftp.john.com"의 IP 주소를 저장하고 있기 때문에 바로 "www.john.com"의 IP 주소를 알 수 있는 것이다.

즉, WWW 네임 서버에 "www.john.com"의 IP 주소를 문의한 뒤 결과를 받기 위해 네트워크를 거칠 필요가 없고 VMWare 내부에 있는 Client의 경우 네트워크를 아예 거치지 않아도 바로 서버에 접근 가능하기 때문에 접속 속도가 매우 빨라지는 것이다.


마스터 네임 서버 구축

1. 웹 서버 구축 & 방화벽 설정

이전에 웹 서버와 WAS 구축 방법에 대해선 공부했다.
이 중 웹 서버 구축만 수행하면 된다.

https://velog.io/@violet_evgadn/%EC%9B%B9-%EC%84%9C%EB%B2%84%EC%99%80-WAS#span-stylecolor-lightblue-1-apache2-php-mariadb-%EC%84%A4%EC%B9%98

마지막으로 확인을 위해 "/var/www/html/index.html" 파일에 문구 하나를 추가해 주자.

2. FTP 서버 구축 & 방화벽 설정

1번에서 설정했던 웹 서버와는 다른 가상 환경에 FTP 서버를 구축하자.
이 또한 이전에 설명했던 과정이다.

https://velog.io/@violet_evgadn/FTP-%EC%84%9C%EB%B2%84

3. 도메인 설정

VMware Workstation에는 FTP 서버와 웹 서버, 총 2개 서버가 존재할 것이다.
이 중 웹 서버의 /etc/bind/named.conf.default-zones 파일을 수정할 것이다.

원래라면 마스터 네임 서버도 DNS 서버의 일종이므로 네임 서버 공간에 마스터 네임 서버 설정을 수행해줘야 한다.
하지만 집 컴퓨터로 실습하기에 네임 서버, 웹 서버, FTP 서버 3개를 구동시키는 것은 꽤 빡빡할 수 있으며 웹 서버가 네임 서버의 역할까지 하게 만들더라도 큰 문제가 없으므로 웹 서버에 네임 서버 설정까지 수행한 뒤 아래 과정을 수행하자.

이번 실습에서는 evgadn.com이라는 도메인으로 마스터 네임 서버를 설정한 뒤 이 도메인에 웹 서버인 www.evgadn.com과 FTP 서버인 ftp.evgadn.com을 연결시킬 것이다.

이를 위해 /etc/bind/named.conf.default-zones 파일의 마지막 부분에 아래와 같은 문구를 추가해 주자.

zone “evgadn.com” {
  type master;
  file “/etc/bind/evgadn.com.db”;
  allow-update { none; };
};

zone 설정 값은 아래와 같은 의미를 가진다.

  • type : 지정한 Zone이 자신의 네임 서버에서 어떤 역할을 하는지 설정
    • hint : 루트 도메인을 지정
    • master : 1차 네임 서버
    • slave : 2차 네임 서버
  • file : Zone File의 위치를 지정
    • named.ca라는 파일은 Zone 파일에 저장된 Name Server 관련 설정을 읽어 들여 네임 서버의 역할을 수행하는데 이때 Zone 파일 이름
    • 위에서는 /etc/bind/evgadn.com.db로 했지만 Master 서버라면 원하는 파일 경로로 설정해도 상관없음
    • 만약 해당 Zone이 Slave일 경우 Master 서버의 주소를 기재해야 함
  • allow-update : Dynamic DNS에 대한 설정
    • any : Dynamic DNS 사용
    • none : Dynamic DNS 사용하지 X
    • 단일 IP 주소 : Dynamic Update를 허용할 IP 주소

named.conf 파일을 수정한 뒤 named-checkconf 명령을 쳤을 때 아무 내용도 안 나왔다면 성공이다.

4. Zone 파일 생성

Zone파일은 위에서 "file" 위치에 지정한 경로의 파일명으로 생성해야 한다.

Zone파일은 포맷이 정해져 있는데, 포맷에 따라 파일을 생성함으로써 도메인에 대한 호스트명 및 2차 도메인에 대한 설정 정보를 저장하고 있다.

Zone 파일에 대한 자세한 설명은 아래에서 하고 일단 아래 내용으로 Zone 파일을 생성하자.

$TTL	3H
@	SOA	@	root.  ( 2	1D	1H	1W	1H )
	IN	NS	@
	IN	A	[메인으로 띄우고 싶은 Server IP]
www	IN	A	[Webserver IP]
ftp	IN	A	[FTP 서버 IP]

참고로 대괄호는 파일에 기입하지 않는다.
필자는 웹 서버=마스터 네임 서버이므로 Main Webserver IP에 127.0.0.1을 입력하여 아래와 같이 생성하였다.

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

마지막으로 아래와 같은 명령어를 입력하여 올바르게 Zone 파일이 생성되었는지 확인하자.

# evgadn.com이 아닌 다른 도메인을 설정했거나 Zone 파일 경로가 다르면
# 설정에 맞춰 명령어를 변경해 주자
named-checkzone evgadn.com evgadn.com.db

5. /etc/resolv.conf 파일 수정

/etc/resolv.conf 파일에는 nameserver 값이 적혀 있다.

원래는 "127.0.0.53"이 적혀있겠지만 우리는 마스터 네임 서버를 Name server로 사용할 것이므로 웹 서버와 FTP 서버의 Name Server IP 주소에 웹 서버 IP 주소를 입력해 주자.

(웹 서버가 마스터 네임 서버의 역할까지 수행하므로 웹 서버 IP 주소를 입력하는 것이다. 만약 웹 서버와 마스터 네임 서버를 구분했다면 마스터 네임 서버 IP 주소를 적어야 한다.)

6. 수정한 DNS 설정 적용

systemctl restart named

이제 웹 서버에서 www.evgadn.com으로 접속해 보면 /var/www/html/index.html 파일이 뜰 것이다.

6. FTP 서버 접속

이 서버가 마스터 네임 서버 역할을 하기 위해선 "www.evgadn.com"도 접속 가능해야 하지만 "ftp.evgadn.com"도 접속 가능해야 한다.

웹 서버에서 ftp ftp.evgadn.com을 입력해 보자.


이전에 기입했던 "welcome.msg"에 기입한 내용이 출력되었음을 볼 수 있다.
즉, 우리가 원하는 FTP 서버에 접속했다는 의미이다.

Name에는 FTP 서버의 User 중 1명을 입력하면 되고 get을 통해 FTP 서버 파일을 가져올 수 있고 push를 통해 현재 서버(웹 서버)의 파일을 FTP 서버에 보낼 수도 있다.
(당연하겠지만 FTP 서버가 켜져 있는 상태여야지만 접속이 가능하다)

추가. Round-Robin 네임 서버 구현

이전에 말했지만 WAS와 웹 서버를 나누는 이유 중 하나는 Load Balancing 역할을 수행할 수 있는 웹 서버에 여러 개의 WAS를 연결시켜 트래픽을 분산시킴으로써 부하를 감소시키기 위함이다.

그리고 마스터 네임 서버의 Zone 파일을 통해 이러한 로드 밸런싱 서버를 구축할 수 있다.

로드 밸런싱 방법 중 가장 간단한 방법은 Round-Robin 방식으로, 일정 시간이나 트래픽 개수를 기준으로 순서대로 돌아가며 트래픽을 분산시키는 것이다.

예를 들어 0 ~ 30초 동안 들어온 트래픽이 A 서버에 들어왔다면 30 ~ 60초에 들어온 트래픽은 B 서버에 들어가고, 60 ~ 90초에 들어온 트래픽은 다시 A 서버에 들어오는 방식이 시간 기준 Round-Robin 방식이며, 일정 개수의 트래픽이 1개 서버에 들어왔다면 다음 서버로 트래픽 처리를 넘기는 것이 트래픽 개수를 기준으로 한 Round-Robin 방식 로드 밸런싱이다.

방법은 매우 간단한데 Zone 파일에서 www 구역을 가장 아래에 옮긴 뒤(필수는 아니다. 보기 편하게 하기 위함이다) webserver 영역을 아래에 추가시키면 된다.

그렇게 완성된 Zone 파일은 아래와 같을 것이다.

$TTL    3H
@       SOA     @       root.  ( 2      1D      1H      1W      1H )
        IN      NS      @
        IN      A       127.0.0.1
ftp     IN      A       192.168.128.134
www     IN      CNAME   webserver.evgadn.com.
webserver       100     IN      A       [Server1 IP]
                200     IN      A       [Server2 IP]
                300     IN      A       [Server3 IP]

여기에서 Server1, Server2, Server3는 로드 밸런싱 하는 웹 서버가 연결해 줄 웹 서버, 혹은 WAS 서버를 말한다.

위 설정은 트래픽 개수에 따른 Round-Robin 방식의 로드 밸런싱으로, 1 ~ 100개까지의 트래픽은 Server1에서, 101~200 트래픽은 Server2에서, 201~300 트래픽은 Server3에서 처리한다는 것이다.

이후 systemctl restart named 명령을 통해 설정을 적용해 주면 정상 동작한다.


Zone 파일

Zone 파일 구조

$TTL   [Time]
@  SOA [nameserver] [contact-email-address] (
      [serial_number] [refresh_number] 
      [retry_number ] [expire_number]  
      [minium_number]  )

[도메인] [TTL]  [class]  [type]  [Rdata]
...

$TTL

Time To Live의 약자로 Zone 파일 첫 줄에 설정한다.

다른 서버에서 도메인 관련 정보를 조회하여 가져갔을 때 그쪽 서버의 캐시에 도메인 정보가 얼마나 머물지를 정해주는 값이다.

실습 예시에서는 $TTL 3H이므로 해당 도메인 서버에서 IP 주소를 가져갔다면 3시간 동안 캐시에 저장한다는 의미이다.

SOA Record

Zone 파일을 시작하는 레코드로써 시작은 도메인명 또는 도메인명을 나타내는 기호인 @을 사용한다.

  • nameserver : 네임 서버의 호스트명과 도메인명을 기입
    • 실습에서 이 값은 /etc/bind/named.conf.default-zones 파일에 이미 기입했기 때문에 현재 도메인을 나타내는 @로 입력했다.
  • contact_email_address : 관리자의 이메일 주소를 적는다.
  • serial_number : 일련번호
  • refresh_number : 보조 네임 서버(Slave)가 주 네임 서버(Master)에 얼마나 자주 체크할 것인지 설정
    • 실습에서는 1D이므로 하루를 주기로 주 네임 서버에 체크한다.
  • retry_number : 보조 네임 서버가 주 네임 서버 접근에 실패했을 경우 재시도할 주기 설정
    • 실습에서는 1H이므로 1시간을 주기로 설정했다.
  • expire_number : retry_number에 설정한 주기로 재시도했을 때 만기 시간을 설정
    • expire_number만큼 기다려도 주 네임 서버 접근에 실패하면 네임 서버 접근이 되지 않는 상황인 것이다.
  • minimum_numbr : TTL로써 가져간 정보의 최소 보관 시간 설정

도메인 영역

  • class : 레코드의 클래스를 지정하는 부분
    • 보통 Internet을 의미하는 IN을 사용
    • CH, HS 등도 사용
  • type
    • A : IPv4 주소 기입 시 사용
    • AAAA : IPv6 주소 기입 시 사용
    • NS : 도메인 네임 서버 지정 시 사용
    • MX : 메일 서버 지정 시 사용. 이때 0 또는 양의 정수값 기입하여 우선순위 지정
    • CNAME : 별칭 지정
      • 위 실습에서 CNAME으로 별칭을 webserver로 지정하여 로드밸런싱을 수행했다.
  • Rdata : IP주소, 도메인명, 호스트명을 지정하는 영역
profile
혹시 틀린 내용이 있다면 언제든 말씀해주세요!

0개의 댓글