Resolve DNS names like it's 2026 https://knot-resolver.cz
  • C 75.1%
  • Python 11%
  • Lua 8.5%
  • Jinja 1.6%
  • Shell 1.4%
  • Other 2.2%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-11-03 07:14:21 +01:00
.github/workflows drop libknot <=3.2.x support 2024-07-11 13:51:45 +02:00
bench scripts: organize into subdirs and clean up unused 2024-08-26 14:28:10 +02:00
ci Merge branch 'master' into rrl-wip 2024-09-30 15:34:11 +02:00
contrib contrib/ucw/mempool: doc-comments 2026-10-01 15:19:45 +02:00
daemon treewide nit: use just a ; between labels and declarations 2026-11-03 07:00:30 +01:00
distro python: remove unnecessary typing-extensions dependency 2026-09-16 13:37:01 +02:00
doc doc: fix nits 2026-10-26 11:22:11 +01:00
etc update IANA's certificate for root trust anchor bootstrapping 2026-07-15 15:28:43 +02:00
lib treewide nit: use just a ; between labels and declarations 2026-11-03 07:00:30 +01:00
modules daemon: refuse non-IN records earlier in code 2026-09-09 14:04:37 +02:00
python/knot_resolver Allow dots in interface name to support Linux VLAN interfaces 2026-10-30 17:57:10 +02:00
scripts docker: remove linux/arm/v7 build 2026-09-11 15:04:38 +02:00
systemd doc/dev: drop the systemd-multiinst page 2026-10-01 08:08:53 +02:00
tests tests: datamodel: types: test additional invalid values for InterfaceName 2026-11-02 13:41:02 +01:00
utils treewide nit: use just a ; between labels and declarations 2026-11-03 07:00:30 +01:00
.clang-tidy .clang-tidy: disabled readability-math-missing-parentheses 2025-08-27 08:57:15 +02:00
.dir-locals.el treewide: machine readable license for all the rest 2020-02-25 09:26:37 +01:00
.gitattributes gitattributes: specify word diff regex for C and C++ sources 2019-03-06 13:03:28 +01:00
.gitignore .gitignore: update 2026-09-01 15:06:28 +02:00
.gitlab-ci.yml .gitlab-ci.yml: pkg:opensuse-16.0: update repo for supervisor 2026-10-26 13:40:21 +01:00
.gitmodules treewide: move to our new GitLab URL 2020-07-10 12:51:53 +02:00
.luacheckrc logging: linter nitpicks 2021-07-29 11:44:47 +02:00
.mailmap AUTHORS + .mailmap update 2023-10-05 12:55:36 +02:00
.python-version .python-version: update 2026-08-07 00:05:11 +02:00
.readthedocs.yaml .readthedocs.yaml: migrate configuration from web app 2023-08-04 13:40:45 +02:00
ARCHITECTURE.md docs: fix typo overriden -> overridden 2026-08-24 19:26:00 +05:30
AUTHORS release 6.5.1 2026-10-22 07:42:03 +02:00
CodingStyle update link to Linux kernel coding style 2017-01-26 10:27:51 +01:00
CONTRIBUTING.md CONTRIBUTING: document our suboptimal MR process 2020-08-21 11:49:32 +02:00
COPYING license: add note that some files might have different license 2020-02-25 09:26:37 +01:00
Dockerfile Dockerfile: install missing runtime directorie 2026-08-07 13:57:31 +02:00
ERROR_HANDLING.md manager: moved everything out of the directory 2024-09-07 00:28:31 +02:00
meson.build contrib/ucw/mempool: add valgrind directives 2026-09-17 13:38:27 +02:00
meson_options.txt contrib/ucw/mempool: add valgrind directives 2026-09-17 13:38:27 +02:00
NEWS NEWS: add entry for the parent commit 2026-11-02 10:42:33 +01:00
poe poethepoet: update scripts 2026-09-01 15:06:28 +02:00
PROJECT_VERSION release 6.5.1 2026-10-22 07:42:03 +02:00
pyproject.toml python: remove unnecessary typing-extensions dependency 2026-09-16 13:37:01 +02:00
README.md README: update the badges 2026-10-01 08:08:49 +02:00
security.txt avoid secure.nic.cz URLs 2026-07-29 12:42:25 +02:00
setup.py release 6.5.1 2026-10-22 07:42:03 +02:00

Knot Resolver

Latest release Packaging status

Knot Resolver is a full caching DNS resolver implementation. The core architecture is tiny and efficient, written in C and LuaJIT, providing a foundation and a state-machine-like API for extension modules. There are three built-in modules - iterator, validator and cache - which provide the main functionality of the resolver. A few other modules are automatically loaded by default to extend the resolver's functionality.

Since Knot Resolver version 6, it also includes a so-called manager. It is a new component written in Python that hides the complexity of older versions and makes it more user friendly. For example, new features include declarative configuration in YAML format and HTTP API for dynamic changes in the resolver and more.

Knot Resolver uses a different scaling strategy than the rest of the DNS resolvers - no threading, shared-nothing architecture (except MVCC cache which can be shared), which allows you to pin workers to available CPU cores and grow by self-replication. You can start and stop additional workers based on the contention without downtime, which is automated by the manager by default.

The LuaJIT modules, support for DNS privacy and DNSSEC, and persistent cache with low memory footprint make it a great personal DNS resolver or a research tool to tap into DNS data. Strong filtering rules, and auto-configuration with etcd make it a great large-scale resolver solution. It also has strong support for DNS over TCP, in particular TCP Fast-Open, query pipelining and deduplication, and response reordering.

For more on using the resolver, see the User Documentation. See the Developer Documentation for detailed architecture and development.

Packages

The latest stable packages for various distributions are available in our upstream repository. Follow the installation instructions to add this repository to your system.

Knot Resolver is also available from the following distributions' repositories:

Packaging

The project uses apkg for packaging. See distro/README.md for packaging specific instructions.

Building from sources

Knot Resolver mainly depends on KnotDNS libraries, LuaJIT, libuv and Python.

See the Building project documentation page for more information.

Running

By default, Knot Resolver comes with systemd integration and you just need to start its service. It requires no configuration changes to run a server on localhost.

# systemctl start knot-resolver

See the documentation at knot-resolver.cz/documentation/latest for more information.

Running the Docker image

Running the Docker image is simple and doesn't require any dependencies or system modifications, just run:

$ docker run -Pit cznic/knot-resolver

The images are meant as an easy way to try the resolver, and they're not designed for production use.

Contacting us