Je už to nějaká doba, co jsme naposledy na tomto blogu psali o novinkách v projektu Knot DNS. Proto bychom Vám rádi představili, co je nového v poslední verzi Knot DNS 2.2.0.
Verze Knot DNS 2.0.0 byla revoluční v tom, že přinesla nový konfigurační formát, možnost ukládání konfigurace přímo do konfigurační databáze a nově implementovaný DNSSEC založený na KASP. Novinky, které jsme představili ve verzích Knot DNS 2.1.0 a Knot DNS 2.2.0, pak především staví na těchto velkých změnách.
Podpora pro UDP SO_REUSEPORT
SO_REUSEPORT je technologie v Linuxovém jádře, která umožňuje více procesům/vláknům sdílet stejný UDP nebo TCP socket. O distribuci paketů mezi jednotlivé soutěžící „zájemce“ se stará samotné jádro, což umožňuje lepší využití prostředků počítače na zpracování DNS zpráv. Naprosto konkrétně to znamená, že v případě Knot DNS, kde SO_REUSEPORT používáme pro příjem UDP paketů, se nám na běžném hardware povedlo dosáhnout výkonu přes milión zpracovaných a zodpovězených DNS zpráv za sekundu.
Podpora pro PKCS #11 kryptografická zařízení
PKCS #11 je kryptografický standard, který definuje standardní rozhraní (API) pro přístup ke smart kartám a HSM, které poskytují služby pro bezpečnou správu klíčů. Knot DNS 2.1.0 přidává podporu pro definici úložišť klíčů:
a) standardní úložiště založené na souborovém systému, kde jsou klíče uložené ve formátu definovaném ve standardu PKCS #8,
b) úložiště klíčů přes rozhraní PKCS #11.
Bohužel to není s rozhraním PKCS #11 tak jednoduché, jak by se mohlo z normálního pojetí slova standard zdát. Definice umožňuje jistou implementační variabilitu, a proto je zapotřebí kód vyzkoušet a přizpůsobit jednotlivým výrobcům zařízení. V době vydání Knot DNS 2.2.0 máme ověřenou funkcionalitu se softwarovou implementací SoftHSM 2.0 a ve spolupráci s holandskou výzkumnou organizací SURF jsme otestovali a implementovali podporu pro Luna SA 4 HSM (nyní SafeNet Network HSM). Posledním aktuálně funkčním kouskem je Trustway Proteccio NetHSM. A abychom se nenudili, máme také domluvenou spolupráci s AEP Keyper a Thales nShield. Na začátku léta by také měly být k dispozici první prototypy otevřené implementace HSM CryptTech, na které se už také těšíme.
Online DNSSEC podepisování
Pokud projekt Knot DNS sledujete, tak možná víte, že Knot DNS umožňuje generovat obsah zóny pomocí modulů. Např. modul synth-record umožňuje generování reverzních (PTR) a odpovídajících dopředných (A/AAAA) záznamů na základě pravidel, což se hodí například pro rozlehlé IP sítě. Modul se dá využít také na správu DNS pro Legacy IP sítě, ale tam je situace z hlediska DNS s adresním rozsahem přeci jenom o něco lepší.
Do verze Knot DNS 2.1.0 neexistovala možnost, jak takovéto dynamicky generované zóny podepsat pomocí DNSSEC. V aktuální verzi již tato možnost existuje použítím experimentálního modul online-sign, který DNS záznamy podepisuje až v momentě generování DNS odpovědi na příchozí dotaz.
Online-sign modul je samozřejmě také možné použít pro podepisování normálních zón, ale v případě menších zón se ztrácí výhoda úspory místa a výpočetní kapacity v okamžiku podepisování a naopak se kvůli on-demand podepisování projeví zvýšené nároky na výkon při normálním chodu serveru.
Následující příklad nakonfiguruje automaticky DNSSEC podepisované generované záznamy pro zónu int.nic.cz
.
mod-online-sign: - id: default mod-synth-record: - id: lan-reverse type: reverse prefix: ip- ttl: 400 origin: int.nic.cz. network: 2001:1488:fffe:6::/64 mod-synth-record: - id: lan-forward type: forward prefix: ip- ttl: 1200 network: 2001:1488:fffe:6::/64 template: - id: default dnssec-signing: false zone: - domain: int.nic.cz. module: mod-synth-record/lan-forward module: mod-online-sign/default - domain: 6.0.0.0.e.f.f.f.8.8.4.1.1.0.0.2.ip6.arpa module: mod-synth-record/lan-reverse module: mod-online-sign/default
Takto vygenerované záznamy budou mít následující formát:
ip-2001-1488-fffe-0006-aaaa-bbbb-cccc-dddd.int.nic.cz.
odpovídající reverznímu záznamu:
d.d.d.d.c.c.c.c.b.b.b.b.a.a.a.a.6.0.0.0.e.f.f.f.8.8.4.1.1.0.0.2.ip6.arpa.
Konfigurovatelný vzor jména souboru v šabloně
Toto malé vylepšení umožňuje nadefinovat cestu k zónovým souborům pomocí zástupných znaků přímo v šabloně. Nejjednodušší variantou je řetězec %s
, který je nahrazen celým jménem zóny. v případě velkého množství zón můžete například nadefinovat, aby cesta k zónovému souboru automaticky obsahovala adresáře definované pomocí písmen z doménového jména pomocí řetězce %c[N]
nebo %c[N-M]
nebo rozložit jméno zóny zprava doleva na jednotlivé komponenty pomocí %l[N]
, kde %l[0]
znamená první úroveň, tj. v případě zóny knot-dns.cz
bude %l[0]
nahrazeno řetězcem cz
a %l[1]
bude nahrazeno řetězcem knot-dns
.
Konkrétní příklad se použitím v šabloně:
template: - id: "default" file: "/etc/knot/zones/%l[0]/%s" zone: - domain: knot-dns.cz - domain: nic.cz - domain: cznic.org
Zónové soubory těchto domén budou uloženy jako:
/etc/knot/zones/cz/knot-dns.cz /etc/knot/zones/cz/nic.cz /etc/knot/zones/org/cznic.org
Správa konfigurace přes knotc
Knot DNS 2.2.0 přinesl kromě spousty drobnějších vylepšení a oprav také velké rozšíření příkazů, kterými disponuje řádková utilita knotc
. v případě, že používáte konfigurační databázi, tak je možné přímo editovat konfiguraci včetně přidávání a odebírání obsluhovaných zón a veškeré změny se projeví okamžitě po příkazu conf-commit
. Řádkovou utilitu knotc
je nyní možné pustit (při spustění bez parametrů) také v interaktivním režimu včetně historie a doplňování příkazů.
Pár příkladů:
Výpis aktuálního seznamu nakonfigurovaných zón:
$ knotc conf-read zone zone.domain = "knot-dns.cz." zone.domain = "turris.cz." zone.domain = "tablexia.cz." zone.domain = "bird.network.cz." zone.domain = "datovka.cz." zone.domain = "fred.nic.cz." zone.domain = "mojeid.cz."
Přidání nové šablony:
$ knotc conf-begin $ knotc conf-set 'template[zoo]' $ knotc conf-set 'template[zoo].dnssec-signing' 'on' $ knotc conf-set 'template[zoo].kasp-db' '/dns/zoo/keys' $ knotc conf-set 'template[zoo].serial-policy' 'unixtime' $ knotc conf-set 'template[zoo].file' '/dns/zoo/zones/%c[0]/%c[1]/%c[2]/%s' $ knotc conf-commit
Přidání nové zóny s jinou než standardní šablonou:
$ knotc conf-begin $ knotc conf-set 'zone[kasuar.cz]' $ knotc conf-set 'zone[kasuar.cz].template' 'zoo' $ knotc conf-set 'zone[kun-prevalskeho.cz]' $ knotc conf-set 'zone[kun-prevalskeho.cz].template' 'zoo' $ knotc conf-commit
A na závěr…
Na letošek chystáme další novinky v projektu Knot DNS, a také se připravuje první vydání našeho nového DNS Resolveru Knot Resolver. Pokud jste ještě Knot DNS nevyzkoušeli, tak je pravá chvíle to udělat právě teď. A pokud jste jej již vyzkoušeli, nebo jej dokonce už používáte, tak se na nás neváhejte obrátit, pokud Vám v DNS serveru něco chybí. Máme uživatelskou emailovou konferenci, máme Twitter a nebo nám napište přímo na email knot-dns@labs.nic.cz. Budeme rádi, když uslyšíme i o tom, jak se Vám Knot DNS dobře používá!
Dobry den,
potrebuju nedefinovat ruzne reverzni zaznamy pro vice IP. Mam jeden /48 a pro neho bych chtel mit spolecne *.ip.example.net.
V teto /48 potrebuji pro nekolik /55 a /56 nedefinovat vlastni reverzy.
Nejak se mi to vsak nedari.
Jak presne funguje definice reverzu? Muzu pouzit „spolecny“ /48 a pak zadefinovat mensi rozsahy? Nebo jakmile uvedu /48, tak uz se zadne dalsi IP z nej nadefinovat nedaji?
mod-synth-record:
– id: lan-reverse
type: reverse
prefix: ip-
ttl: 400
origin: ip.example.net.
network: 2001:1234:567::/48
mod-synth-record:
– id: lan-reverse
type: reverse
prefix: ip-
ttl: 400
origin: ip.test.cz
network: 2001:1234:567:abc::/55
Dekuji.
Dobrý den,
s dotazy, které se týkají projektu Knot DNS, se, prosím, obracejte přímo na kolegy z tohoto vývojového týmu. Jejich e-mailová adresa je knot-dns@labs.nic.cz.
Děkujeme.
VS