네임서버 구축

김상우·2022년 7월 24일
0

CentOS

목록 보기
6/11
post-thumbnail

도메인 체계

도메인 이름 체계는 트리구조의 형태로 고안되어 있다.

루트 네임서버는 1단계 네임서버를 관리하며, 각 1단계 네임서버는 자신의 하위에 있는 2단계 네임서버를 관리한다. 예를들면 com 네임서버는 naver, google, nate 등을 관리한다는 뜻이다.
이론적으로는 128계층까지 사용 가능하다고 한다.

로컬 네임 서버의 동작 원리

  1. 웹 브라우저 주소 창에 URL 입력
  2. /etc/resolv.conf의 'nameserver [nameserver IP]' 를 통해 로컬 네임서버 조회
  3. 로컬 네임서버를 통해 URL의 IP 조회
  4. 질문을 받은 로컬 네임서버는 본인의 캐시 DB를 통해 URL의 정보가 있는지 조회
  5. 로컬 네임서버가 'ROOT 네임서버'에 URL의 주소 질의
  6. ROOT 네임서버는 주소 전체의 정보를 모르기 때문에 1차 도메인을 관리하는 네임서버의 주소를 안내
  7. 응답받은 로컬 네임서버는 1차 도메인을 관리하는 네임서버에 URL의 주소 질의
  8. 질의를 받은 1차 도메인 네임서버에 URL에 대한 정보가 있다면 로컬 네임서버에 URL의 주소 제공
  9. 최초에 URL의 IP 주소를 요구한 PC에 제공받은 URL의 주소를 안내
  10. URL의 IP 주소를 획득한 PC는 해당 IP 주소로 접속 시도

캐싱 전용 네임 서버 구축

지금 설치된 가상머신은 총 4개로 서버용 2개 클라이언트용 2개로 구성되어 있다.

Server

  • Server에 네임서버 설치 및 설정
[root@localhost ~]# dnf -y install bind bind-chroot
[root@localhost ~]# vi /etc/named.conf
  • 수정할 내용
11행	listen-on port 53 { any; };
12행	listen-on-v6 port 53 { none; };
19행	allow-query     { any; };
34행	dnssec-validation no;
  • 네임서버 재시작 및 방화벽 재설정
[root@localhost ~]# vi /etc/named.conf 
[root@localhost ~]# systemctl restart named
[root@localhost ~]# systemctl enable named
Created symlink /etc/systemd/system/multi-user.target.wants/named.service → /usr/lib/systemd/system/named.service.
[root@localhost ~]# systemctl status named
● named.service - Berkeley Internet Name Domain (DNS)
[root@localhost ~]# firewall-cmd --permanent --add-service=dns
success
[root@localhost ~]# firewall-cmd --reload
success
  • 네임서버 작동 확인
[root@localhost ~]# dig @192.168.111.100 velog.io

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-17.P2.el8_0.1 <<>> @192.168.111.100 velog.io
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54446
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 4, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: 0d4a3d4916e610c600ed0e2b62dcec78e33933ace2d51e23 (good)
;; QUESTION SECTION:
;velog.io.			IN	A

;; ANSWER SECTION:
velog.io.		60	IN	A	52.78.220.56
velog.io.		60	IN	A	3.39.215.212
(하략)

Client

  • 구축한 네임서버의 동작 확인
[centos@localhost ~]$ nslookup
> server 192.168.111.100
Default server: 192.168.111.100
Address: 192.168.111.100#53
> velog.io
Server:		192.168.111.100
Address:	192.168.111.100#53

Non-authoritative answer:
Name:	velog.io
Address: 52.78.220.56
Name:	velog.io
Address: 3.39.215.212
> exit
  • 네임서버 고정
[centos@localhost ~]$ su -c 'vi /etc/resolv.conf'
암호:
[centos@localhost ~]$ su -c 'cat /etc/resolv.conf'
암호:
# Generated by NetworkManager
search localdomain
nameserver 192.168.111.100
  • Server(B) 에서 동일하게 테스트

마스터 네임 서버

서버 구축 및 설정

  • 웹 서버 설정
    웹 서버 설정은 Server에서 설정했다.
[root@localhost ~]# dnf -y install httpd
[root@localhost ~]# systemctl status httpd
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor pres>
   Active: inactive (dead)
     Docs: man:httpd.service(8)
[root@localhost ~]# systemctl start httpd
[root@localhost ~]# systemctl status httpd
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor pres>
   Active: active (running) since Sun 2022-07-24 16:12:29 KST; 5s ago
[root@localhost ~]# firewall-cmd --permanent --add-service=http
success
[root@localhost ~]# firewall-cmd --permanent --add-service=https
success
[root@localhost ~]# firewall-cmd --reload
success
[root@localhost ~]# vi /var/www/html/index.html

index.html에는 간단하게 웹서버라는 문구만 넣어 생성했다.

  • FTP 서버 설치 및 설정
    Server(B)에 FTP 서버 설치 후 설정과정이다.
[root@localhost ~]# dnf -y install vsftpd
[root@localhost ~]# firewall-cmd --permanent --add-service=ftp
success
[root@localhost ~]# firewall-cmd --reload
success
[root@localhost ~]# cd /var/ftp
[root@localhost ftp]# vi welcome.msg
[root@localhost ftp]# vi /etc/vsftpd/vsftpd.conf
[root@localhost ftp]# systemctl restart vsftpd
  • ksw.com 도메인에 대한 설정
[root@localhost ~]# vi /etc/named.conf 
zone "ksw.com" IN {
        type master;
        file "ksw.com.db";
        allow-update { none; };
};

위의 내용을 추가 후 문법검사

[root@localhost ~]# named-checkconf 
[root@localhost ~]# cd /var/named/
[root@localhost named]# touch ksw.com.db
[root@localhost named]# ls
chroot  dynamic     named.ca     named.localhost  slaves
data    ksw.com.db  named.empty  named.loopback
$TTL            3H
@       SOA     @       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

touch ksw.com.db 명령어로 ksw.com.db 이름의 빈 파일을 생성하고 편집기를 통해 위 내용을 입력한다.

  • 문법체크 후 named 재시작
[root@localhost named]# named-checkzone ksw.com ksw.com.db 
zone ksw.com/IN: loaded serial 2
OK
[root@localhost named]# systemctl restart named
[root@localhost named]# systemctl status named
● named.service - Berkeley Internet Name Domain (DNS)
   Loaded: loaded (/usr/lib/systemd/system/named.service; enabled; vendor prese>
   Active: active (running) since Sun 2022-07-24 16:35:53 KST; 9s ago

클라이언트에서 접속 테스트

  • WinClient(가상머신)
  • Client(가상머신)

    두가지 클라이언트에서 모두 접속이 잘 되는것을 통해 ftp서버와 웹 서버가 정상 구동 된다는 것을 확인할 수 있다.

라운드로빈

nslookup 명령어로 확인해본 naver, google, velog의 정보는 한개의 IP 주소가 아닌 두개의 IP 주소가 나온다.
이 경우는 웹 서버를 1대가 아닌 여러 대로 운영하기 때문에 웹 클라이언트가 서비스를 요청했을 때 교대로 서비스를 실행하는 것으로 웹 서버의 부하를 공평하게 나눌 수 있는 방식이다.

간단하게 라운드 로빈 방식으로 네임서버를 구현해보았다.

  • 기존에 구축된 웹 서버 IP 주소 확인
[root@localhost named]# nslookup
> velog.io
Server:		192.168.111.2
Address:	192.168.111.2#53

Non-authoritative answer:
Name:	velog.io
Address: 3.39.215.212
Name:	velog.io
Address: 52.78.220.56
> www.danawa.com
Server:		192.168.111.2
Address:	192.168.111.2#53

Non-authoritative answer:
Name:	www.danawa.com
Address: 119.205.208.11
> www.ccna.com
Server:		192.168.111.2
Address:	192.168.111.2#53

Non-authoritative answer:
www.ccna.com	canonical name = ccna.com.
Name:	ccna.com
Address: 3.33.152.147
Name:	ccna.com
Address: 15.197.142.173
> exit

갑자기 생각난 3개의 웹사이트의 IP를 활용해볼 것이다.

  • /ksw.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.ksw.com.
webserver       100     IN      A       52.78.220.56
                200     IN      A       119.205.208.11
                300     IN      A       15.197.142.173
~                                                       
  • 수정 후 named 재시작 및 nslookup 명령어를 통한 정보 확인
[root@localhost ~]# systemctl restart named
[root@localhost ~]# nslookup
> server 192.168.111.100 
Default server: 192.168.111.100
Address: 192.168.111.100#53
> www.ksw.com
Server:		192.168.111.100
Address:	192.168.111.100#53

www.ksw.com	canonical name = webserver.ksw.com.
Name:	webserver.ksw.com
Address: 52.78.220.56
Name:	webserver.ksw.com
Address: 15.197.142.173
Name:	webserver.ksw.com
Address: 119.205.208.11
>exit

클라이언트에서 www.ksw.com 을 주소창에 입력하면 IP 주소가 각각 다른 웹 페이지가 나온다.

실제 웹서버를 3개를 구현할 수 없었기 때문에 기존에 구축되어 있던 웹 서버의 IP를 활용해 라운드로빈 방식을 구현해보았다.
실제 가용되는 웹 서버라면 IP 주소만 다르고 같은 웹 페이지가 나타날 것이다.

profile
아침엔 운동하고 밤엔 잠을 잔다.

0개의 댓글