RESOLVCONF.CONF(5)
πΈ NAME πΈ
okay bestie, this is the File Formats Manual entry for resolvconf.conf(5) π β literally the config file for resolvconf. That's the whole name situation, and it's iconic.
β¨ DESCRIPTION β¨
so resolvconf.conf is the configuration file for resolvconf(8), no cap. It's a shell script that gets sourced by resolvconf(8), which means resolvconf.conf must contain valid shell commands β it's giving "I look cute but I'm real code" energy π
.
listed below are the standard resolvconf.conf variables you can set. if the values contain whitespace, wildcards, or other special shell characters, make sure you quote and escape them correctly, okay? not optional. See the replace variable for an example on quoting β¨.
after updating this file, you may wish to run resolvconf -u to apply the new configuration π«Ά.
when a dynamically generated list is appended or prepended to, the whole thing is made unique where left-most wins β iykyk π.
π RESOLVCONF OPTIONS π
resolvconfβ set this toNOto disableresolvconffrom running any subscribers. defaults toYES.allow_keysβ if set, only these keys will be processed. periodt.deny_keysβ if set, these keys will not be processed. bye π.excludeβ a space separated list of key/value pairs to match. if all key/value pairs in one element can be found in the file, then the whole file will be excluded from processing. syntax is exactly this:$keyword/$match[/$keyword/$match].
for example, given this configuration:
exclude="search/foo*/nameserver/1.2.3.4 search/bar.org"
then any resolv.conf with both a search option starting with foo with a nameserver of 1.2.3.4 OR a search option of bar.org would be excluded π«.
key_orderβ these keys will always be processed first. if unset, defaults to the following:
lo lo[0-9]*
dynamic_orderβ these keys will be processed next, unless they have a metric. if unset, defaults to the following:
tap[0-9]* tun[0-9]* vpn vpn[0-9]* wg[0-9]* ppp[0-9]* ippp[0-9]*
inclusive_keysβ ignore any exclusive marking for these keys. this is handy when 3rd party integrations force theresolvconf -xoption and you want to disable it easily π.local_nameserversβ if unset, defaults to the following:
127.* 0.0.0.0 255.255.255.255 ::1
search_domainsβ prepend search domains to the dynamically generated list. slay.search_domains_appendβ append search domains to the dynamically generated list.domain_blacklistβ a list of domains to be removed from consideration. to remove a domain, you can usefoo.*. to remove a sub domain, you can use*.barπ.name_serversβ prepend name servers to the dynamically generated list. you should set this to127.0.0.1if you use a local name server other than libc.name_servers_appendβ append name servers to the dynamically generated list.name_server_blacklistβ a list of name servers to be removed from consideration. the default is0.0.0.0as some faulty routers send it via DHCP. to remove a block, you can use192.168.*.private_keysβ for these keys, their name servers will only be queried for the domains listed in theirresolv.conf. useful for VPN domains. settingprivate_keys="*"will stop the forwarding of the root zone and allows the local resolver to recursively query the root servers directly. requires a local nameserver other than libc. this is equivalent to theresolvconf -poption π.nosearch_keysβ these keys' domains/search won't be added to the global search list in/etc/resolv.conf.public_keysβ force these keys to be public, overriding the private and nosearch markings. this is handy when 3rd party integrations force theresolvconf -poption and you want to disable it easily.replaceβ a space separated list of replacement keywords. syntax is exactly this:$keyword/$match/$replacement.
example, given this resolv.conf:
domain foo.org
search foo.org dead.beef
nameserver 1.2.3.4
nameserver 2.3.4.5
and this configuration:
replace="search/foo*/bar.com"
replace="$replace nameserver/1.2.3.4/5.6.7.8"
replace="$replace nameserver/2.3.4.5/"
you would get this resolv.conf instead:
domain foo.org
search bar.com
nameserver 5.6.7.8
replace_subβ works the same way asreplace, except it works on each space separated value rather than the whole line, so it's useful for replacing a single domain within the search directive. using the same exampleresolv.confand changingreplacetoreplace_sub, you would get thisresolv.confinstead:
domain foo.org
search bar.com dead.beef
nameserver 5.6.7.8
state_dirβ override the default state directory of/run/resolvconf. this should not be changed onceresolvconfis in use unless the old directory is copied to the new one. > don't just yolo this one, bestie π.
π LIBC OPTIONS π
the following variables affect resolv.conf(5) directly:
resolv_confβ defaults to/etc/resolv.confif not set. set to/dev/nullto stopresolvconf(8)from changing it.resolv_conf_optionsβ a list of libc resolver options, as specified inresolv.conf(5).resolv_conf_passthroughβ when set toYES, the latestresolv.confis written toresolv_confwithout any alteration. when set to/dev/nullorNULL,resolv_conf_local_onlyis defaulted toNO,local_nameserversis unset unless overridden, and only the information set inresolvconf.confis written toresolv_conf.resolv_conf_restoreβ when set toYESand an emptyresolv.confwould be written, restoreresolv.conf.bakinstead if it exists. defaults toYESif not set.resolv_conf_sortlistβ a libc resolver sortlist, as specified inresolv.conf(5).resolv_conf_local_onlyβ if a local name server is configured, then the default is just to specify that and ignore all other entries as they will be configured for the local name server. set this toNOto also list non-local nameservers. this will give you working DNS even if the local nameserver stops functioning at the expense of duplicated server queries.append_nameserversβ append name servers to the dynamically generated list.prepend_nameserversβ prepend name servers to the dynamically generated list.append_searchβ append search domains to the dynamically generated list.prepend_searchβ prepend search domains to the dynamically generated list.resolv_conf_mvβ defaults toNO. defines if/etc/resolv.confis updated by writing to a temporary file and then moving it vs writing directly to it.
π SUBSCRIBER OPTIONS π
okay so openresolv ships with subscribers for the name servers dnsmasq(8), named(8), pdnsd(8), pdns_recursor(1), and unbound(8). Each subscriber can create configuration files which should be included in the subscribers main configuration file. β¨
To disable a subscriber, simply set its name to NO. If the subscriber name has a dash in it, then replace it with an underscore. For example, to disable the libc subscriber you would set:
libc=NO
dnsmasq_confβ This file tells dnsmasq which name servers to use for specific domains. πdnsmasq_resolvβ This file tells dnsmasq which name servers to use for global lookups. π
Example resolvconf.conf for dnsmasq:
name_servers=127.0.0.1
dnsmasq_conf=/etc/dnsmasq-conf.conf
dnsmasq_resolv=/etc/dnsmasq-resolv.conf
Example dnsmasq.conf:
listen-address=127.0.0.1
# If dnsmasq is compiled for DBus then we can take
# advantage of not having to restart dnsmasq.
enable-dbus
conf-file=/etc/dnsmasq-conf.conf
resolv-file=/etc/dnsmasq-resolv.conf
named_optionsβ Include this file in the named options block. This file tells named which name servers to use for global lookups. π¦named_zonesβ Include this file in the named global scope, after the options block. This file tells named which name servers to use for specific domains. π
Example resolvconf.conf for named:
name_servers=127.0.0.1
named_options=/etc/named-options.conf
named_zones=/etc/named-zones.conf
Example named.conf:
options {
listen-on { 127.0.0.1; };
include "/etc/named-options.conf";
};
include "/etc/named-zones.conf";
pdnsd_confβ This is the main pdnsd configuration file which we modify to add our forward domains to. If this variable is not set then we rely on the pdnsd configuration file setup to readpdnsd_resolvas documented below. πpdnsd_resolvβ This file tells pdnsd about global name servers. If this variable is not set then it's written topdnsd_conf. πΈ
Example resolvconf.conf for pdnsd:
name_servers=127.0.0.1
pdnsd_conf=/etc/pdnsd.conf
# pdnsd_resolv=/etc/pdnsd-resolv.conf
Example pdnsd.conf:
global {
server_ip = 127.0.0.1;
status_ctl = on;
}
server {
# A server definition is required, even if empty.
label="empty";
proxy_only=on;
# file="/etc/pdnsd-resolv.conf";
}
pdns_zonesβ This file tellspdns_recursorabout specific and global name servers. π
Example resolvconf.conf for pdns_recursor:
name_servers=127.0.0.1
pdns_zones=/etc/pdns/recursor-zones.conf
Example recursor.conf:
allow-from=127.0.0.0/8, ::1/128
forward-zones-file=/etc/pdns/recursor-zones.conf
resolvectlβ When set toYES,resolvectl(1)will be used to write per interface entries fromresolvconf(8)tosystemd-resolved(8). A warning is emitted for any entry that cannot be matched to an interface. π
This subscriber should only be used if yoursystemd-resolveddoes not support DNS delegates and you need private or non searchableresolvconf(8)entries, or you're really beholden to seeing DNS setup per interface viaresolvectl(1). Thesystemd-resolvedsubscriber documented below is the better option. π
Example resolvconf.conf for resolvectl:
# Keep /etc/resolv.conf as systemd-resolved wants it
libc=NO
resolvectl=YES
systemd_resolvedβ When set toYES, global DNS will be written to thesystemd_resolved_confconfiguration file and DNS delegates will be written to thesystemd_delegate_dirdirectory. π₯systemd_resolved_confβ Defaults to/run/systemd/resolved.conf.d/60-resolvconf.conf. πsystemd_delegate_dirβ Defaults to/run/systemd/dns-delegate.d. π
Example resolvconf.conf for systemd-resolved:
# Keep /etc/resolv.conf as systemd-resolved wants it
libc=NO
systemd_resolved=YES
unbound_confβ This file tells unbound about specific and global name servers. π§unbound_insecureβ When set toYES, unbound marks the domains as insecure, thus ignoring DNSSEC. πunbound_privateβ When set toYES, unbound marks the domains as private, allowing it and its subdomains to contain private addresses. πunbound_forward_zone_optionsβ Options appended to each forward zone. Each option should be separated by an embedded new line. β
Example resolvconf.conf for unbound:
name_servers=127.0.0.1
unbound_conf=/etc/unbound-resolvconf.conf
Example unbound.conf:
include: /etc/unbound-resolvconf.conf
π«Ά SUBSCRIBER INTEGRATION π«Ά
Not all distributions store the files the subscribers need in the same locations. For example, named service scripts have been called named, bind and rc.bind and they could be located in a directory called /etc/rc.d, /etc/init.d or similar. Each subscriber attempts to automatically configure itself, but not every distribution has been catered for. Also, users could equally want to use a different version from the one installed by default, such as bind8 and bind9. To accommodate this, the subscribers have these files in configurable variables, documented below. π
dnsmasq_serviceβ Name of the dnsmasq service. β¨dnsmasq_restartβ Command to restart the dnsmasq service.dnsmasq_pidβ Location of the dnsmasq pidfile.libc_serviceβ Name of the libc service. πlibc_restartβ Command to restart the libc service.named_serviceβ Name of the named service. π¦named_restartβ Command to restart the named service.pdnsd_restartβ Command to restart the pdnsd service. πpdns_serviceβ Command to restart thepdns_recursorservice.pdns_restartβ Command to restart thepdns_recursorservice. (yes, same description aspdns_service, no cap)unbound_serviceβ Name of the unbound service. πΈunbound_restartβ Command to restart the unbound service.unbound_pidβ Location of the unbound pidfile.
π SEE ALSO π
sh(1), resolv.conf(5), resolvconf(8)
π AUTHORS π
Roy Marples <roy@marples.name>
π BUGS π
Each distribution is a special snowflake and likes to name the same thing differently, namely the named service script. π
Swapping between resolvectl and systemd-resolved subscribers at runtime is not supported. Files referenced by systemd_resolved_conf and systemd_delegate_dir need to be removed by hand. A reboot is recommended so that stale data is removed. While you could run them both at the same time, only using one is the recommended approach. π¨
Please report them to https://roy.marples.name/projects/openresolv π«Ά
this lil page is from the Debian build, dated May 15, 2025 β RESOLVCONF.CONF(5), periodt π
β¨
π¦ where this page comes from
- alpine 3.23: openresolv-doc 3.17.4-r0 Β· BSD-2-Clause
- alpine 3.24: openresolv-doc 3.17.4-r0 Β· BSD-2-Clause
- arch rolling: openresolv 3.17.4-1 Β· BSD-2-Clause
- nixos 26.05: openresolv 3.17.4
- nixpkgs unstable: openresolv 3.17.4
- Copyright (c) 2009-2025 Roy Marples
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms