Knot DNS 2.2.0

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 KeyperThales 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%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á!

Autor:

Zanechte komentář