2009-10-23 6 views
3

C를 사용하여 사용자 지정 DNS 이름 서버를 만들어야합니다.이 서버는 클라이언트 IP를 다른 서버로 보내야하는지 확인하기 위해 mysql db를 검사합니다. 테스트 네트워크에 이것을 사용하면 foo.com에 대한 요청은 실제 조회가 활성화 된 경우에만 표시되며, 그렇지 않으면 요청은 개발 환경으로 전달됩니다. 어떤 제안/권장 사항?C 사용자 지정 DNS 이름 서버 만들기

현재 ldns 또는 c-아르 같은 뭔가 libevent보고

내가 DNS 서버를 만들기 위해 평소보다 다른 오류 메시지를 반환해야 내 경우를 제외하고, 지금 일하고 뭔가 매우 유사
+1

이 네임 서버가 재귀 적으로 필요합니까? –

+0

현재 Stanford :: DNSserver를 사용하여 Perl DNS 이름 서버가 있습니다. 충돌이 일어나며 매일 다시 시작해야하므로 C에서 유사한 기능을 작성하고 있습니다. Stanford :: DNSserver까지 내가 아는 한 신뢰할 수 있습니다. 목표는 DNS 서버처럼 행동하고 mysql 테이블의 정보를 기반으로 특정 요청 만 수정하고 다른 모든 요청은 실제 DNS 서버에 전달하는 것입니다. – jfarrell

답변

1

에서보세요. libevent가 포함하고있는 evdns 함수는 꽤 간단하고 정확한 사용자 정의 DNS 서버를 만드는 데 필요한 부분입니다. bind를 사용하여 보았지만 zone과 추가 구성을 설정하지 않아도되고 evdns를 사용하여 기존 resolv.conf를 사용하여 DNS 요청을 실제 이름 서버로 전달하고 정보를 기반으로 필요에 따라 응답을 수정할 수있었습니다 mysql 테이블에 들어있다.

0

개인 네트워크에서 실행된다는 사실을 수용합니다.

나는 BIND 소스 코드를 다운로드하고 그에 대한 패치로 수정 사항을 작성하기로 결정했다. 그런 다음 배포를 위해 최신 보안 패치가 포함 된 최신 BIND 원본을 다운로드하고 사용자 지정 패치를 적용하여 빌드 할 수 있습니다.

나는 똑같은 일을하고, BIND를 얻고, 필요에 따라 수정하는 것을 권장한다. BIND와 그 모든 문서 here at ISC.ORG을 얻을 수 있습니다.

+0

나는 그것이 좋은 생각이라고 생각하지 않는다. BIND 9 (BIND 10의 후속 판과는 달리)는 실제로 해킹 가능성을 위해 만들어지지 않았습니다. – bortzmeyer

+0

소스 코드가 체계적으로 리팩토링되지 않았기 때문에 BIND 9에서 해킹하기가 쉽지 않다는 것을 의미합니다. 그러나 때로는 개발자가 파고 들어서 상황을 파악해야하는 경우가 있습니다. 어쨌든, OP는 C를 지정했고 사용법이 매우 뛰어 났을 것입니다. 그렇지 않으면 해킹을 위해 DNS 서버와 함께 제공되는 Python 및 Twisted Names를 사용하도록 제안했을 것입니다. –

2

BIND에는 이미 mySQL 확장이 있습니다 (동적로드 가능 영역 사용). 번역이 포함 된 주소 테이블을 만들고 테이블을 사용하여 올바른 DNS 레코드를 작성하는 쿼리를 정의하기 만하면됩니다. 전체 문서에 대해서는

은 다음을 참조하십시오 http://bind-dlz.sourceforge.net/

1

밥, 이미 정확하게 당신이 원하는 일을 할 수있는 좋은 시작을 제공한다 ldnslibevent의 매쉬업을 작성했습니다.

내가 DNS 요청을 처리하기위한 고유 한 기능이 포함되어 libevent 1.4으로가는 결국 http://code.google.com/p/evldns/