2009-03-16 21 views
10

Ich muss einen benutzerdefinierten einfachen nicht autorisierenden Caching-DNS-Server in C/C++ erstellen. Irgendeine Anleitung? Links? Proben? Danke!Erstellen eines benutzerdefinierten einfachen DNS-Servers in C/C++

+0

Warum auf der Erde könnten Sie möglicherweise benötigen, um Ihre eigenen DNS-Server zu bauen? –

+7

Ursache Ich brauche einen DNS-Server mit einigen nicht standardmäßigen Funktionen –

+0

Ich würde dringend empfehlen, dass Sie nach alternativen Lösungen suchen, aber wenn dies der Weg ist, müssen Sie gehen ... djbdns ist Public Domain, so dass Sie es alles hacken können. –

Antwort

16

Es gibt keinen "einfachen" Cache-DNS-Server, besonders wenn Sie anständige Sicherheit wünschen. Aktuelle DNS-Angriffe haben gezeigt, dass die Cache-Funktion in rekursiven DNS-Servern besonders anfällig ist.

Überprüfen Sie, ob Sie tatsächlich einen lokalen Cache benötigen. Wenn Sie dies nicht tun, sollten Sie den vorhandenen DNS-Proxy-Code (z. B. "dnsmasq") wahrscheinlich besser ändern.

Wenn Sie selbst rollen wollen, gibt es gute Bibliotheken wie ldns, die den Zugriff auf die zugrunde liegenden DNS-Pakete bieten können.

Ich benutze ldns mich in Verbindung mit libevent, um den fuzzing DNS-Server zu implementieren, den ich in einer früheren Frage erwähnte.

2

Beginnen Sie mit djbdns.

+0

Ich würde vorsichtig sein. Die Software von djb hat sehr restriktive Lizenzen. Stellen Sie sicher, dass es mit Ihrer beabsichtigten Verwendung übereinstimmt. – SingleNegationElimination

+2

djbdns ist jetzt Public Domain, aber ich würde es immer noch nicht verwenden ... – Alnitak

1

Alternativ können Sie die Ragel State Machine Compiler verwenden, um Ihren Server von Grund auf neu zu erstellen.

+0

State Machine ist ein sehr kleiner Teil eines Servers Code ... – bortzmeyer

+0

Für etwas durch eine sehr strenge Spezifikation wie ein DNS-Server definiert, ist es ein wesentlicher (und wohl der wichtigste) Teil. –

2

Wenn Sie wirklich, dass tun müssen, um (es ist eine riesige Arbeit, Alnitak Antwort sehen), starten Sie aus einem vorhandenen gut Programm (keine Ein-Mann-Experiment nicht gewartet für eine lange Zeit wie djbdns) und ändern es.

Unbound ist wahrscheinlich eine vernünftige Wahl dafür. (Die Codebasis ist kleiner als BINDs.)

+1

Hinweis für die Leser: Denken Sie daran, Downvotes zu ignorieren, wenn es keinen Kommentar zu deren Erläuterung gibt. – bortzmeyer

+1

Die Software von djb war regelmäßig dafür bekannt, sich normwidrig zu verhalten, weil er allgemein davon überzeugt war, dass sein Weg besser ist als die Standards, und dass er auch die Existenz ernsthafter Probleme mit Remote-Privilegien in seinem Code bestreitet. Zusammen mit der langen Zeit, während der djbdns völlig nicht gepflegt wurde, glaube ich, dass diese Faktoren es für bortzmeyer vollkommen fair machen, es als "Ein-Mann-Experiment, das lange Zeit nicht gepflegt wurde" zu nennen und seinen Einsatz in nicht-hobbyistischen Umgebungen zu verhindern. –

Verwandte Themen