Knot DNS na OpenWRT

Projekt autoritativního serveru Knot DNS již není třeba představovat. Stojí však za zmínku, že lze server rovněž provozovat i v prostředí OpenWRT, a tedy i na routeru Turris. Dnes si tu popíšeme jak na to.

Ačkoli balíček Knota nebyl dosud začleněn do repozitáře OpenWRT, můžeme si ze stránek projektu stáhnout port balíčku, pomocí kterého si již snadno sestavíme binánární balíček pro naši konkrétní architekturu.

V našem příkladu budeme předpokládat, že pracujeme s OpenWRT verze 12.09. Některé starší verze jsou rovněž podporované. V případě hlavní vývojové větve je průběh ještě jednodušší, neboť potřebná závislost, knihovna liburcu, je v ní již začleněna.

Začneme stažením prostředí Buildroot:
git clone --depth 1 git://git.openwrt.org/12.09/openwrt.git

Jak již bylo zmíněno, OpenWRT 12.09 neobsahuje balíček knihovny liburcu. Proto si ho vypůjčíme z vývojové větve:
git clone --depth 1 git://git.openwrt.org/packages.git
cp -a ./packages/libs/liburcu ./openwrt/package/


Nyní už jen zbývá samotný port Knot DNS verze 1.4.4:
wget https://www.knot-dns.cz/static/download/knot-1.4.4-owrt.tar.gz
tar -xzf knot-1.4.4-owrt.tar.gz
cp -a ./knot ./openwrt/package/


Nastavení překladu provedeme následující sekvencí příkazů:
cd openwrt
make defconfig
make prereq
make menuconfig


V konfigurátoru nastavíme požadovanou platformu (např. ar71xx):
Target System>ar71xx
a zaškrtneme balíček serveru:
Network>IP Addresses and Names>knot
Dále můžeme zaškrtnout pomocné utility (kdig, khost, knsupdate a knsec3hash):
Network>IP Addresses and Names>knot-utils
A pokud si chceme ověřit, že Knot bude pracovat správně na naší platformě, zvolíme i sadu základních testů:
Network>IP Addresses and Names>knot-tests

Následuje překlad potřebných utilit a našich balíčků:
make tools/install
make toolchain/install
make package/knot/compile


Po několika desítkách minut se můžeme tešit na balíčky:
./bin/ar71xx/packages/knot_1.4.4-1_ar71xx.ipk
./bin/ar71xx/packages/knot-utils_1.4.4-1_ar71xx.ipk
./bin/ar71xx/packages/knot-tests_1.4.4-1_ar71xx.ipk
./bin/ar71xx/packages/liburcu_0.7.6-1_ar71xx.ipk


Předchozí soubory nakopírujeme na cílové zařízení (scp) a připojíme se na terminál (ssh).

Následuje instalace:
opkg install liburcu_0.7.6-1_ar71xx.ipk
opkg install knot_1.4.4-1_ar71xx.ipk
opkg install knot-utils_1.4.4-1_ar71xx.ipk
opkg install knot-tests_1.4.4-1_ar71xx.ipk


Základní testy spustíme:
cd /usr/share/knot/tests
./runtests -l TESTS -b /tmp

V případě negativních výsledků testů, zašlete prosím výstup a informace o platformě a použité verzi OpenWRT na knot-dns@labs.nic.cz.

Konfigurace serveru se skrývá v souboru (ověřte si, že už jiný proces nevyužívá port 53!):
/etc/knot/knot.conf

K ovládání serveru slouží init skript, nicméně příkaz knotc je rovněž k dispozici:
/etc/init.d/knotd start

Automatický start serveru zapneme takto:
/etc/init.d/knotd enable

Nakonec ověříme chod serveru:
kdig @localhost example.com soa

;; ->>HEADER<<- opcode: QUERY; status: NOERROR; id: 14398
;; Flags: qr aa rd; QUERY: 1; ANSWER: 1; AUTHORITY: 2; ADDITIONAL: 4

;; QUESTION SECTION:
;; example.com.            0    IN    SOA

;; ANSWER SECTION:
example.com.            3600    IN    SOA    dns1.example.com. hostmaster.example.com. 2010111213 21600 3600 604800 86400

;; AUTHORITY SECTION:
example.com.            3600    IN    NS    dns1.example.com.
example.com.            3600    IN    NS    dns2.example.com.

;; ADDITIONAL SECTION:
dns1.example.com.       3600    IN    A    192.0.2.1
dns1.example.com.       3600    IN    AAAA    2001:db8::1
dns2.example.com.       3600    IN    A    192.0.2.2
dns2.example.com.       3600    IN    AAAA    2001:db8::2

;; Received 202 B
;; Time 2014-04-01 14:42:51 CEST
;; From 127.0.0.1#53(UDP) in 0.0 ms

Z výstupu vidíme, že odpověď jsme dostali z lokální serveru. Nyní je již na Vás jak si Knota doladíte.

Autor:

Komentáře (3)

  1. Ondřej Caletka říká:

    Mám pocit, že je v článku prohozeno knot-tests a knot-utils. Jinak díky, jen jsem ještě nepřišel, k čemu by mi mohl být Knot DNS na domácím routeru dobrý :)

  2. Liquid říká:

    Třeba na domácí interní doménu, případně jako záložní „public“ DNS server. Rozhodně se mi to hodí. :-)

  3. Ondřej Surý říká:

    @oskar Opraveno, ale chvíli jsem to musel hledat. Díky

    Kromě toho, že je to PoC, tak je myslím dost lidí, co nechtějí mít DNS hosting u DNS hostera a zároveň si nechtějí nikde platit za celý server nebo virtuál. Na malou doménu to úplně stačí (+ argument o lokální doméně samozřejmě taky platí).

Zanechte komentář