|
|
dnsmasq-like configuration of forwarders for Knot Resolver
|
|
|
----------------------------------------------------------
|
|
|
|
|
|
In constrast to Dnsmasq, the Knot Resolver does not read `resolv.conf` file on its own. Knot Resolver's configuration file is proper Lua script which allows you to tweak its behavior as needed.
|
|
|
|
|
|
Following config snippet was contributed by user who wanted to read `resolv.conf` file in similar way to dnsmasq.
|
|
|
|
|
|
Config file snippet
|
|
|
-------------------
|
|
|
```
|
|
|
policy.forwarders = {}
|
|
|
|
|
|
function policy:reload_resolv_file()
|
|
|
for i = 1, #policy.forwarders do
|
|
|
print('removing forwarder rule:', policy.forwarders[i].id)
|
|
|
policy.del(policy.forwarders[i].id)
|
|
|
end
|
|
|
|
|
|
policy.forwarders = {}
|
|
|
|
|
|
for line in io.lines(policy.resolv_file) do
|
|
|
if not line:match("^%s+#") then
|
|
|
local split = string.gmatch(line, "[^%s]+")
|
|
|
local name = split()
|
|
|
local value = split()
|
|
|
|
|
|
if name == 'nameserver' then
|
|
|
print('adding new forwarder rule for:', value)
|
|
|
table.insert(policy.forwarders, policy.add(policy.all(policy.FORWARD(value))))
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
|
|
|
policy.resolv_file = '/var/run/NetworkManager/resolv.conf'
|
|
|
|
|
|
policy:reload_resolv_file()
|
|
|
```
|
|
|
|
|
|
This snippet will load forwarders form file `/var/run/NetworkManager/resolv.conf` into Knot Resolver. The list can be re-read at run-time by calling Lua function `policy:reload_resolv_file()`.
|
|
|
|
|
|
Depending on your configuration, this can be done using following command
|
|
|
```
|
|
|
echo "policy:reload_resolv_file()" | sudo nc -U /run/knot-resolver/control
|
|
|
```
|
|
|
Do not forget to amend the socket path as necessary for your system.
|
|
|
|
|
|
(Based on https://github.com/CZ-NIC/knot-resolver/issues/40) |
|
|
\ No newline at end of file |