WIP: docs: Add DNS tuning guide #1601

Draft
stratself wants to merge 5 commits from stratself/continuwuity:stratself/docs-dns into main
Contributor

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:

  • Rewrite the troubleshooting page section to simplify wording and reflink to this new page.
  • Link other pages (e.g. Docker next steps, performance tuning) to this page (in other PRs)

Pull request checklist:

  • This pull request targets the main branch, and the branch is named something other than
    main.
  • I have written an appropriate pull request title and my description is clear.
  • I understand I am responsible for the contents of this pull request.
  • I have followed the contributing guidelines:
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: - https://muc.muoi.me/advanced/dns.html - https://muc.muoi.me/troubleshooting.html#dns-issues TODOS: - [x] Rewrite the [troubleshooting page section](https://continuwuity.org/troubleshooting#dns-issues) to simplify wording and reflink to this new page. - [ ] Link other pages (e.g. Docker next steps, performance tuning) to this page (in other PRs) <!-- Example: This pull request allows us to warp through time and space ten times faster than before by double-inverting the warp drive with hyperheated jump fluid, both making the drive faster and more efficient. This resolves the common issue where we have to wait more than 10 milliseconds to engage, use, and disengage the warp drive when travelling between galaxies. --> <!-- Closes: #... --> <!-- Fixes: #... --> <!-- Uncomment the above line(s) if your pull request fixes an issue or closes another pull request by superseding it. Replace `#...` with the issue/pr number, such as `#123`. --> **Pull request checklist:** <!-- You need to complete these before your PR can be considered. If you aren't sure about some, feel free to ask for clarification in #dev:continuwuity.org. --> - [x] This pull request targets the `main` branch, and the branch is named something other than `main`. - [x] I have written an appropriate pull request title and my description is clear. - [x] I understand I am responsible for the contents of this pull request. - I have followed the [contributing guidelines][c1]: - [x] My contribution follows the [code style][c2], if applicable. - [x] I ran [pre-commit checks][c1pc] before opening/drafting this pull request. - [x] I have [tested my contribution][c1t] (or proof-read it for documentation-only changes) myself, if applicable. This includes ensuring code compiles. - [x] My commit messages follow the [commit message format][c1cm] and are descriptive. - [x] I have written a [news fragment][n1] for this PR, if applicable<!--(can be done after hitting open!)-->. <!-- Notes on these requirements: - While not required, we encourage you to sign your commits with GPG or SSH to attest the authenticity of your changes. - While we allow LLM-assisted contributions, we do not appreciate contributions that are low quality, which is typical of machine-generated contributions that have not had a lot of love and care from a human. Please do not open a PR if all you have done is asked ChatGPT to tidy up the codebase with a +-100,000 diff. - In the case of code style violations, reviewers may leave review comments/change requests indicating what the ideal change would look like. For example, a reviewer may suggest you lower a log level, or use `match` instead of `if/else` etc. - In the case of code style violations, pre-commit check failures, minor things like typos/spelling errors, and in some cases commit format violations, reviewers may modify your branch directly, typically by making changes and adding a commit. Particularly in the latter case, a reviewer may rebase your commits to squash "spammy" ones (like "fix", "fix", "actually fix"), and reword commit messages that don't satisfy the format. - Pull requests MUST pass the `Checks` CI workflows to be capable of being merged. This can only be bypassed in exceptional circumstances. If your CI flakes, let us know in matrix:r/dev:continuwuity.org. - Pull requests have to be based on the latest `main` commit before being merged. If the main branch changes while you're making your changes, you should make sure you rebase on main before opening a PR. Your branch will be rebased on main before it is merged if it has fallen behind. - We typically only do fast-forward merges, so your entire commit log will be included. Once in main, it's difficult to get out cleanly, so put on your best dress, smile for the cameras! --> [c1]: https://forgejo.ellis.link/continuwuation/continuwuity/src/branch/main/CONTRIBUTING.md [c2]: https://forgejo.ellis.link/continuwuation/continuwuity/src/branch/main/docs/development/code_style.mdx [c1pc]: https://forgejo.ellis.link/continuwuation/continuwuity/src/branch/main/CONTRIBUTING.md#pre-commit-checks [c1t]: https://forgejo.ellis.link/continuwuation/continuwuity/src/branch/main/CONTRIBUTING.md#running-tests-locally [c1cm]: https://forgejo.ellis.link/continuwuation/continuwuity/src/branch/main/CONTRIBUTING.md#commit-messages [n1]: https://towncrier.readthedocs.io/en/stable/tutorial.html#creating-news-fragments
docs(dns): Add main content
Some checks failed
Check Changelog / Check for changelog (pull_request_target) Successful in 16s
Documentation / Build and Deploy Documentation (pull_request) Has been skipped
Checks / Prek / Pre-commit & Formatting (pull_request) Failing after 3m9s
Checks / Prek / Clippy and Cargo Tests (pull_request) Successful in 13m13s
6b771dcc9a
docs(dns): Clarity changes and some additions
Some checks failed
Documentation / Build and Deploy Documentation (pull_request) Has been skipped
Check Changelog / Check for changelog (pull_request_target) Successful in 11s
Checks / Prek / Pre-commit & Formatting (pull_request) Failing after 2m55s
Checks / Prek / Clippy and Cargo Tests (pull_request) Successful in 12m37s
868a982cbb
docs(troubleshooting): shorten dns section and link to dns tuning guide
Some checks failed
Documentation / Build and Deploy Documentation (pull_request) Has been skipped
Check Changelog / Check for changelog (pull_request_target) Successful in 10s
Checks / Prek / Pre-commit & Formatting (pull_request) Failing after 2m54s
Checks / Prek / Clippy and Cargo Tests (pull_request) Successful in 13m4s
f1a4cb2b3e
theSuess left a comment
First-time contributor

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 :)

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](https://www.man7.org/linux/man-pages/man5/resolv.conf.5.html#:~:text=see%20resolver%283%29%29%2E-,ndots%3A) 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 users
Docker 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.
First-time contributor

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

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
Author
Contributor

This doesn't seem doable with custom bridge networks

~$ docker network create testing
<some-long-id>
~$ docker run --rm -it --net testing --dns 1.1.1.1 alpine cat /etc/resolv.conf

$ docker run --rm -it --net testing --dns 1.1.1.1 alpine cat /etc/resolv.conf
# Generated by Docker Engine.
# This file can be edited; Docker Engine will not make further changes once it
# has been modified.

nameserver 127.0.0.11
options use-vc ndots:0

# Based on host file: '/etc/resolv.conf' (internal resolver)
# ExtServers: [1.1.1.1]
# Overrides: [nameservers]
# Option ndots from: internal

Same behavior with Podman, though they have the --disable-dns flag. It probably relates to this longstanding issue. Hence the resolv.conf mount workaround

Do let me know if you find alternative solutions to this tho. It will also help #1594

This doesn't seem doable with custom bridge networks ``` ~$ docker network create testing <some-long-id> ~$ docker run --rm -it --net testing --dns 1.1.1.1 alpine cat /etc/resolv.conf $ docker run --rm -it --net testing --dns 1.1.1.1 alpine cat /etc/resolv.conf # Generated by Docker Engine. # This file can be edited; Docker Engine will not make further changes once it # has been modified. nameserver 127.0.0.11 options use-vc ndots:0 # Based on host file: '/etc/resolv.conf' (internal resolver) # ExtServers: [1.1.1.1] # Overrides: [nameservers] # Option ndots from: internal ``` Same behavior with Podman, though they have the `--disable-dns` flag. It probably relates to this longstanding [issue](https://github.com/moby/moby/issues/19474). Hence the resolv.conf mount workaround Do let me know if you find alternative solutions to this tho. It will also help #1594
@ -0,0 +147,4 @@
## Testing
As 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.
First-time contributor

As you already mentioned in chat, these commands would be great in the troubleshooting guide

As you already mentioned in chat, these commands would be great in the troubleshooting guide
Author
Contributor

I added them to latest commit. Here's a rendered version

Not sure if the docs structure is optimal, let me know

I added them to [latest commit](https://forgejo.ellis.link/continuwuation/continuwuity/pulls/1601/commits/928ac8d9c542b65c46aeb51aa16acdbca2c78672). Here's a [rendered version](https://muc.muoi.me/troubleshooting.html#intermittent-federation-failures-to-a-specific-server) Not sure if the docs structure is optimal, let me know
Author
Contributor

@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

@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
docs(troubleshooting): Add section on intermittent fed failures
All checks were successful
Documentation / Build and Deploy Documentation (pull_request) Has been skipped
Check Changelog / Check for changelog (pull_request_target) Successful in 10s
Checks / Prek / Pre-commit & Formatting (pull_request) Successful in 3m6s
Checks / Prek / Clippy and Cargo Tests (pull_request) Successful in 12m55s
928ac8d9c5
Also some wordfixings in dns docs
All checks were successful
Documentation / Build and Deploy Documentation (pull_request) Has been skipped
Check Changelog / Check for changelog (pull_request_target) Successful in 10s
Checks / Prek / Pre-commit & Formatting (pull_request) Successful in 3m6s
Required
Details
Checks / Prek / Clippy and Cargo Tests (pull_request) Successful in 12m55s
Required
Details
This pull request is marked as a work in progress.
This branch is out-of-date with the base branch
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u stratself/docs-dns:stratself-stratself/docs-dns
git switch stratself-stratself/docs-dns
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
continuwuation/continuwuity!1601
No description provided.