Actually configure the DNS #3

Closed
opened 2026-04-13 13:04:34 +00:00 by irl · 11 comments
Owner

Actually configure the DNS, making sure to change the settings if the DNS blocklist choice is updated.

We could add a canary record to the DNS server to verify that it's being used correctly, giving a different value depending on the specific server you're expecting to use.

Actually configure the DNS, making sure to change the settings if the DNS blocklist choice is updated. We could add a canary record to the DNS server to verify that it's being used correctly, giving a different value depending on the specific server you're expecting to use.
tla was assigned by irl 2026-04-14 16:00:02 +00:00
Collaborator
Is this the full DoH query? https://guardianproject.dev/sr2/cloud-dns-ios/src/branch/main/dns/ViewModel.swift#L56 Or should it be DoT?
Author
Owner

The DoH endpoint is https://{server}/dns-query (e.g. https://dns.sr2.uk/dns-query) and I think you probably have to include the path.

There is also a DoT server on the same IPs but I think DoH is probably best for most users as port 443 is less likely to be firewalled than weird DoT ports.

The DoH endpoint is https://{server}/dns-query (e.g. https://dns.sr2.uk/dns-query) and I think you probably have to include the path. There is also a DoT server on the same IPs but I think DoH is probably best for most users as port 443 is less likely to be firewalled than weird DoT ports.
Collaborator

Is there a good way to test, if I'm actually using your resolver?

Like some short-lived DNS resolution which only works with your DNS?

Is there a good way to test, if I'm actually using your resolver? Like some short-lived DNS resolution which only works with your DNS?
Author
Owner

I'll add a test record in a bit, it something like test.invalid can resolve to some a web server and that'd let you test in Safari?

I'll add a test record in a bit, it something like `test.invalid` can resolve to some a web server and that'd let you test in Safari?
Collaborator

Probably. You're the dev-ops guy and should probably know better than me! 😜

Probably. You're the dev-ops guy and should probably know better than me! 😜
Author
Owner
dig test.invalid

; <<>> DiG 9.10.6 <<>> test.invalid
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 6935
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;test.invalid.                  IN      A

;; ANSWER SECTION:
test.invalid.           3600    IN      A       104.20.23.154
``` dig test.invalid ; <<>> DiG 9.10.6 <<>> test.invalid ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 6935 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ;; QUESTION SECTION: ;test.invalid. IN A ;; ANSWER SECTION: test.invalid. 3600 IN A 104.20.23.154 ```
Author
Owner

You should see a Cloudflare error page.

You should see a Cloudflare error page.
Author
Owner

Right now if I try to enable I get:

Failed to send a 6 message to nehelper: <dictionary: 0x1e70b0b70> { count = 1, transaction: 0, voucher = 0x0, contents =
	"XPCErrorDescription" => <string: 0x1e70b0ce0> { string cache = 0x0, length = 18, contents = "Connection invalid" }
}
 Failed to load configurations: Error Domain=NEConfigurationErrorDomain Code=11 "IPC failed" UserInfo={NSLocalizedDescription=IPC failed}
Error loading preferences: Error Domain=NEConfigurationErrorDomain Code=11 "IPC failed" UserInfo={NSLocalizedDescription=IPC failed}
Error storing preferences: Error Domain=NEDNSSettingsErrorDomain Code=3 "(null)"

It then turns itself off again.

In the simulator, which maybe doesn't work for this?

Right now if I try to enable I get: ``` Failed to send a 6 message to nehelper: <dictionary: 0x1e70b0b70> { count = 1, transaction: 0, voucher = 0x0, contents = "XPCErrorDescription" => <string: 0x1e70b0ce0> { string cache = 0x0, length = 18, contents = "Connection invalid" } } Failed to load configurations: Error Domain=NEConfigurationErrorDomain Code=11 "IPC failed" UserInfo={NSLocalizedDescription=IPC failed} Error loading preferences: Error Domain=NEConfigurationErrorDomain Code=11 "IPC failed" UserInfo={NSLocalizedDescription=IPC failed} Error storing preferences: Error Domain=NEDNSSettingsErrorDomain Code=3 "(null)" ``` It then turns itself off again. In the simulator, which maybe doesn't work for this?
Collaborator

Simulator isn't working with all things Network Extensions.

Simulator isn't working with all things Network Extensions.
Collaborator

On a real device, the installed settings can actually be found in

Settings > General > VPN & Network > DNS

…and need to be manually activated by the user. No hints from the OS, impossible to send users straight there.

Will need UI to explain.

(And app will need to be slightly restructured to adapt to this reality.)

On a real device, the installed settings can actually be found in `Settings > General > VPN & Network > DNS` …and need to be manually activated by the user. No hints from the OS, impossible to send users straight there. Will need UI to explain. (And app will need to be slightly restructured to adapt to this reality.)
tla was unassigned by irl 2026-04-16 11:07:58 +00:00
Author
Owner

The feature is implemented, UI is another issue.

The feature is implemented, UI is another issue.
irl closed this issue 2026-04-16 11:08:31 +00:00
Sign in to join this conversation.
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: sr2/cloud-dns-ios#3
No description provided.