Knot DNS je open-source serverová aplikace určená pro autoritativní DNS servery. Vznikl „na zelené louce“ v Laboratořích CZ.NIC, s cílem vytvořit úplně novou implementaci serveru (je žádoucí používat více zcela odlišných implementací DNS serverů, aby případná chyba nezpůsobila kolaps celého systému DNS), která bude mít navíc vysoký výkon, kvalitní škálovatelnost a plnou podporu DNSSEC.
První verze Knot DNS byla představena před čtyřmi lety (na 63. mezinárodní konferenci RIPE) a od té doby server ušel pořádný kus cesty. Koncem letošního června přišla nová verze 2.0, jež přinesla řadu zásadních novinek. Na konferenci IT 15.2 o nich hovořil Jan Včelák.
Nová konfigurace a šablony
Původní konfigurace Knot DNS (do verze 1.6) měla svůj vlastní formát, ten je ale u 2.0 minulostí. „My jsme se rozhodli, že použijeme nějaký standardizovaný formát. Rozhodli jsme se pro YAML, protože je to formát, který je dobře strojově čitelný, je dobře čitelný pro uživatele a téměř každý skriptovací jazyk na to má nějakou podporu,“ vysvětluje Jan Včelák změnu formátu konfigurace. Konfigurační soubory tak lze mnohem snáze generovat nebo naopak načítat.
Konfigurace se při startu zpracuje a uloží se do databáze LMDB, se kterou lze pak přímo pracovat a výrazně zrychlit změny za běhu. „Pokud máte textový formát, ve kterém máte třeba 10 000 zón, tak už jen parsování konfiguračního souboru trvá řádově minuty. Pokud chcete přidat jen jednu novou zónu, tak ta doba je příliš dlouhá.“
Jan Včelák hovoří o Knot DNS 2.0
Změna ale nastala nejen ve formátu, nýbrž i v konfiguračních konceptech: „Například jsme úplně předělali, jakým způsobem se mění definice vzdálených serverů, jak se mění oprávnění. A přidali jsme jednu novou vlastnost.“ To novou vlastností jsou šablony. Ve verzi 1.6 šlo použít jedno výchozí nastavení pro zóny a pak ho ad hoc předefinovávat. Verze 2.0 má plnohodnotné šablony, kterých si lze nadefinovat libovolný počet (a pak jejich parametry případně předefinovávat v zónách).
Vylepšení podpory DNSSEC, automatizace
Hodně se s novou verzí změnilo také v oblasti DNSSEC. Knot DNS s verzí 2.0 opouští knihovnu OpenSSL a začíná používat GnuTLS. „Důvodů pro tuto změnu bylo několik. Hlavním důvodem je, že GnuTLS má daleko lepší dokumentaci a daleko lepší podporu pro rozhraní PKCS 11,“ říká Jan Včelák.
U verze 1.6 se muselo všechno okolo DNSSEC dělat ručně (což je náročné a náchylné na chyby) a ještě bylo dost omezení. Verze 2.0 přichází s počáteční podporou politik – KASP. „My bychom chtěli, aby to nastavení DNSSEC bylo jednoduché, resp. použití DNSSEC co nejjednodušší.“ Řešení s KASP přináší úplně novou filosofii: „Definuji si nějakou politiku, která říká, že pro podepisování budu používat třeba algoritmus ECDSA, křivku P-256 a tuto hešovací funkci, a budu chtít, aby se mi třeba Key signing key měnil každý půlrok a Zone signing key měnil každý měsíc.“
Po nastavení politiky ji stačí přiřadit zóně a není třeba se o nic starat – server v ideálním případě všechno zajistí sám. Ve Knot DNS 2.0 je ale jen omezená, počáteční implementace, která ještě některé funkce nepodporuje. To se týká hlavně rotace KSK, protože není vyřešená komunikace s nadřazenou zónou.
Pro konfiguraci KASP se používá utilita keymgr. „Její použití je poměrně jednoduché, syntaxe připomíná třeba příkaz ip nebo git,“ snaží se Jan Včelák rozehnat případné obavy. Zatím ale ještě keymgr neumí vše, co je potřeba. Například ho nelze použít pro export veřejného klíče jako DS záznamu pro publikaci v nadřazené zóně.
Výkon a škálovatelnost
Knot DNS je od počátku vyvíjen pro vysoký výkon a kvalitní škálovatelnost. Verze 2.0 je na tom oproti 1.6 výrazně lépe. „To zlepšení vzniklo tím, že jsme začali používat SO_REUSEPORT na Linuxu. Jak už tady zmínil Karel [Slaný], to umožňuje vytvořit více socketů, které jsou 'nabindované' na jedno konkrétní rozhraní. Výhodu to má takovou, že k tomu 'boji', které vlákno ten dotaz obslouží, nedochází v user space, ale dochází už v kernelu.“ Režie obsluhy dotazů je při takovém řešení řádově menší a výkon tedy „poskočil“ výrazně nahoru.
Ukázka grafu výkonu různých DNS serverů (benchmarky Knot DNS)
Co se chystá do budoucnosti?
Jednou z chystaných novinek pro Knot DNS je podpora kryptografických modulů přes PKCS 11. „Už nám to částečně funguje, ale je potřeba to ještě doladit.“ Dále by měl přibýt modul pro statistiky, které zatím v serveru ještě vůbec nejsou. Výstup by měl být kompatibilní s DNS serverem BIND.
„Obecně bychom také chtěli zapracovat na zvýšení výkonu u TCP, kterému se nedostávalo moc času,“ nastínil Jan Včelák jeden z velkých naplánovaných úkolů. V plánu je i řada dalších věcí, například dokončení funkcionality KASP, rozšíření funkcí klienta knotc nebo přidání modulů pro GeoIP nebo pro online podepisování.
Stručně o Knot DNS Resolveru
Samostatná přednáška (Karla Slaného) byla věnována odvozenému projektu: Knot DNS Resolveru. Protože Knot DNS je ryze autoritativní server a na rozdíl například od serveru BIND nepodporuje režim rekurzivního, cachujícího DNS serveru–resolveru, objevila se záhy řada zájemců, kteří by filosofii Knot DNS rádi viděli realizovanou také v této oblasti.
Původně se pro nový projekt hledal samostatný název, nakonec ale zvítězilo prosté označení Knot DNS Resolver.
Karel Slaný představuje Knot DNS Resolver
Knot DNS Resolver je modulární a je navržen tak, aby posloužil jak pro potřeby jednotlivců, tak i pro různě velké sítě (ISP, firmy, organizace…) a pro velké DNS farmy. Podporuje nejen klasický DNSSEC, ale také automatickou aktualizací pevných bodů důvěry (RFC 5011) a dokonce i nedůvěryhodné pevné body (RFC 7646). Implementace je zatím ve fázi betaverze, brzy bychom se mohli dočkat vydání první ostré verze.