docs: Add DNS tuning guide #1601
No reviewers
Labels
No labels
Blocked
Bug
Changelog
Added
Changelog
Missing
Changelog
None
Cherry-picking
Database
Dependencies
Dependencies/Renovate
Difficulty
Easy
Difficulty
Hard
Difficulty
Medium
Documentation
Enhancement
Good first issue
Help wanted
Inherited
Matrix/Administration
Matrix/Appservices
Matrix/Auth
Matrix/Client
Matrix/Core
Matrix/E2EE
Matrix/Federation
Matrix/Hydra
Matrix/MSC
Matrix/Media
Matrix/T&S
Merge
Merge/Manual
Merge/Squash
Meta
Meta/CI
Meta/Packaging
Priority
Blocking
Priority
High
Priority
Low
Security
Status
Confirmed
Status
Duplicate
Status
Invalid
Status
Needs Investigation
Support
Wont fix
old/ci/cd
old/rust
No milestone
No project
No assignees
5 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
continuwuation/continuwuity!1601
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "stratself/continuwuity:stratself/docs-dns"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
This pull request adds a DNS tuning guide page for Continuwuity, targetting Unbound. It recommends best practices.
You can see a preview of it here:
TODOS:
Pull request checklist:
mainbranch, and the branch is named something other thanmain.myself, if applicable. This includes ensuring code compiles.
Only checked for technical input for now since I know that drive-by reviews by external people can be annoying for maintainers 😅
One option that could also be useful for tuning (esp. on kubernetes) is ndots as having a high value here will cause lookups of external domains with the search domain appended (e.g
matrix.org->matrix.org.my.network)If you want to, I can take a look at the wording and instruction text as well (I often do this as part of my dayjob) but I didn't want to spam this without asking first :)
@ -0,0 +18,4 @@### For Docker usersDocker bridge networks uses a non-performant resolver to intercept and respond to container hostnames, and **this should also be avoided**. Instead, mount a custom `/etc/resolv.conf` file into the container, and hardcode a resolver address to bypass Docker's.Docker supports adhoc generation of
resolv.conf. This can also be done using docker compose which removes the need for a volume mount/extra file to manage:https://docs.docker.com/reference/compose-file/services/#dns
This doesn't seem doable with custom bridge networks
Same behavior with Podman, though they have the
--disable-dnsflag. It probably relates to this longstanding issue. Hence the resolv.conf mount workaroundDo let me know if you find alternative solutions to this tho. It will also help #1594
@ -0,0 +147,4 @@## TestingAs a rough stress test, you can issue `!admin query resolver flush-cache -a` or `!admin server clear-caches` to trigger a netburst of DNS queries. If your resolver can handle these loads without problem, then it should be ready for regular Continuwuity activity.As you already mentioned in chat, these commands would be great in the troubleshooting guide
I added them to latest commit. Here's a rendered version
Not sure if the docs structure is optimal, let me know
@theSuess Many thanks for looking over the PR, I'm also just another drive-by contributor who wanna help with docs, so feel free to nag me for improvements over your free time :D
WIP: docs: Add DNS tuning guideto docs: Add DNS tuning guideThere are concerns with recommending any specific forwarder over recursion. I'd like users to explore forwarder options because they're 1. Generally faster due to CDNing and less requests, 2. Supported by more software, and 3. Has encryption options. But single-provider dependency and ratelimits are the costs. Better wording is needed
Mostly great, just a nitpick.
@ -0,0 +131,4 @@### NoneIf you can't install a local DNS caching resolver for some reason, you may still configure your machine to talk directly to public resolvers:I don't see why you wouldn't be able to add a resolver, and you lose caching from this, is it worth covering?
I removed the section
3e8a196cf1c347fe5061@ -0,0 +120,4 @@[Dnsproxy][dnsproxy] and its sister product [AdGuard Home][adguard-home] are known to work with Continuwuity and has an official Docker image. They have support for DNS-over-HTTPS as well as DNS-over-QUIC, but not recursion.To best utilise dnsproxy, you should enable proper caching with `--cache` and set `--cache-size` to something bigger, like `64M`.s/64M/64000000
This argument accepts a number of bytes, only an int, no unit. Otherwise, it fails to launch.
just some small grammar fixes
@ -0,0 +76,4 @@### Using a forwarder (optional)Unbound by default employs recursive resolution and contact many servers around the world. If this is not performant enough, consider forwarding your queries to public resolvers to benefit from their CDNs and get faster responses.s/contact/contacts
@ -0,0 +80,4 @@However, most popular upstreams (such as Google DNS or Quad9) employ IP ratelimiting, so a generous cache is still needed to avoid making too many queries.DNS-over-TLS forwarders may also be used should you need on-the-wire encryption, but TLS overhead would incur some speed penalties.s/would incur some small/causes some small
@ -0,0 +127,4 @@### dnsmasq[dnsmasq][arch-linux-dnsmasq] can possibly work with Continuwuity, though it only support forwarding rather than recursion. Increase the `cache-size` to something like `20000` for better caching performance.s/support/supports
@ -0,0 +142,4 @@## TestingAs a rough stress test, you can issue `!admin query resolver flush-cache -a` or `!admin server clear-caches` to trigger a netburst of DNS queries. If your resolver can handle these loads without problem, then it should be ready for regular Continuwuity activity.s/issue/run
imo it's simpler
@ -0,0 +146,4 @@To test connectivity against a specific server, use `!admin debug ping <SERVER_NAME>` and `!admin debug resolve-true-destination <SERVER_NAME>`.Note that it is expected that not all servers will be resolved, as some of them may be temporarily offline, has broken DNS and/or discovery configuration, or have been decommissioned.s/has/have
@ -52,2 +50,2 @@performance issues with Docker's built-in resolver, this can cause DNS queriesto take a long time to resolve, resulting in federation issues.- Spurious log entries with "DNS No connections available", "mismatching responding nameservers", or "error sending request"- Excessively long room joins (30+ minutes)in my experience this can also be !779
Reworded to say it's a slow S2S join as seen from server logs, as !779 relates to C2S not sending new info
@ -114,3 +69,1 @@If your DNS server supports it, some users have reported enabling`query_over_tcp_only` to force only TCP querying by default has improved DNSreliability at a slight performance cost due to TCP overhead.You may also use `!admin server clear-caches` or `!admin query resolver flush-cache -a` to clear all server/resolver caches, in case of failures with many domains. However, note this would significantly increase your server load for a short period.s/would significantly increase/significantly increases
ff838187f98fbfd9833f