2009-03-16 20 views
10

Ho bisogno di creare un server DNS di caching semplice e non autorevole personalizzato in C/C++. Qualche guida? Link? Campioni? Grazie!Come creare un server DNS semplice personalizzato in C/C++

+0

Perché mai si potrebbe forse bisogno di costruire il proprio server DNS? –

+7

Causa Ho bisogno di un server DNS con alcune funzionalità non standard –

+0

Consiglio vivamente di cercare soluzioni alternative, ma se questo è il modo in cui devi andare ... djbdns è di dominio pubblico, quindi puoi modificare tutto ciò che desideri. –

risposta

16

Non esiste un server DNS "semplice" di cacheing, in particolare se si desidera una sicurezza decente. I recenti attacchi DNS hanno dimostrato che la funzione di cache nei server DNS ricorsivi è particolarmente vulnerabile.

Rivalutare se è effettivamente necessario l'utilizzo della cache locale. Se non lo fai, probabilmente stai meglio modificando il codice proxy DNS esistente (come 'dnsmasq').

Se si desidera eseguire il roll-out, esistono librerie buone come ldns che possono fornire l'accesso ai pacchetti DNS sottostanti.

Io sto usando ldns me stesso in congiunzione con libevent per implementare il server DNS Fuzzing che ho menzionato in una domanda precedente.

2

Inizia con djbdns.

+0

Sarei attento a questo. Il software di djb ha licenze molto restrittive. assicurarsi che sia d'accordo con l'uso previsto. – SingleNegationElimination

+2

djbdns è ora di dominio pubblico, ma non lo userei ancora ... – Alnitak

1

In alternativa, è possibile utilizzare Ragel State Machine Compiler per creare il server da zero.

+0

State machine è una parte molto piccola del codice di un server ... – bortzmeyer

+0

Per qualcosa definito da una specifica molto severa come un server DNS, è un sostanziale (e probabilmente la parte più importante). –

2

Se avete veramente bisogno di farlo (si tratta di un enorme lavoro , vedere la risposta di Alnitak), a partire da una buona programma esistente (non un one-man sperimentare non mantenuto per lungo tempo come djbdns) e modificare esso.

Unbound è probabilmente una scelta ragionevole per questo. (La base del codice è inferiore a quella di BIND.)

+1

Nota per i lettori: ricorda di ignorare i downvotes se non c'è un commento per spiegarli. – bortzmeyer

+1

è noto che il software del djb si comporta in modo contrario agli standard perché ritiene che il suo modo sia migliore degli standard, ed è anche noto per negare l'esistenza di gravi errori di elevazione dei privilegi in remoto nel suo codice. Insieme al lungo periodo durante il quale il djbdns era completamente non mantenuto, penso che questi fattori rendano perfettamente giusto per Bortzmeyer chiamarlo "un esperimento di un solo uomo non mantenuto per molto tempo" e scoraggiare il suo dispiegamento in ambienti non hobbisti. –

Problemi correlati