Override a DNS record
If resolved can resolve a record locally it won't query an upstream
nameserver, even if it's not authoritative for that domain.
This means you can use hosts and zone files to override any DNS records you want.
Override an A or AAAA record
A hosts file allows you to override the A or AAAA records for a
domain.
For example, a hosts file containing the following two lines would make
example.com resolve to your local machine, over both IPv4 and IPv6:
127.0.0.1 example.com
::1 example.com
Once you have your hosts file, configure resolved to use it with the -a or
-A options:
resolved -a /path/to/directory/fileresolved -A /path/to/directory
I recommend the -A form, as you can then add or remove hosts files to the
directory and send SIGUSR1 to resolved to reload the hosts files without
restarting the process.
Hosts files have some limitations: you can only override A and AAAA records,
and you can't define wildcard records. For those, you need to use a zone file.
Override any type of record
This is how the "root hints" file works: it overrides the NS records for the root domain, which resolved would otherwise have no way to figure out.
A zone file allows you to override any type of record, including wildcard records.
For example, a zone file containing the following three lines would make
*.example.com resolve to example.com, and example.com to your local
machine, over both IPv4 and IPv6.
*.example.com. 300 IN CNAME example.com.
example.com. 300 IN A 127.0.0.1
example.com. 300 IN AAAA ::1
If you want to totally override all records for a domain, rather than just
some of them, make your zone file authoritative for that domain by adding a
SOA record.
For example, example.com has an MX record, which resolved will fetch from
the upstream nameservers if all you do is override CNAME, A, and AAAA
records. You can "delete" the MX record by making your zone authoritative for
example.com:
example.com. 300 IN SOA example.com. example.com. 6 300 300 300 300
*.example.com. 300 IN CNAME example.com.
example.com. 300 IN A 127.0.0.1
example.com. 300 IN AAAA ::1
Once you have your zone file, configure resolved to use it with the -z or
-Z options:
resolved -z /path/to/directory/fileresolved -Z /path/to/directory
I recommend the -Z form, as you can then add or remove zone files to the
directory and send SIGUSR1 to resolved to reload the zone files without
restarting the process.