DNS(bind)
※ 데비안 5.03기반의 자료
- conf파일 설정
# vim /etc/bind/named.conf
--------------------------------------------------------------------
include "/etc/bind/named.conf.options";// 여기 있는 파일의 내용을 현재 파일에 추가
...
zone "자신이 하고 싶은 도메인" {
type 타입설정;
file “파일이름 혹은 파일경로”;
allow-update { 영역전송해줄 IP; };
masters { 마스터IP주소; };
};
include "/etc/bind/named.conf.local";// 여기 있는 파일의 내용을 현재 파일에 추가
--------------------------------------------------------------------
zone 지시문에 적을 수 있는 것은 정방향과 역방향이 있다. 정방향은 도메인을 IP로 매핑하기위해 사용하며 skill.com 이런 식 으로 도메인을 적는다. 역방향은 IP를 도메인으로 매핑하기위해 사용하며 192.168.0.0/24은 0.168.192.in-addr.arpa 이렇게 적어 준다. 또 172.16.0.0/16이라면 16.172.in-addr.arpa로 적어 준다. 그러니 네트워크 주소에서 호스트부분을 지워주고 적는다. 그러나 예외가 있는데 네트워크 주소에서 0이 없는 경우는 3옥테트를 적어준다. 예를 들어보면 192.168.10.128/25는 10.168.192.in-addr.arpa로 적어준다. 여기 적힌 도메인을 존파일에서는 origin이라 부름
type 지시문 부분에 쓸 수 있는 옵션으로는 master와 slave가 있다. master는 자신이 직접 존파일을 만들어서 자신이 관리하며 호스트 추가 등 존파일 설정을 마음대로 할 수 있다. slave는 미리 존파일이 설정되어있는 master서버로부터 master 서버의 존파일을 받아와 서비스만 한다.
file 지시문은 zone파일의 위치를 지정한다. 만약 그냥 파일이름만 지정한다면 directory 옵션에서 지정되어 있는 경로에 파일이 있어야 한다. named.conf 파일이나 include되어있는 파일에 directory 옵션이 있을 것 이다. 만약 경로로 적어준다면 /etc/bind/db.skill.com 이런 식으로 적어준다.
allow-update 지시문은 slave서버에게 자신의 영역전송을 허락 해 줄때 적는다. 딱 하나의 서버에게만 허락해 줄 수도 있고(허락해줄 서버IP), 모든 서버에게 허락해준다면 any를 적는다. allow-update랑 같은 옵션으로 allow-transfer이 있다. 만약 slave서버에게 영역전송 허락을 안 해 준다면 지시문을 적을 필요 없다. 영역전송을 하기 싫지만 지시문을 적고 싶다면 옵션은 none을 적는다.
masters 지시문은 자신의 타입이 slave일 때 영역 전송을 받을 master서버의 IP 주소를 적는다. 만약 master인 경우는 적을 필요가 없음.
· zone파일 설정
- 정방향
※ 편의상 skill.com의 존파일이라고 생각하고 적음
# cp /etc/bind/db.local /var/cache/bind/db.skill.com// 샘플파일을 설정파일에 복사
-> 존파일에서 file “파일이름 혹은 파일경로”; 이행의 적혀있는 경로에 만들어 줘야 함.
# vim /var/cache/bind/db.skill.com
--------------------------------------------------------------------
$TTL604800
@INSOAskill.com. root.192.168.0.1. (
2; Serial
604800; Refresh
86400; Retry
2419200; Expire
604800); Negative Cache TTL
;
@INNS192.168.0.1
@INA192.168.0.1
wwwINA192.168.0.1
INMX10skill.com.
downINCNAMEwww
--------------------------------------------------------------------
$TTL 604800
-> 다른 서버에서 자신의 정보를 가져 갓을 시 그것이 얼마나 머물 건지(초 단위)
@INSOAskill.com. root.192.168.0.1. (
2; Serial
604800; Refresh
86400; Retry
2419200; Expire
604800); Negative Cache TTL
-> @은 orgin을 뜻함 conf파일에서 정해준 기본 도메인을 뜻한다. 그러니 conf파일에서 zone "skill.com" { 이렇게 적어줬다면 orgin은 skill.com이 됨. 이 것을 만약 @대신 도메인으로 적어준다면 skill.com. 이라고 적어 줘야함 맨 뒤에 . 을 찍지 않으면 뒤에 도메인이 한번 더 붙음(skill.com.->skill.com skill.com->skill.com.skill.com)
SOA는 해당 도메인에 대해 여기서 설정한 네임서버가 모든 정보를 가지고 있음을 알려 주는 레코드 해당 도메인에 대한 네임 서비스의 모든 권한이 여기 있다는 것을 의미 뒤에 192.168.0.1.은 네임서버를 뜻하고 그다음 오는 것은 관리자 메일 주소를 뜻함
2 ; Serial 은 존파일의 버전을 뜻함 파일을 수정했다면 값을 하나 올림(꼭 할필요는 없지만 편의상) 보통 날짜로 표시함(2009112511)
604800 ; Refresh 은 보조네임서버가 이 주기 마다 주네임서버의 파일을 업데이트 받아옴 (단위는 초)
86400 ; Retry 은 보조네임서버가 1차로 접근이 안 되면 계속 주기 적으로 접근하는데 그 주기를 설정 (단위 초)
2419200 ; Expire 은 보조네임서버가 1차로 접근이 안 되면 Retry단위로 계속 주네임서버에 접근 한다고 했는데 계속 Retry 단위로 접근을 하다가 Expire시간 동안 연결이 안 되면 주네임서버 에서 도메인정보가 삭제 되었 거나 등등 도메인이 없다고 판단하여 더 이상 주네임서버에 접근을 하지 않음
604800) ; Negative Cache TTL 은 다른 서버에서 자신의 정보를 가져 갓을 시 그것이 얼마나 머물 건지(초 단위) 그러니 특정 도메인의 정보가 변경되었을 경우, 이 시간동안은 변경된 정보가 적용되지 않을 수 있음
@INNS192.168.0.1
-> @(skill.com)의 네임서버를 설정, 또 IN 앞에 아무것도 안 적으면 뒤에 .이 안 붙었으니 자동으로 skill.com을 뜻하는 것이 됨
@INA192.168.0.1
-> @(skill.com)을 매핑해줄 아이피 설정, IN앞에 아무것도 안 적으면 뒤에 .이 안 붙었으니 자동으로 skill.com을 뜻하는 것이 됨
wwwINA192.168.0.1
-> www.skill.com을 매핑해줄 아이피 설정 www 뒤에 .이 안 붙어 있으니 자동으로 skill.com으로 붙음(www = www.skill.com.)
INMX10skill.com.
-> skill.com(아무것도 안 썻으니 자동으로 붙음)의 메일들을 skill.com 서버로 보냄 그러니 webmaster@skill.com의 메일을 skill.com서버로 전달 그리고 10은 메일서버의 우선권임 숫자가 낮은 서버를 사용
downINCNAMEwww
-> down.skill.com(down뒤에 점이 없으므로)을 www.skill.com(www뒤에 점이 없으므로)로 매핑 그러니 원본은 있어야하고 별칭은 없어도 된다. 저렇게 되면 www.skill.com의 정보를 down.skill.com이 그대로 받아감 www.skill.com이 192.168.0.1이라면 down.skill.com도 192.168.0.1이고 www.skill.com이 192.168.0.10으로 바뀌면 down.skill.com도 192.168.0.10이 되는 것이다.
※ 존파일에서는 어느 위치든 점 찍는것을 유의
- 역방향1
※ 편의상 0.168.192.in-addr.arpa의 존파일이라 생각 하고 적음
# cp /etc/bind/db.127 /var/cache/bind/db.0.168.192
# vim /var/cache/bind/db.0.168.192
--------------------------------------------------------------------
$TTL 604800
@INSOAskill.com.root.skill.com (
2; Serial
604800; Refresh
86400; Retry
2419200; Expire
604800); Negative Cache TTL
;
@INNSskill.com.
1INPRTdebian.skill.com.
--------------------------------------------------------------------
1INPRTdebian.skill.com.
-> 192.168.0.1을 debian.skill.com으로 매핑
- 역방향2
※ 편의상 16.172.in-addr.arpa의 존파일이라 생각 하고 적음
# cp /etc/bind/db.127 /var/cache/bind/db.16.172
# vim /var/cache/bind/db.16.172
--------------------------------------------------------------------
$TTL 604800
@INSOAskill.com.root.skill.com (
2; Serial
604800; Refresh
86400; Retry
2419200; Expire
604800)
; Negative Cache TTL
;
@INNS192.168.0.1
1.10INPTRdebian.skill.com.
--------------------------------------------------------------------
1.10INPTRdebian.skill.com.
-> 172.16.10.1 을 debian.skill.com으로 매핑
- 정방향 마스터 실습
# vim /etc/bind/named.conf// conf파일 설정
--------------------------------------------------------------------
// This is the primary configuration file for the BIND DNS server named.
.
.
include "/etc/bind/named.conf.options";
.
.
zone "skill.com" {
type master;
file "/etc/bind/db.skill.com";
};
include "/etc/bind/named.conf.local";
--------------------------------------------------------------------
# cp /etc/bind/db.local /etc/bind/db.skill.com
# vim /etc/bind/db.skill.com
--------------------------------------------------------------------
$TTL604800
@INSOAns1.skill.com.root.skill.com. (
2; Serial
604800; Refresh
86400; Retry
2419200; Expire
604800 ); Negative Cache TTL
;
@INNSns1.skill.com.
@INA192.168.0.1
wwwINA192.168.0.1
ns1INA192.168.0.1
--------------------------------------------------------------------
# /etc/init.d/bind9 restart
# nslookup
> skill.com
Server:192.168.0.1
Address:192.168.0.1#53
Name:skill.com
Address: 192.168.0.1// 자신이 설정한 도메인에 설정한 IP가 나오면 성공
- 역방향 마스터 실습
# vim /etc/bind/named.conf
--------------------------------------------------------------------
// This is the primary configuration file for the BIND DNS server named.
.
.
include "/etc/bind/named.conf.options";
.
zone "0.168.192.in-addr.arpa" {
typemaster;
file"db.0.168.192";
};
include "/etc/bind/named.conf.
--------------------------------------------------------------------
# cp /etc/bind/db.127 /var/cache/bind/db.0.168.192
# vim /var/cache/bind/db.0.168.192
--------------------------------------------------------------------
$TTL604800
@INSOAns1.skill.com. root.skill.com. (
1; Serial
604800; Refresh
86400; Retry
2419200; Expire
604800 ); Negative Cache TTL
;
@INNSns1.skill.com.
1INPTRskill.com.
1INPTRwww.skill.com.
1INPTRns1.skill.com.
--------------------------------------------------------------------
# /etc/init.d/bind9 restart
# nslookup
> 192.168.0.1
Server:192.168.0.1
Address:192.168.0.1#53
1.0.168.192.in-addr.arpaname = skill.com.
-> 자신이 설정해준 값이 나오면 성공
※ 주의 할 점은 역방향은 zone파일에서 origin이 0.168.192.in-addr.arpa이다.
- 영역전송을 위한 정방향, 역방향 마스터 실습
※전제 마스터IP:192.168.0.1, 슬레이브IP:192.168.0.10
· 마스터 서버 설정
# vim /etc/bind/named.conf
--------------------------------------------------------------------
// This is the primary configuration file for the BIND DNS server named.
.
.
.
zone "skill.com" {
type master;
file "db.skill.com";
allow-update { 192.168.0.10; };
};
zone "0.168.192.in-addr.arpa" {
type master;
file "db.0.168.192";
allow-update { 192.168.0.10; };
};
.
.
--------------------------------------------------------------------
# cp /etc/bind/db.local /var/cache/bind/db.skill.com
# cp /etc/bind/db.127 /var/cache/bind/db.0.168.192
# vim /var/cache/bind/db.skill.com
--------------------------------------------------------------------
$TTL604800
@INSOAns1.skill.com.root.skill.com. (
2; Serial
604800; Refresh
86400; Retry
2419200; Expire
604800 ); Negative Cache TTL
;
@INNSns1.skill.com.
@INA192.168.0.1
ns1INA192.168.0.1
--------------------------------------------------------------------
# vim /var/cache/bind/db.0.168.192
--------------------------------------------------------------------
$TTL604800
@INSOAns1.skill.com. root.skill.com. (
1; Serial
604800; Refresh
86400; Retry
2419200; Expire
604800 ); Negative Cache TTL
;
@INNSns1.skill.com.
1INPTRskill.com.
1INPTRwww.skill.com.
1INPTRns1.skill.com.
--------------------------------------------------------------------
# /etc/init.d/bind9 restart
· 슬레이브 서버 설정
# vim /etc/bind/named.conf
--------------------------------------------------------------------
// This is the primary configuration file for the BIND DNS server named.
.
.
zone "skill.com" {
type slave;
file "db.skill.com-sv";
masters { 192.168.0.1; };
}
zone "0.168.192.in-addr.arpa" {
type slave;
file "db.0.168.192-sv";
masters { 192.168.0.1; };
};
.
.
--------------------------------------------------------------------
# /etc/inid.d/bind9 restart
# ls /var/cache/bind
db.0.168.192-sv db.skill.com-sv// 적어준 파일이 자동으로 받아오나 확인
# nslookup
> server 192.168.0.10// 아이피를 슬레이브 아이피로 설정
Default server: 192.168.0.10
Address: 192.168.0.10#53
> skill.com
Server:192.168.0.10
Address:192.168.0.10#53
Name:skill.com// 설정해준대로 받아오나 확인
Address:192.168.0.1
> 192.168.0.1
Server:192.168.0.10
Address:192.168.0.10#53
1.0.168.192.in-addr.arpaname = www.skill.com.// 설정해준대로 받아오나 확인
1.0.168.192.in-addr.arpaname = skill.com.
1.0.168.192.in-addr.arpaname = ns1.skill.com.
- 라운드 로빈 구성
· 라운드 로빈 이란
라운드 로빈은 엑세스의 분산을 위해 사용한다. DNS서버에서 skill.com 도메인을 두 개의 IP로 매핑 하여 첫 번째 IP에 엑세스했다 두 번째 IP에 엑세스했다 이런 식으로 분산을 위해 사용한다.
그러니 www.skill.com으로 매핑 되는 웹서버A가 있는데 사용자 폭주로 서버가 다운이 자주 된다. 이 경우 웹서버를 하나 더 늘려 웹서버B를 만든다. 그리고 DNS 서버에서 www.skill.com에 호스트를 웹서버A에도 매핑하고 웹서버B에도 매핑하면 사용자가 A를 갔다 B를 갔다 하니 한 서버에서 처리하는 일이 반으로 감소한다.
· 라운드 로빈 실습
# vim /etc/bind/named.conf
--------------------------------------------------------------------
zone "skill.com" {
type master;
file "db.skill.com";
};
--------------------------------------------------------------------
# cp /etc/bind/db.local /var/cache/bind/db.skill.com
# vim /var/cache/bind/db.skill.com
--------------------------------------------------------------------
$TTL604800
@INSOAns1.skill.com.root.skill.com. (
2; Serial
604800; Refresh
86400; Retry
2419200; Expire
604800; Negative Cache TTL
;
INNSns1.skill.com.
INA192.168.0.1
wwwINA192.168.0.1// 서버A
wwwINA192.168.0.2// 서버B
ns1INA192.168.0.1
--------------------------------------------------------------------
# /etc/init.d/bind9 restart
# nslookup
> server 192.168.0.1
Default server: 192.168.0.1
Address: 192.168.0.1#53
> www.skill.com
Server:192.168.0.1
Address:192.168.0.1#53
Name:www.skill.com
Address: 192.168.0.1// 설정해준 값 나오면 성공(한 도메인에 두 개의 아이피)
Name:www.skill.com
Address: 192.168.0.2// 설정해준 값 나오면 성공(한 도메인에 두 개의 아이피)
- 존파일 기본 경로 변경
# vim /etc/bind/named.conf/options
--------------------------------------------------------------------
.
.
directory "/var/cache/bind";// 이 부분을 변경 하고픈 경로로 설정
notify yes// zone 업데이트시 2차 dns에 알림
.
--------------------------------------------------------------------
directory 지시문 변경 후 필요한 존파일들은 변경한 경로로 이동해줌