도메인 이름 체계는 트리구조의 형태로 고안되어 있다.
루트 네임서버는 1단계 네임서버를 관리하며, 각 1단계 네임서버는 자신의 하위에 있는 2단계 네임서버를 관리한다. 예를들면 com 네임서버는 naver, google, nate 등을 관리한다는 뜻이다.
이론적으로는 128계층까지 사용 가능하다고 한다.
지금 설치된 가상머신은 총 4개로 서버용 2개 클라이언트용 2개로 구성되어 있다.
[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
(하략)
[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
[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에는 간단하게 웹서버라는 문구만 넣어 생성했다.
[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
[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 이름의 빈 파일을 생성하고 편집기를 통해 위 내용을 입력한다.
[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
두가지 클라이언트에서 모두 접속이 잘 되는것을 통해 ftp서버와 웹 서버가 정상 구동 된다는 것을 확인할 수 있다.
nslookup 명령어로 확인해본 naver, google, velog의 정보는 한개의 IP 주소가 아닌 두개의 IP 주소가 나온다.
이 경우는 웹 서버를 1대가 아닌 여러 대로 운영하기 때문에 웹 클라이언트가 서비스를 요청했을 때 교대로 서비스를 실행하는 것으로 웹 서버의 부하를 공평하게 나눌 수 있는 방식이다.
간단하게 라운드 로빈 방식으로 네임서버를 구현해보았다.
[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를 활용해볼 것이다.
$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
~
[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 주소만 다르고 같은 웹 페이지가 나타날 것이다.