-
Notifications
You must be signed in to change notification settings - Fork 259
Granular controls and bug fixes for internal DNS #6223
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: develop
Are you sure you want to change the base?
Conversation
|
Hmmm. Some of the DNS related tests seem either flakey or like they are interleaving in a way that is doing bad things to the shared resolver. |
|
The latest updates on your projects. Learn more about Vercel for GitHub.
2 Skipped Deployments
|
|
After changing the default to use IPv4 Only nameservers the errors in the tests run as part of the github actions have gone away. However, I do not fully understand the errors so I can't say for sure that this fixed the issue and that we didn't just get lucky this time. It seems like when the resolver chooses IPv6 in the tests in the gh action runner it times out instead of returning a If this is the case though, how did we not run into this issue before? |
d3ba010 to
5cda17f
Compare
* add mechanism to dns resolver to control if static table is checked fist or last
DNS resolver trial based rebuilding
…ilable set rather that whittling down
Changes
Add controls to allow a configuration change that prevents hickory from using IPv6 nameservers.
Add a toggle that allows the order in which the static table is checked to be configured by the downstream user of the library. The behavior of the shared resolver can be modified as well using this control.
Initialize that static table uesd by the (default) shared resolver properly
Explanations
IPv6
In the VPN client there are settings specifically intended to control how the library interacts with the IPv6 network stack. This is because some platforms do weird things and actually throw errors if IPv6 is used, so preventing the client from attempting IPv6 can be important in some cases.
This is a challenge with the custom DNS resolver as the hickory-resolver crate that we use provides no controls to indicate that an outgoing lookup should use only IPv4 nameservers or only IPv6 (or both).
Also there is an issue of randomness even when IPv6 doesn’t cause explicit problems where the resolver selecting nameservers to do a resolution could select IPv6 nameservers (because they are configured) even when the IPv6 network will be unreachable - i.e. the networking stack supports IPv6 but the device isn’t connection with an IPv6 address.
Static table check
The static lookup fallback added in #6178 checks the configured table after the inner resolver fails, however this has the issue that you will likely already have waited for the timeout making the subsequent use for the addresses also likely to timeout.
We can change this so that the check in the static table is done first, but the static addresses are currently VERY static, and making all clients relient on them not changing in order to access things like the API makes me nervous.
See NET-713 & NET-742
This change is