네임 서버(Name server)는 디렉터리 서비스 프로토콜을 실행하는 프로그램이나 서버를 통칭한다. 일반적으로, 인터넷에서 Domain Name Service (도메인 이름) 를 제공하는 서버를 말한다.
생각보다 단순한 서비스이다.
전제 조건은
1. 세상의 모든 네트워크에 연결된 장비는 숫자로 된 IP주소 로 식별된다.
즉, www.haedongg.net 같은 주소를 가지는 장비는 없다는 얘기다.
2. 하지만 이 숫자로 된 주소는 인간이 기억하기 쉽지 않다.
3. 그래서 www.haedongg.net : 000.0000.000.000 같은 주소 연결이 필요하다.
는 것이다.
동작 원리는 다음과 같다.
– DNS 서버라는 녀석이 존재한다.
– 도메인 이름과 IP주소를 연결할 수 있는 정보를 가지고 있다.
(www.haedongg.net = 000.000.000.000 같은 정보)
– 사용자가 사용하는 PC에 DNS서버 정보를 미리 입력 해둔다.
– 웹 브라우저 등에서 www.haedongg.net을 입력한다.
– 사용자 컴퓨터는 hosts 라는 파일 안에 www.haedongg.net 이라는 정보가 있는지 확인한다.
– 없다면 미리 등록해둔 DNS 서버에 가서 www.haedongg.net 의 IP주소를 물어본다.
– DNS서버는 www.haedongg.net에 해당하는 주소 000.000.000.000를 반환한다.
– 000.000.000.000으로 이동한다.
위 역할을 하는 서버 DNS를 많은 ISP업체 등에서 제공하고 있다.
1.1.1.1 : cloudflare
8.8.8.8 : google
168.126.63.1 : KT
210.220.163.82 : SK boradband
164.124.101.2 : LG U+
등이 있다.
DNS 서비스 설치
haedong@haedong:/home/:]$ sudo yum install bind
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirror.kakao.com
Resolving Dependencies
--> Running transaction check
---> Package bind.x86_64 32:9.11.4-26.P2.el7_9.5 will be installed
...중략...
---> Package setools-libs.x86_64 0:3.3.8-4.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
=====================================================================================================================
Package Arch Version Repository Size
=====================================================================================================================
Installing:
bind x86_64 32:9.11.4-26.P2.el7_9.5 updates 2.3 M
Installing for dependencies:
GeoIP x86_64 1.5.0-14.el7 base 1.5 M
Transaction Summary
=====================================================================================================================
Install 1 Package (+13 Dependent packages)
Total download size: 6.9 M
Installed size: 18 M
Is this ok [y/d/N]: y
Downloading packages:
(1/14): bind-libs-lite-9.11.4-26.P2.el7_9.5.x86_64.rpm | 1.1 MB 00:00:00
...중략...
(14/14): setools-libs-3.3.8-4.el7.x86_64.rpm | 620 kB 00:00:00
---------------------------------------------------------------------------------------------------------------------
Total 9.2 MB/s | 6.9 MB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : 32:bind-license-9.11.4-26.P2.el7_9.5.noarch 1/14
...중략...
Verifying : setools-libs-3.3.8-4.el7.x86_64 14/14
Installed:
bind.x86_64 32:9.11.4-26.P2.el7_9.5
Dependency Installed:
GeoIP.x86_64 0:1.5.0-14.el7 audit-libs-python.x86_64 0:2.8.5-4.el7
bind-libs-lite.x86_64 32:9.11.4-26.P2.el7_9.5 bind-license.noarch 32:9.11.4-26.P2.el7_9.5
bind-libs.x86_64 32:9.11.4-26.P2.el7_9.5 libcgroup.x86_64 0:0.41-21.el7
policycoreutils-python.x86_64 0:2.5-34.el7 python-IPy.noarch 0:0.75-6.el7
setools-libs.x86_64 0:3.3.8-4.el7
Complete!
서비스 설정
haedong@haedong:/home:]$ sudo vi /etc/named.conf
// named.conf
options {
//서비스 요청을 받을 IP를 지정한다. IPv4 any로 변경한다.
listen-on port 53 {any; };
//서비스 요청을 받을 IP를 지정한다. IPv6. any로 변경한다.
listen-on-v6 port 53 { any; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
recursing-file "/var/named/data/named.recursing";
secroots-file "/var/named/data/named.secroots";
// 서비스 요청을 허용해야 한다.
allow-query { any; };
recursion yes;
dnssec-enable yes;
dnssec-validation yes;
bindkeys-file "/etc/named.root.key";
managed-keys-directory "/var/named/dynamic";
pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
zone "." IN {
type hint;
file "named.ca";
};
// 서비스 할 도메인 정보를 기재하는 파일이다.
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
도메인 추가
haedong@haedong:/home:]$ sudo vi /etc/named.rfc1912.zones
// named.rfc1912.zones:
zone "localhost.localdomain" IN {
type master;
file "named.localhost";
allow-update { none; };
};
zone "localhost" IN {
type master;
file "named.localhost";
allow-update { none; };
};
zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
type master;
file "named.loopback";
allow-update { none; };
};
zone "1.0.0.127.in-addr.arpa" IN {
type master;
file "named.loopback";
allow-update { none; };
};
zone "0.in-addr.arpa" IN {
type master;
file "named.empty";
allow-update { none; };
};
// 변환 해 줄 주소.
// xxx.haedong.skk의 주소 정보. 즉, a.haedongg.skk haedong.haedongg.skk 등의 주소를 사용가능케 한다.
zone "haedong.skk" IN{
type master;
// zone 파일 지정
file "haedong.skk.zone";
allow-update {none;};
allow-transfer {none;};
};
zone 파일 설정
haedong@haedong:/home:]$ sudo vi /var/named/haedong.skk.zone
$TTL 1D
@ IN SOA @ haedong.skk. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS @
A 127.0.0.1
AAAA ::1
// haedong.haedong.skk 를 질의하면 172.17.0.11 을 반환한다.
haedong IN A 172.17.0.11
// hello.haedong.skk 를 질의하면 192.168.0.1을 반환한다.
hello IN A 192.168.0.1
// bye.haedong.skk 를 질의하면 www.haedongg.net을 반환한다.
bye IN CNAME www.haedongg.net
※ 위의 // 주석은 적용되지 않는다. //로 시작하는 줄은 모두 삭제한다.
vi /etc/named.rfc1912.zones 파일에 zone 정보를 기재하고 기재된 주소에 해당하는 zone 파일을 생성하고 정보를 위 양식대로 넣어주면 된다.
(호스팅 서비스 업체에서 제공하는 DNS나 등은 GUI등을 통해 설정 할 수 있다.)
생성한 zone 파일은 named 그룹이 소유권을 가지도록 설정해야 한다.
haedong@haedong:/home:]$ sudo chown -R :named /var/named/haedong.skk.zone
서비스 구동 및 확인
haedong@haedong:/home:]$ sudo service named restart
Redirecting to /bin/systemctl restart named.service
haedong@haedong:/home:]$ ps -ef | grep named
named 158850 1 0 15:17 ? 00:00:00 /usr/sbin/named -u named -c /etc/named.conf
root 158901 150715 0 15:18 pts/3 00:00:00 grep --color=auto named
haedong@haedong:/home:]$ nslookup haedong.haedong.skk
Server: 10.240.29.37
Address: 10.240.29.37#53
Name: haedong.haedong.skk
Address: 172.17.0.11
named 는 UDP 53 포트로 서비스한다.
방화벽(firewalld / iptables)등에서 UDP53번 포트를 허용하지 않으면 서비스 되지 않는다.
댓글을 달려면 로그인해야 합니다.