2009-03-16 38 views
10

Necesito construir un servidor DNS de almacenamiento en caché simple no autorizado personalizado en C/C++. ¿Alguna guía? ¿Campo de golf? Muestras? Gracias!Cómo crear un servidor DNS simple personalizado en C/C++

+0

¿Por qué en la Tierra podría necesitar para construir su propio servidor DNS? –

+7

Causa Necesito un servidor DNS con alguna funcionalidad no estándar –

+0

Le recomiendo encarecidamente que busque soluciones alternativas, pero si este es el camino que debe seguir ... djbdns es de dominio público, por lo que puede hackearlo todo lo que desee. –

Respuesta

16

No existe un servidor DNS de caché "simple", especialmente si desea una seguridad decente. Los recientes ataques DNS han demostrado que la función de caché en servidores DNS recursivos es particularmente vulnerable.

Vuelva a evaluar si realmente necesita su propia memoria caché local. Si no lo hace, probablemente sea mejor que modifique el código proxy DNS existente (como 'dnsmasq').

Si desea rodar por su cuenta, hay buenas bibliotecas como ldns que pueden proporcionar el acceso a los paquetes DNS subyacentes.

Estoy usando ldns yo mismo junto con libevent para implementar el servidor DNS Fuzzing que mencioné en una pregunta anterior.

2

Comience con djbdns.

+0

Tendría cuidado con eso. El software de djb tiene licencias muy restrictivas. asegúrese de que concuerde con su uso previsto. – SingleNegationElimination

+2

djbdns ahora es de dominio público, pero aún no lo usaría ... – Alnitak

1

Alternativamente, puede usar el Ragel State Machine Compiler para construir su servidor desde cero.

+0

La máquina de estado es una parte muy pequeña del código de un servidor ... – bortzmeyer

+0

Para algo definido por una especificación muy estricta, como un servidor DNS, es una sustancia (y posiblemente la parte más importante). –

2

Si realmente necesita para hacer eso (que es una enorme trabajo , véase la respuesta de Alnitak), se inicia a partir de un buen programa existente (no una sola persona experimentar sin mantenimiento durante mucho tiempo como djbdns) y modificar eso.

Unbound es probablemente una opción razonable para esto. (La base del código es más pequeña que la de BIND.)

+1

Nota para los lectores: recuerde ignorar los votos abajo si no hay un comentario que los explique. – bortzmeyer

+1

El software de djb se ha comportado regularmente de forma contraria a los estándares debido a su creencia general de que su camino es mejor que los estándares, y también se ha sabido que niega la existencia de graves errores de elevación de privilegios remotos en su código. Junto con el largo período durante el cual djbdns no se mantuvo por completo, creo que estos factores hacen que sea perfectamente justo para bortzmeyer llamarlo "un experimento de un solo hombre sin mantenimiento durante mucho tiempo" y desalentar su implementación en entornos no aficionados. –

Cuestiones relacionadas