RSS구독하기:SUBSCRIBE TO RSS FEED
즐겨찾기추가:ADD FAVORITE
글쓰기:POST
관리자:ADMINISTRATOR

DNS서버(bind9)를 MySQL로 관리하기

DNS서버를 mysql로 손쉽게 관리해 보자~

장점은
네임서버를 손쉽게 관리 할 수 있고, 데몬을 재시작 안해도 바로 적용 된다는점~
굳이 서버에 안드가고..  웹에서 dns관리가 가능한점...

단점은
리소스랑 퍼포먼스가.. 좀 구리다는점..
하지만 관리하는 dns가 많이 없으니깐 장점이 더 좋다!


2일동안... 무척 애먹었는데..
일단 세팅해보자~



Step1. BIND 받아서 설치하기
cd /usr/local/src
tar zxvf bind-9.7.0-P1.tar.gz
작업하기 쉽게 디렉토리명을 바꿔주자
mv bind-9.7.0-P1 bind9


Step2. MySQL BIND SDB 드라이버
cd /usr/local/src
tar -xvzf mysql-bind-0-1.gz

여기서 mysqldb.c와 mysqldb.h를 bind에 복사 (정확한 위치를 몰라 몽땅 복사해 버리자!)
잘못 복사하면 make시에 오류 뱉어냄!
cp /usr/local/src/mysql-bind-0-1/mysqldb.c /usr/local/src/bind9/bin
cp /usr/local/src/mysql-bind-0-1/mysqldb.c /usr/local/src/bind9/bin/named
cp /usr/local/src/mysql-bind-0-1/mysqldb.c /usr/local/src/bind9/bin/named/include
cp /usr/local/src/mysql-bind-0-1/mysqldb.h /usr/local/src/bind9/bin
cp /usr/local/src/mysql-bind-0-1/mysqldb.h /usr/local/src/bind9/bin/named
cp /usr/local/src/mysql-bind-0-1/mysqldb.h /usr/local/src/bind9/bin/named/include


Step3. MySQL 라이브러리 주소
/usr/local/mysql/bin/mysql_config

Options:
--cflags         [-I/usr/local/mysql/include/mysql]
--include        [-I/usr/local/mysql/include/mysql]
--libs           [-L/usr/local/mysql/lib/mysql -lmysqlclient -lz -lcrypt -lnsl -lm]
--libs_r         [-L/usr/local/mysql/lib/mysql -lmysqlclient_r -lz -lpthread -lcrypt -lnsl -lm -lpthread]
--socket         [/tmp/mysql.sock]
--port           [3306]
--version        [5.0.37]
--libmysqld-libs [-L/usr/local/mysql/lib/mysql -lmysqld -lz -lpthread -lcrypt -lnsl -lm -lpthread -lrt]
여기서 나온 cflags와 libs를 기록해 두자


Step4. bind9 make 소스 수정
vim /usr/local/src/bind9/bin/named/Makefile.in

DBDRIVER_INCLUDES에 위에서 나온 cflags
DBDRIVER_LIBS에 libs를 적어주고
DBDRIVER_OBJS와 DBDRIVER_SRCS는 아래처럼 수정
#---------------------------------
#
# Add database drivers here.
#
DBDRIVER_OBJS = mysqldb.c
DBDRIVER_SRCS = mysqldb.@O@
DBDRIVER_INCLUDES = -I/usr/local/mysql/include/mysql
DBDRIVER_LIBS = -L/usr/local/mysql/lib/mysql -lmysqlclient -lz -lcrypt -lnsl -lm
#---------------------------------

Step5. bind9 main.c 소스 수정
vim /usr/local/src/bind9/bin/named/main.c
상단에 #include "mysqldb.h" 추가
setup() 내부에 mysqldb_init() 추가 (ns_server_create(ns_g_mctx, &ns_g_server) 앞에 있어야 함)
cleanup()에 mysqldb_clear() 추가


Step6. bind9 컴파일/설치
./configure --with-dlz-mysql
make
make install

configure때 나오는 OPENSSL 경고는 무시해주자~


Step7. DNS관리 DB 추가
-- DB생성
CREATE database dns;
-- 사용자 등록
GRANT ALL PRIVILEGES ON dns.* to dns@localhost IDENTIFIED BY '비밀번호';
-- 테이블 생성
CREATE TABLE IF NOT EXISTS `dns_records` (
 `id` int(11) NOT NULL auto_increment,
 `zone` varchar(64) default NULL,
 `host` varchar(64) default NULL,
 `type` varchar(8) default NULL,
 `data` varchar(64) default NULL,
 `ttl` int(11) NOT NULL default '3600',
 `mx_priority` int(11) default NULL,
 `refresh` int(11) NOT NULL default '3600',
 `retry` int(11) NOT NULL default '3600',
 `expire` int(11) NOT NULL default '86400',
 `minimum` int(11) NOT NULL default '3600',
 `serial` bigint(20) NOT NULL default '2008082700',
 `resp_person` varchar(64) NOT NULL default 'resp.person.email',
 `primary_ns` varchar(64) NOT NULL default 'ns1.yourdns.here',
 `data_count` int(11) NOT NULL default '0',
 PRIMARY KEY  (`id`),
 KEY `host` (`host`),
 KEY `zone` (`zone`),
 KEY `type` (`type`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=14 ;

-- 테스트할 데이터 삽입
INSERT INTO `dns_records` (`id`, `zone`, `host`, `type`, `data`, `ttl`, `mx_priority`, `refresh`, `retry`, `expire`, `minimum`, `serial`, `resp_person`, `primary_ns`, `data_count`) VALUES
(1, 'test.com', '@', 'soa', 'ns', 50, NULL, 28800, 14400, 3600000, 86400, 1997022700, 'root', 'ns.test.com.', 0),
(2, 'test.com', '@', 'NS', 'ns.test.com.', 50, NULL, 0, 0, 0, 0, 0, '', '', 0),
(3, 'test.com', '@', 'mx', 'mail.test.com.', 50, 10, 0, 0, 0, 0, 0, '', '', 0),
(4, 'test.com', '@', 'txt', 'v=spf1 ip4:3.3.3.3 ~all', 50, NULL, 0, 0, 0, 0, 0, '', '', 0),
(5, 'test.com', 'ns', 'A', '3.3.3.3', 50, NULL, 0, 0, 0, 0, 0, '', '', 0),
(6, 'test.com', '@', 'A', '4.4.4.4', 50, NULL, 0, 0, 0, 0, 0, '', '', 0),
(7, 'test.com', 'ftp', 'A', '4.4.4.4', 50, NULL, 0, 0, 0, 0, 0, '', '', 0),
(8, 'test.com', 'www', 'CNAME', 'ftp', 50, NULL, 0, 0, 0, 0, 0, '', '', 0),
(9, 'test.com', 'mail', 'A', '3.3.3.3', 50, NULL, 0, 0, 0, 0, 0, '', '', 0)


Step8. named.conf 수정
vim /etc/named.caching-nameserver.conf

아래의 내용을 추가해주자
view localhost_resolver {
match-clients { localhost; };
match-destinations { localhost; };
recursion yes;
include "/etc/named.rfc1912.zones";

dlz "Mysql zone" {
database "mysql
{host=127.0.0.1 dbname=dns user=dns pass=암호}
{select zone from dns_records where zone = '$zone$'}
{select ttl, type, mx_priority, case when lower(type)='txt' then concat('\"', data, '\"') when lower(type) = 'soa' then concat_ws(' ', data, resp_person, serial, refresh, retry, expire, minimum) else data end from dns_records where zone = '$zone$' and host = '$record$'}";
};
};
여기서 간혹 에러 뜬다.. zone어쩌고.. 구글링을 해보면 간혹 %zone% 로 써논곳들 있는데.. 그게 오류란다..
message에서 zone이 어쩌고 하면 $zone$ 로 바꾸는거 잊지말자!!


Step9. bind9 재시작 후 로그 확인
/etc/init.d/named restart
vim /var/log/message


Final. 최종 테스트
nslooup -type=a test.com localhost
Server: localhost
Address: 172.0.0.1#53
Name: ns.test.com
Address: 3.3.3.3


오케이 성공!!




트러블들...
격었던 트러블들은..
make때 mysqldb.c랑 mysqldb.h가 없다고.. 에러 뱉던것들..
복사를 잘못해서 그랬고;;;
%zone% 에서 오류.. $zone$로 해결

도움된 사이트들
2014/01/16 05:01 2014/01/16 05:01
http://zosel.net/trackback/90
ZOSEL:Too much is as bad as too little...!! 자공(子貢)이 공자에게 "사(師:子張의 이름)와 상(商:子夏의 이름)은 어느 쪽이 어집니까?" 하고 묻자, 공자는 "사는 지나치고 상은 미치지 못한다"고 대답하였다. "그럼 사가 낫단 말씀입니까?" 하고 반문하자, 공자는 "지나친 것은 미치지 못한 것과 같다(過猶不及)"고 말하였다.
Too much is as bad as too little...!! 자공(子貢)이 공자에게 "사(師:子張의 이름)와 상(商:子夏의 이름)은 어느 쪽이 어집니까?" 하고 묻자, 공자는 "사는 지나치고 상은 미치지 못한다"고 대답하였다. "그럼 사가 낫단 말씀입니까?" 하고 반문하자, 공자는 "지나친 것은 미치지 못한 것과 같다(過猶不及)"고 말하였다.
전체 (209)
리눅스시스템 (92)
윈도우시스템 (16)
프로그램 (7)
네트워크시스템 (7)
최근관심 (1)
«   2024/05   »
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
  1. yeezyboost-350.co.uk  2021
    yeezyboost-350.co.uk
  2. 강남역 풀싸롱  2021
    강남역 풀싸롱
  3.   2021
  1. 2018/02 (1)
  2. 2017/03 (2)
  3. 2016/12 (2)