DNS
네트워크에서 도메인이나 호스트 이름을 숫자로 표기된 IP 주소로 해석해주는 TCP/IP 네트워크 서비스를 의미합니다.
bind
DNS서버를 구축 및 운영하기 위한 표준 서버 데몬 프로그램이라고 보시면 됩니다.
또한 유닉스(unix) 및 리눅스(linux), 윈도우 등 거의 모든 플랫폼을 지원하는 DNS의 모든 기능을 갖춘 소프트웨어 입니다.
배포판 리눅스 대표적으로 DNS는 bind 입니다 bind는 패키지형태로 제공하고 있으며, yum 명령어를 이용하여 설치할 수 있습니다.
yum -y install bind bind-chroot bind-utils
bind 패키지 설치가 완료되었다면 /etc/named.conf 설정파일이 생성됩니다.
네임서버 데이터베이스 및 zone 파일의 위치, 접근제어등의 보안설정을 할 수 있는 메인 설정파일입니다.
/etc/named.conf 설정파일을 열어서 설정을 바꿔보도록 하겠습니다.
1) 기본설정은 127.0.0.1에 리스닝닝하기 때문에, 외부에서 접속이 불가능합니다 서버에 설정된 모든 IP에 대해 리스닝하도록 any로 변경합니다.
options안에서 listen-on port 53 { 127.0.0.1; }; -> listen-on port 53 { any; };
2) 네임서버에 설정된 도메인만 응답하도록 설정하는부분입니다.
allow-query { localhost; }; -> allow-query { any; };
3) masterfile-format text; 를 추가하여 slave에서 zone 파일이 동기화 될때 text로 변환되어 저장되도록 합니다.
# vi /etc/named.conf
options {
//listen-on port 53 { 127.0.0.1; };
listen-on port 53 { any; }; //53번 포트 외부 접근 허용
listen-on-v6 port 53 { ::1; };
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 { localhost; };
allow-query { any; }; // 외부에서 오는 query에 대한 IP 대역 모두 허용
masterfile-format text; slave 에서 zone파일이 동기화 될때 text 형태로 변환
/etc/named.conf 설정을 완료하고 혹시 설정에 문제가 없는지 validation check를 하도록 하겠습니다.
# named-checkconf /etc/named.conf
명령어를 통해 named.conf에 문제가 없는지 확인할 수 있습니다.
명령어를 입력했을때 아무 내용도 출력되지 않는다면 문제가 없다고 볼 수 있습니다.
저는 ;을 빼먹었네요.. 😅
네임서버에 쿼리 요청시 사용할 도메인 정보(정방향 영역과 역방향영역)을 설정해야될 부분입니다.
named.rfc1912.zones의 맨하단부분의 추가할 도메인정보/파일(2tsumo.com, 2tsumo.com.zone)을 입력합니다.
2tsumo.com 도메인을 사용하려면 2tsumo.com.zone([도메인].zone)파일을 만들어야 됩니다
새로운 도메인에 대한 zone을 추가하기위해 /etc/named.rfc1912.zones에 도메인 정보를 추가하도록 하겠습니다.
# vi /etc/named.rfc1912.zones
...
zone "2tsumo.com" IN {
type master;
file "2tsumo.com.zone";
allow-update { none; };
};
named.rfc1912.zones에 입력한 도메인 zone 파일을 named.localhost 기본 정보를 토대로 생성하고, 해당 zone 파일의 권한을 변경합니다.
/var/named/[도메인].zone은 네임서버 설정시 가장 중요한 도메인 정보 파일이며 네임서버를 가동시에 zone 파일을 읽어 네임서버 서비스가 가동되며, zone 파일은 도메인을 IP 주소로 변환해 주는 역할을 합니다.
# cp /var/named/named.localhost /var/named/2tsumo.com.zone
# chown root:named /var/named/2tsumo.com.zone
zone 파일의 규칙 및 domain에 연결할 IP 레코드를 추가합니다.
$TTL 1D
@ IN SOA 2tsumo.com. root.(
0 ; serial //시리얼값
1D ; refresh //보조 네임서버가 주 네임서버에 접속하는 시간
1H ; retry //접속 실패시 다시 시도할 시도 간격
1W ; expire //주네임서버에서 데이터가 없다면 1주 이후에 지워짐
3H ) ; minimum //TTL 설정과 같은 의미
IN NS 2tsumo.com. //도메인을 소우한 주 DNS의 도메인
IN A 192.168.0.18 //도메인이 찾아갈 IP주소
www IN A 192.168.0.18 //www.도메인이 찾아갈 IP주소
레코드 정보의 의미
1. $TTL
TTL은 test.com 도메인의 정보를 캐시 네임서버에서 가져간 다음 캐시 네임서버에 얼마나 보관할 것인가를 지정하는 시간입니다
2. @
@는 origin 도메인을 의미하는 것으로 named.conf 파일에 설정되어있는 도메인명을 의미합니다
3. SOA 레코드
SOA는 도메인에 대해 설정한 네임서버가 모든정보를 가지고 있음을 선언한 것으로 도메인에 대한 네임서비스의 모든 권한을 의미합니다
4. Serial
Refresh, retry, Exprire, Minimum 값들은 모두 secondary 네임서버와 primary 네임서버와의 연동을 어떻게 할 것인가에 대한 설정입니다 대부분의 도메인 설정은 주 네임서버에서 하고 보조네임서버는 주 네임서버의 설정 값을 주기적으로 가저가게 됩니다 주네임서버의 serial 값을 높여주게 되면 보조네임서버에서 설정이 변경된것으로 확인해고 새로운 zone 파일로 갱신하게됩니다.
5. Refresh
보조 네임서버에서 1차 네임서버의 변경된내용이 있는지 체크하는 시간입니다
6. Retry
2차 네임서버가 1차 네임서버로의 접근이 안될때 얼마 만에 접근을 시도할 것인가를 결정하는 값입니다
7. Expire
보조 네임서버는 주 네임서버에서 동기화 과정중 retry 주기마다 지속적으로 연결을 시도하였지만 expire 시간동안 계속해서 연결이 되지 않으면 보조 네임서버는 해당 도메인의 정보가 삭제되었거나 폐기되었다고 판단하여 그후부터 연결시도를 하지 않습니다
8. Minimum
TTL(Time to Live)를 의미하는 것으로 도메인 정보를 다른 네임서버에서 가져갔을 때에 가져간 도메인정보를 얼마나 보관하고 있을 것인가에 대한 시간 값입니다
9. NS레코드
NS레코드는 해당 도메인의 네임서버를 지정하는 레코드 입니다
IN NS ns.test.com.
10. A레코드
A레코드는 지정한 도메인의 실제로 접속할 IP 주소를 설정하는 레코드 입니다
IN A 192.168.65.133
www IN A 192.168.65.133
11. MX레코드
MX레코드는 해당 도메인으로 메일을 사용할 경우 메일서버를 지정한것입니다 IP로 지정이 가능하지만 IP변경으로 인한 정보의 변경을 최소화하기 위해 도메인을 사용하는 것이 좋습니다 도메인으로 지정할 경우에는 마지막에 "."으로 끝나야됩니다
IN MX 10 aspmx.l.google.com
12. CNAME 레코드
CNAME 레코드는 일명 별칭 레코드이며 test.com IP주소가 192.168.65.133라면 www.test.com으로 지정시에 IP주소가 같다는 의미입니다 쉽게 말해 test.com의 www.test.com 도메인이 동일한 의미를 가진것입니다
test IN CNAME google.com.
/etc/named.rfc1912.zones 설정과 /var/named/2tsumo.com.zone 생성한 파일이 문제가 없는지 validation check를 합니다.
# named-checkconf /etc/named.rfc1912.zones
# named-checkzone 2tsumo.com /var/named/2tsumo.com.zone
명령어를 입력하여 확인할 수 있습니다.named-checkconf로 얻은 결과값은 아무것도 나오지 않으면 정상인 것이고 named-checkzone 로 얻은 결과값은 OK가 나타나면 정상입니다.
named 설정이 다 되더라도 서버는 등록된 DNS를 찾지 못하기 때문에 설정된 DNS를 찾을 수 있도록 구축을 해야합니다. 간단하게 하자면 2tsumo.com 이라는 도메인을 zone에 만들고 등록을 했을때 /etc/resolv.conf에 search 2tsumo.com을 입력해야 등록된 DNS를 찾을 수 있습니다.
하지만 DNS가 새로 입력할 때마다 search domain을 입력하는것은 번거로운 일입니다.
그래서 간단한 방법으로 /etc/resolv.conf에 nameserver 127.0.0.1을 추가하면 자기 자신의 서버 zone에 등록되어있는 DNS를 찾아서 search domain과 같은 역할을 하여 DNS를 확인할 수 있습니다.
/etc/resolv.conf에 nameserver 127.0.0.1 값을 입력하고 저장한 후에 네트워크 서비스를 재기동 합니다.
# vi /etc/resolv.conf
...
nameserver 127.0.0.1 //search 2tsumo.com과 같은 효과, 가장 상단에 적용
설정이 완료되었다면 named 서비스를 재기동 하고 기본적으로 service가 disable로 되어있어서 재부팅시에 서비스가 꺼져있기 때문에 재부팅 하더라도 서비스가 바로 실행될 수 있도록 enable로 처리하도록 합니다.
# service named restart
# systemctl enabled named
nslookup 명령어를 사용하여 zone에 도메인을 등록한 값을 입력하면
정방향(domain -> IP) 값을 도출할 수 있습니다.
nslookup
> 2tsumo.com
Server: 127.0.0.1
Address: 127.0.0.1#53
Name: 2tsumo.com
Address: 192.168.78.51
잘 써먹었습니다.
6번에서
@ IN SOA 2tsumo.com. root.(
를@ IN SOA 2tsumo.com root.(
로 적어서 오류났네요 ㅋㅋ