Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
269 commits
Select commit Hold shift + click to select a range
b14a964
Do not leak fd when DialUDP succeeds but Write fails
MegaManSec Sep 22, 2025
a73ceec
Do not truncate buffer size of client UDP datagrams
MegaManSec Sep 22, 2025
c671d20
Merge pull request #2970 from MegaManSec/win
jedisct1 Sep 22, 2025
0ed2372
Merge pull request #2971 from MegaManSec/trunc
jedisct1 Sep 22, 2025
025cf91
Merge pull request #2977 from MegaManSec/retryid
jedisct1 Sep 22, 2025
c9cdee1
Merge pull request #2973 from MegaManSec/leak
jedisct1 Sep 22, 2025
aae3da8
Fix inverted nil-check in cache file resolution
MegaManSec Sep 22, 2025
b08f56c
Merge pull request #2972 from MegaManSec/nul
jedisct1 Sep 22, 2025
36e342b
Set http2Transport.ReadIdleTimeout and AllowHTTP correctly
MegaManSec Sep 22, 2025
cb1cd83
Use To4() == nil to check if an IP address is IPv6
jedisct1 Sep 22, 2025
1da8f34
Merge branch 'master' of github.com:DNSCrypt/dnscrypt-proxy
jedisct1 Sep 22, 2025
af6c4f8
Correctly fix #2973
jedisct1 Sep 22, 2025
afab24a
Simplify IPv4/IPv6 address split logic for resolveUsingSystem
jedisct1 Sep 22, 2025
a358f2d
Improve target CNAME resolving for cloaking (#2959)
lifenjoiner Sep 22, 2025
165ae5a
Merge branch 'master' of github.com:DNSCrypt/dnscrypt-proxy
jedisct1 Sep 22, 2025
73ee5bc
"forceType" was a bit confusing. Use booleans instead
jedisct1 Sep 22, 2025
da97a9c
Merge pull request #2979 from MegaManSec/nil2
jedisct1 Sep 22, 2025
40d23ed
Directly check that http2Transport != nil
jedisct1 Sep 22, 2025
d01ec86
Pre-resolve proxy hostname using bootstrap resolvers if it's a domain
jedisct1 Sep 22, 2025
e83e65a
Add explicit fallthrough
jedisct1 Sep 22, 2025
1ee8633
Typo
jedisct1 Sep 22, 2025
b50cac2
Cache multiple IP addresses per hostname instead of a random one
jedisct1 Sep 22, 2025
973c74c
Greatly improve the monitoring UI with server health and more!
jedisct1 Sep 22, 2025
5f82ec0
Simplify the UI a bit
jedisct1 Sep 22, 2025
c2f08a2
Remove computation of now unused data
jedisct1 Sep 22, 2025
3a9da80
Merge pull request #2957 from DNSCrypt/welwood08-patch-1
jedisct1 Sep 22, 2025
b01ce77
Fix 40d23ed
welwood08 Sep 23, 2025
89220ff
Report errors on certificate loading/appending
MegaManSec Sep 24, 2025
9315c3e
processDNSCryptQuery: call noticeFailure on UDP→TCP re-encrypt error
MegaManSec Sep 24, 2025
d9f8895
Further clean up serverInfo.noticeBegin and serverInfo.noticeFailure
MegaManSec Sep 24, 2025
8edb1ea
Clean up proxy.xTransport.DoHQuery and handle correctly handle when t…
MegaManSec Sep 24, 2025
40def34
Local DoH: return 400 for malformed packets
jedisct1 Sep 24, 2025
c18e9bb
Merge pull request #2988 from MegaManSec/err
jedisct1 Sep 24, 2025
cc62985
fixup error msg + do not penalize on client error
MegaManSec Sep 24, 2025
55fc36d
Properly format #2988
jedisct1 Sep 24, 2025
c3e6811
Display response times as integers
jedisct1 Sep 25, 2025
91db52f
Update deps
jedisct1 Sep 30, 2025
99220ae
Merge pull request #2986 from MegaManSec/noticeFailure
jedisct1 Oct 3, 2025
c5b7627
Missing bits from #2986 for DNSCrypt
jedisct1 Oct 3, 2025
5c5b44c
Update quic-go
jedisct1 Oct 3, 2025
e61717c
Revert 89220ff8e
jedisct1 Oct 7, 2025
3dec2db
Yikes, we have way too many debug logs, making the logs useless
jedisct1 Oct 7, 2025
649d6e5
Remove another useless log
jedisct1 Oct 7, 2025
0e82c50
Useless log
jedisct1 Oct 7, 2025
132fe6c
Bump github/codeql-action from 3 to 4
dependabot[bot] Oct 8, 2025
5cc42a9
Merge pull request #3004 from DNSCrypt/dependabot/github_actions/gith…
jedisct1 Oct 8, 2025
1b2472d
Fix double-bracketing of IPv6 addresses in DoH stamps
jedisct1 Oct 8, 2025
e9f8f55
Merge branch 'master' of github.com:DNSCrypt/dnscrypt-proxy
jedisct1 Oct 8, 2025
4457dd5
Enforce bracket notation for IPv6 bootstrap resolvers
jedisct1 Oct 8, 2025
77b3c65
Minor change to LBStrategyPH.getActiveCount()
lifenjoiner Oct 11, 2025
ae5d842
Shows the number of live servers refreshed per round
lifenjoiner Oct 10, 2025
8c40578
Merge pull request #3014 from lifenjoiner/ph
jedisct1 Oct 11, 2025
624abfb
Merge pull request #3013 from lifenjoiner/refresh
jedisct1 Oct 11, 2025
62230b3
Show $DHCP resolving errors
lifenjoiner Oct 15, 2025
7e4a380
Merge pull request #3015 from lifenjoiner/dhcperr
jedisct1 Oct 15, 2025
fa59f99
Prevent the config watcher from crashing when fsnotify creation fails
jedisct1 Oct 22, 2025
788e3a5
Only count cache statistics for queries that participate in caching
jedisct1 Oct 25, 2025
2672d42
Bump actions/upload-artifact from 4 to 5
dependabot[bot] Oct 27, 2025
d626381
Merge pull request #3020 from DNSCrypt/dependabot/github_actions/acti…
jedisct1 Oct 27, 2025
745d82c
Optimize the main slightly
lifenjoiner Nov 7, 2025
cd710b9
Use DialTimeout if possible
lifenjoiner Nov 5, 2025
4311d34
If plugins fail, fail close and drop the response
jedisct1 Nov 8, 2025
1a0e1bd
Update deps
jedisct1 Nov 8, 2025
b725bad
Dynamically reduce the timeout as we get closer to the cnx limit
jedisct1 Nov 9, 2025
6b58ff0
document timeout_load_reduction
jedisct1 Nov 9, 2025
ecfc925
Merge pull request #3021 from lifenjoiner/DialTimeout
jedisct1 Nov 9, 2025
66678e9
Update deps
jedisct1 Nov 9, 2025
a16e21c
Merge branch 'master' of github.com:DNSCrypt/dnscrypt-proxy
jedisct1 Nov 9, 2025
6814ca8
Merge pull request #3022 from lifenjoiner/goroutine
jedisct1 Nov 9, 2025
1e03995
Update ChangeLog
jedisct1 Nov 9, 2025
9af397d
Reduce default TimeoutLoadReduction , use a quartic curve
jedisct1 Nov 9, 2025
d7ca4c9
Use a more aggressive default value for TimeoutLoadReduction
jedisct1 Nov 9, 2025
427c2a6
Ensure xTransport Response.Body is closed
lifenjoiner Nov 10, 2025
84ee7b3
Merge pull request #3025 from lifenjoiner/RespBody
jedisct1 Nov 10, 2025
1f8a725
Show number of goroutines if reaches max clients
lifenjoiner Oct 15, 2025
a3f2e49
Merge pull request #3026 from lifenjoiner/workload
jedisct1 Nov 10, 2025
9b1b1e2
Sync vendor
jedisct1 Nov 10, 2025
a255072
Shuffle `ServersInfo.registeredServers` copy before refreshing.
lifenjoiner Nov 13, 2025
324786d
Merge pull request #3033 from lifenjoiner/shuffle
jedisct1 Nov 13, 2025
554c1bd
Fix potential slice corruption for ODoH
lifenjoiner Nov 14, 2025
f899945
Merge pull request #3035 from lifenjoiner/race
jedisct1 Nov 14, 2025
1cce853
ci-test.sh: show line number where failed
lifenjoiner Nov 14, 2025
ad9c81e
Merge pull request #3034 from lifenjoiner/test
jedisct1 Nov 14, 2025
e0029c4
Bump actions/checkout from 5 to 6
dependabot[bot] Nov 21, 2025
280efc3
Merge pull request #3039 from DNSCrypt/dependabot/github_actions/acti…
jedisct1 Nov 21, 2025
353e737
Update deps
jedisct1 Nov 26, 2025
6cb6faf
ODOH: check padding of plaintext, not ciphertext
jedisct1 Nov 26, 2025
7db9b5f
Set DSCP marking for IPv6
jedisct1 Dec 1, 2025
fe5065e
Don't mark HTTP/3 as experimental any more
jedisct1 Dec 9, 2025
507cae4
Update dependencies
jedisct1 Dec 9, 2025
e694da8
Downgrade the requirements to Go 1.25
jedisct1 Dec 9, 2025
a8a481f
Update go-sieve-cache
jedisct1 Dec 9, 2025
c0add8d
syscall.IPV6_TCLASS isn't defined in Go's syscall package for Windows
jedisct1 Dec 9, 2025
5aec3d3
Add linux-loong64 and freebsd-arm64 binaries
jedisct1 Dec 9, 2025
ca24e51
Add a UDP connection pool
jedisct1 Dec 9, 2025
d219bda
Import udp_conn_pool
jedisct1 Dec 9, 2025
287d21c
Grammar
jedisct1 Dec 10, 2025
6908174
Add missing lock
jedisct1 Dec 10, 2025
1c3faf6
Forgotten ipcrypt config in plugin_block_name plugin
jedisct1 Dec 10, 2025
41732e5
Guard against empty qType and return codes
jedisct1 Dec 10, 2025
ed1370d
Bump version
jedisct1 Dec 10, 2025
e2d09ac
Go 1.24 should be fine
jedisct1 Dec 10, 2025
d3a6ef7
Bump actions/upload-artifact from 5 to 6
dependabot[bot] Dec 15, 2025
9937d8d
Merge pull request #3056 from DNSCrypt/dependabot/github_actions/acti…
jedisct1 Dec 15, 2025
956b4ba
Switch to miekg/dns v2
jedisct1 Dec 15, 2025
93996f6
Merge branch 'master' of github.com:DNSCrypt/dnscrypt-proxy
jedisct1 Dec 15, 2025
54d063a
Set proxy.xTransport.mainProto when a proxy is configured
jedisct1 Dec 19, 2025
e5ea893
I have no idea what that comment means
jedisct1 Dec 19, 2025
4236aee
Configure server parameters before setting up xTransport
jedisct1 Dec 19, 2025
7bd1f7a
Replace proxy.mainProto with proxy.xTransport.mainProto everywhere
jedisct1 Dec 19, 2025
fbae153
miekg/dns: fix EDNS-clientsubnet
jedisct1 Dec 22, 2025
d4242ce
Update deps
jedisct1 Dec 22, 2025
0f230f7
Exchange() now seems to skip Pack() if Data is not empty
jedisct1 Dec 22, 2025
7e1fa93
Update miekg/dns
jedisct1 Dec 25, 2025
f2a0828
Make tls_cipher_suite a no-op
jedisct1 Dec 25, 2025
f9f1944
Mention that cert_refresh_concurrency also affects DoH
jedisct1 Dec 25, 2025
1172225
Add tls_prefer_rsa as promised a while back
jedisct1 Dec 25, 2025
ff6b8a9
Remove unused loadCachedIP
jedisct1 Dec 25, 2025
9c4d40c
Remove unused setMaxTTL function
jedisct1 Dec 25, 2025
d534bc7
dns.NewMsg can return `nil` on unsupported query types
jedisct1 Dec 27, 2025
299ebd2
The server IP version may not have any matching relays
jedisct1 Dec 27, 2025
b457005
Clarify that for ODoH, an ODoH relay is required
jedisct1 Dec 31, 2025
900933d
Avoid copying dns.Msg structs containing atomic.Bool
jedisct1 Dec 31, 2025
3f02c2a
2026
jedisct1 Jan 5, 2026
3c4426d
Update miekg/dns
jedisct1 Jan 5, 2026
861cf88
Improve the issue templates
jedisct1 Jan 7, 2026
4efc113
Add relay name to logs
jedisct1 Jan 7, 2026
6970ca7
Update miekg/dns
jedisct1 Jan 7, 2026
f9f9b23
Update quic-go and miekg/dns
jedisct1 Jan 11, 2026
ab5cd68
Update CI tests after log format change
jedisct1 Jan 11, 2026
fdc6fcf
.gitignore: add LOG.md
jedisct1 Jan 11, 2026
2e058f6
Make the cache TTL an explicit, configurable parameter
jedisct1 Jan 23, 2026
f5eb9fd
Update deps
jedisct1 Jan 23, 2026
95c695a
Update monitoring_ui.go
agvol Feb 1, 2026
b9c22ac
Update miekg/dns
jedisct1 Feb 2, 2026
28eaefc
dddtoBytes: reject values > 255
jedisct1 Feb 5, 2026
c7ce866
Nits
jedisct1 Feb 5, 2026
cef59de
No need for a global tweak in non-deterministic ipcrypt
jedisct1 Feb 5, 2026
048a7b8
HTTP/3->HTTP/2 downgrade: reset body reader
jedisct1 Feb 5, 2026
b2410d0
ODoH bounds check
jedisct1 Feb 5, 2026
ab27f16
Merge pull request #3111 from agvol/agvol-fix-metric-format
jedisct1 Feb 9, 2026
bad4012
Update deps
jedisct1 Feb 9, 2026
b9c0def
dns.PADDING expects the padding as a hex string (?)
jedisct1 Feb 9, 2026
52681d9
X is 0x58
jedisct1 Feb 9, 2026
45715fd
go fix
jedisct1 Feb 13, 2026
3bce876
Update deps
jedisct1 Feb 13, 2026
4ad7c23
Update tests
jedisct1 Feb 13, 2026
1661a56
Add $RESOLVCONF:<file> support for forwarding rules
jedisct1 Feb 13, 2026
b618b0d
Add support for CIDR ranges in the IP allow/block plugins
jedisct1 Feb 13, 2026
7b90eaf
listenAddrStr can be empty
jedisct1 Feb 13, 2026
2f9899e
Update deps
jedisct1 Feb 22, 2026
92d457b
Update deps
jedisct1 Mar 2, 2026
461289a
Update deps
jedisct1 Mar 28, 2026
659013c
Tighten the issue template
jedisct1 Mar 29, 2026
218c70c
Go 1.20 has been around for a while now
jedisct1 Mar 29, 2026
ba585a5
Correct comment
jedisct1 Mar 29, 2026
a732974
Update deps
jedisct1 Mar 29, 2026
0af6d2e
Try to remove the exclusion
jedisct1 Mar 29, 2026
6f96816
Nits
jedisct1 Mar 29, 2026
8332494
Handle Alt-Svc: clear
jedisct1 Mar 30, 2026
64edfa3
Add permission blocks
jedisct1 Mar 31, 2026
9b7c23c
Nits
jedisct1 Apr 9, 2026
22160c8
Add a test for the UI
jedisct1 Apr 11, 2026
7f36ee0
Update deps
jedisct1 Apr 11, 2026
4a3c8a0
0 for the log size doens't mean unlimited
jedisct1 Apr 16, 2026
bac7789
Fix: Configured DNS64 prefixes longer than /96 trigger out-of-bounds …
jedisct1 Apr 16, 2026
2d7227c
Fix: Validation gap; high severity; confidence: certain.
jedisct1 Apr 16, 2026
f3615b5
Fix: Unsynchronized staging matcher access races during reload
jedisct1 Apr 16, 2026
974b431
Fix: Put stores pooled connection after shutdown starts
jedisct1 Apr 16, 2026
5b078bb
Fix: Reload staging map races with apply/cancel
jedisct1 Apr 16, 2026
24ccca0
Update deps
jedisct1 Apr 20, 2026
41d01fd
Before probing HTTP/3, check a negative cache
jedisct1 Apr 21, 2026
0f4ac5f
Add jsdelivr as an alternative source URL
jedisct1 Apr 23, 2026
c980483
Fix: servers with temporarily inflated RTT never recover
jedisct1 Apr 23, 2026
9b948a1
Merge branch 'master' of github.com:DNSCrypt/dnscrypt-proxy
jedisct1 Apr 23, 2026
0f96b6d
Don't penalize servers when serving stale cached responses
jedisct1 Apr 24, 2026
5dfd19d
Fix: Authenticated Metrics JSONP Exfiltrates Query Data
jedisct1 Apr 28, 2026
315662b
Add missing = in example
jedisct1 May 2, 2026
a7f669c
Reject recursive cloaking rules at load time
jedisct1 May 2, 2026
af9a1d2
Update dependencies and actions
jedisct1 May 3, 2026
412c5cb
Web UI: ditch JSON-P. Use fetch() for everything, it's 2026.
jedisct1 May 5, 2026
541a059
Don't cache dashboard HTML pages (#3183)
lifenjoiner May 18, 2026
dfacfab
Update comment
jedisct1 May 18, 2026
e54a9e4
Update deps
jedisct1 May 18, 2026
ff90a55
-resolve: report incomplete DNSSEC support
jedisct1 May 21, 2026
4f151a5
xtransport: improve HTTP connection reuse
jedisct1 May 21, 2026
14bf781
Fix double strings.ToLower in ipcrypt.go
hklcf May 23, 2026
27172a5
Fix data race on internalResolverReady field
jedisct1 May 23, 2026
7fe5e42
Fix TOCTOU race in refreshServer (#3224)
hklcf May 23, 2026
cf1ba06
Normalize IP encryption algorithm once
jedisct1 May 23, 2026
0156081
Merge IPCrypt algorithm normalization
jedisct1 May 23, 2026
b5742bc
Merge branch 'master' of github.com:DNSCrypt/dnscrypt-proxy
jedisct1 May 23, 2026
b531fc6
Drop responses that fail plugin processing
jedisct1 May 23, 2026
915601f
Reponse plugins reject reponses without a question
jedisct1 May 23, 2026
5462782
odoh: coalesce key refreshes on 401 and remove blocking sleep
jedisct1 May 23, 2026
96fcf9e
odoh: harden 401 refresh path against panics, races, and bad state
jedisct1 May 23, 2026
2fd39cf
Add odoh test
jedisct1 May 23, 2026
140587c
Bump
jedisct1 May 24, 2026
c1766ee
Add a Makefile
jedisct1 May 24, 2026
60ab04f
Update GitHub workflows to use Zizmor
jedisct1 May 26, 2026
d8ddd70
Simplify
jedisct1 May 28, 2026
86d2979
Fix TCP fallback for truncated forwarded queries
jedisct1 Jun 4, 2026
fef535c
Validate DNS response questions
jedisct1 Jun 5, 2026
f28f0b3
Nits
jedisct1 Jun 5, 2026
0fce9de
Fix cycles detection in cloaking rules
jedisct1 Jun 6, 2026
76bd16c
Format
jedisct1 Jun 6, 2026
3d1a190
Resolve against the origin rather than the document URL
jedisct1 Jun 9, 2026
24fa8a3
Implement pqdnscrypt
jedisct1 Jun 16, 2026
307e379
Import circl
jedisct1 Jun 16, 2026
1066199
go.mod: nove things round
jedisct1 Jun 19, 2026
d164a54
Update deps
jedisct1 Jun 19, 2026
b5468f5
Pad certificate queries enough to retrieve PQ certs over UDP
jedisct1 Jun 20, 2026
3f06406
Add new undelegated TLDs
jedisct1 Jun 20, 2026
c414494
Watch for network changes and rotate PQ tickets when needed
jedisct1 Jun 22, 2026
b9f971e
Rotate keys on IP changes also for classical dnscrypt
jedisct1 Jun 22, 2026
e7af9f2
Retry HTTP/3 after transient failures.
jedisct1 Jun 23, 2026
8bc23a4
Update GitHub actions
jedisct1 Jul 8, 2026
f41078a
Update deps
jedisct1 Jul 10, 2026
df3ba8e
Add a helper funciton to clone (not copy) a dns message
jedisct1 Jul 10, 2026
8775802
Use cloneMsg instead of shallow Copy for cached DNS messages
jedisct1 Jul 10, 2026
6fb0980
Initialize the DNS cache at plugin init time
jedisct1 Jul 10, 2026
3c5dc7e
exchangeWithUDPServerViaProxy: on timeout, directly return an error
jedisct1 Jul 11, 2026
4862bfe
Properly parse netprobe_timeout
jedisct1 Jul 11, 2026
3ba850c
cache: include CD bit in the cache key
jedisct1 Jul 11, 2026
9bb7b8b
lock source.refresh
jedisct1 Jul 11, 2026
ff48987
When using SOCKS + relay + a simple DNS exchange, send to the relay
jedisct1 Jul 11, 2026
a7cb2c8
pattern matcher: test membership, not nil
jedisct1 Jul 11, 2026
c4e1393
resolveUsingResolver: don't return an error if we got some IPs
jedisct1 Jul 11, 2026
f6baedb
local DoH: pad responses, not the incoming query
jedisct1 Jul 11, 2026
43bd978
Validate ODoH padding length
jedisct1 Jul 13, 2026
f835e7c
Make pqdnscrypt a setting
jedisct1 Jul 13, 2026
3e6f562
Update README.md to include PQ stuff
jedisct1 Jul 13, 2026
77da353
ephemeral key pairs are for X25519
jedisct1 Jul 13, 2026
04acb1a
Reuse PQ key pairs
jedisct1 Jul 13, 2026
75693da
Mention that dnscrypt_servers also affects PQDNSCrypt
jedisct1 Jul 13, 2026
ed1843d
Bump
jedisct1 Jul 13, 2026
211332c
Update deps
jedisct1 Jul 13, 2026
74b0aec
Sync deps
jedisct1 Jul 13, 2026
37920d1
Update CodeQL action
jedisct1 Jul 13, 2026
63203c3
Improve ODoH diagnostics
jedisct1 Jul 13, 2026
ebd5d3c
UI: limit the size of top domains map
jedisct1 Jul 13, 2026
a04d330
Fix PQ certificate fallback on fragmented UDP paths
jedisct1 Jul 18, 2026
9601210
Update miekg/dns
jedisct1 Jul 18, 2026
3c9e7bf
Update github actions
jedisct1 Jul 18, 2026
c11e884
Support $PROXY in forwarding rules
jedisct1 Jul 18, 2026
3770b52
Stop counting PQ certs transfer time in the startup benchmark
jedisct1 Jul 18, 2026
085d0db
Start benchmarking before Write(), not the setup time
jedisct1 Jul 18, 2026
f8cd9cb
Real TCP queries dial a fresh connection every time
jedisct1 Jul 18, 2026
2d6e740
Improve examples
jedisct1 Jul 18, 2026
458d2af
Bump
jedisct1 Jul 18, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
14 changes: 14 additions & 0 deletions .ci/ci-build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,13 @@ ln dnscrypt-proxy freebsd-arm/
ln ../LICENSE example-dnscrypt-proxy.toml localhost.pem example-*.txt freebsd-arm/
tar czpvf dnscrypt-proxy-freebsd_arm-${PACKAGE_VERSION:-dev}.tar.gz freebsd-arm

go clean
env GOOS=freebsd GOARCH=arm64 go build -mod vendor -ldflags="-s -w"
mkdir freebsd-arm64
ln dnscrypt-proxy freebsd-arm64/
ln ../LICENSE example-dnscrypt-proxy.toml localhost.pem example-*.txt freebsd-arm64/
tar czpvf dnscrypt-proxy-freebsd_arm64-${PACKAGE_VERSION:-dev}.tar.gz freebsd-arm64

go clean
env GOOS=dragonfly GOARCH=amd64 go build -mod vendor -ldflags="-s -w"
mkdir dragonflybsd-amd64
Expand Down Expand Up @@ -157,6 +164,13 @@ ln dnscrypt-proxy linux-riscv64/
ln ../LICENSE example-dnscrypt-proxy.toml localhost.pem example-*.txt linux-riscv64/
tar czpvf dnscrypt-proxy-linux_riscv64-${PACKAGE_VERSION:-dev}.tar.gz linux-riscv64

go clean
env CGO_ENABLED=0 GOOS=linux GOARCH=loong64 go build -mod vendor -ldflags="-s -w"
mkdir linux-loong64
ln dnscrypt-proxy linux-loong64/
ln ../LICENSE example-dnscrypt-proxy.toml localhost.pem example-*.txt linux-loong64/
tar czpvf dnscrypt-proxy-linux_loong64-${PACKAGE_VERSION:-dev}.tar.gz linux-loong64

go clean
env GOOS=darwin GOARCH=amd64 go build -mod vendor -ldflags="-s -w"
mkdir macos-x86_64
Expand Down
130 changes: 65 additions & 65 deletions .ci/ci-test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ t() {
}

fail() (
echo "*** Test #${TEST_COUNT} FAILED ***" >&2
echo "*** Test #${TEST_COUNT} FAILED, line: $1 ***" >&2
)

section() {
Expand All @@ -26,20 +26,20 @@ t || (
cd ../dnscrypt-proxy
go test -mod vendor
go build -mod vendor -race
) || fail
) || fail $LINENO

section
sed -e "s/127.0.0.1:53/127.0.0.1:${DNS_PORT}/g" -e "s/# server_names =.*/server_names = ['scaleway-fr']/" ../dnscrypt-proxy/example-dnscrypt-proxy.toml >test-dnscrypt-proxy.toml
../dnscrypt-proxy/dnscrypt-proxy -loglevel 3 -config test-dnscrypt-proxy.toml -pidfile /tmp/dnscrypt-proxy.pidfile &
sleep 5

t ||
dig -p${DNS_PORT} . @127.0.0.1 | grep -Fq 'root-servers.net.' || fail
t || dig -p${DNS_PORT} +dnssec . @127.0.0.1 | grep -Fq 'root-servers.net.' || fail
t || dig -p${DNS_PORT} +dnssec . @127.0.0.1 | grep -Fq 'flags: do;' || fail
t || dig -p${DNS_PORT} +short one.one.one.one @127.0.0.1 | grep -Fq '1.1.1.1' || fail
t || dig -p${DNS_PORT} +dnssec dnscrypt.info @127.0.0.1 | grep -Fq 'flags: qr rd ra ad' || fail
t || dig -p${DNS_PORT} +dnssec dnscrypt.info @127.0.0.1 | grep -Fq 'flags: do;' || fail
dig -p${DNS_PORT} . @127.0.0.1 | grep -Fq 'root-servers.net.' || fail $LINENO
t || dig -p${DNS_PORT} +dnssec . @127.0.0.1 | grep -Fq 'root-servers.net.' || fail $LINENO
t || dig -p${DNS_PORT} +dnssec . @127.0.0.1 | grep -Fq 'flags: do;' || fail $LINENO
t || dig -p${DNS_PORT} +short one.one.one.one @127.0.0.1 | grep -Fq '1.1.1.1' || fail $LINENO
t || dig -p${DNS_PORT} +dnssec dnscrypt.info @127.0.0.1 | grep -Fq 'flags: qr rd ra ad' || fail $LINENO
t || dig -p${DNS_PORT} +dnssec dnscrypt.info @127.0.0.1 | grep -Fq 'flags: do;' || fail $LINENO

kill $(cat /tmp/dnscrypt-proxy.pidfile)
sleep 5
Expand All @@ -49,102 +49,102 @@ section
sleep 5

section
t || dig -p${DNS_PORT} A microsoft.com @127.0.0.1 | grep -Fq "NOERROR" || fail
t || dig -p${DNS_PORT} A MICROSOFT.COM @127.0.0.1 | grep -Fq "NOERROR" || fail
t || dig -p${DNS_PORT} A microsoft.com @127.0.0.1 | grep -Fq "NOERROR" || fail $LINENO
t || dig -p${DNS_PORT} A MICROSOFT.COM @127.0.0.1 | grep -Fq "NOERROR" || fail $LINENO

section
t || dig -p${DNS_PORT} AAAA ipv6.google.com @127.0.0.1 | grep -Fq 'locally blocked' || fail
t || dig -p${DNS_PORT} AAAA ipv6.google.com @127.0.0.1 | grep -Fq 'locally blocked' || fail $LINENO

section
t || dig -p${DNS_PORT} invalid. @127.0.0.1 | grep -Fq NXDOMAIN || fail
t || dig -p${DNS_PORT} +dnssec invalid. @127.0.0.1 | grep -Fq 'flags: do;' || fail
t || dig -p${DNS_PORT} PTR 168.192.in-addr.arpa @127.0.0.1 | grep -Fq 'NXDOMAIN' || fail
t || dig -p${DNS_PORT} +dnssec PTR 168.192.in-addr.arpa @127.0.0.1 | grep -Fq 'flags: do;' || fail
t || dig -p${DNS_PORT} invalid. @127.0.0.1 | grep -Fq NXDOMAIN || fail $LINENO
t || dig -p${DNS_PORT} +dnssec invalid. @127.0.0.1 | grep -Fq 'flags: do;' || fail $LINENO
t || dig -p${DNS_PORT} PTR 168.192.in-addr.arpa @127.0.0.1 | grep -Fq 'NXDOMAIN' || fail $LINENO
t || dig -p${DNS_PORT} +dnssec PTR 168.192.in-addr.arpa @127.0.0.1 | grep -Fq 'flags: do;' || fail $LINENO

section
t || dig -p${DNS_PORT} +dnssec darpa.mil @127.0.0.1 2>&1 | grep -Fvq 'RRSIG' || fail
t || dig -p${DNS_PORT} +dnssec www.darpa.mil @127.0.0.1 2>&1 | grep -Fvq 'RRSIG' || fail
t || dig -p${DNS_PORT} A download.windowsupdate.com @127.0.0.1 | grep -Fq "NOERROR" || fail
t || dig -p${DNS_PORT} +dnssec darpa.mil @127.0.0.1 2>&1 | grep -Fvq 'RRSIG' || fail $LINENO
t || dig -p${DNS_PORT} +dnssec www.darpa.mil @127.0.0.1 2>&1 | grep -Fvq 'RRSIG' || fail $LINENO
t || dig -p${DNS_PORT} A download.windowsupdate.com @127.0.0.1 | grep -Fq "NOERROR" || fail $LINENO

section
t || dig -p${DNS_PORT} +short cloakedunregistered.com @127.0.0.1 | grep -Eq '1.1.1.1|1.0.0.1' || fail
t || dig -p${DNS_PORT} +short MX cloakedunregistered.com @127.0.0.1 | grep -Fq 'locally blocked' || fail
t || dig -p${DNS_PORT} +short MX example.com @127.0.0.1 | grep -Fvq 'locally blocked' || fail
t || dig -p${DNS_PORT} NS cloakedunregistered.com @127.0.0.1 | grep -Fiq 'gtld-servers.net' || fail
t || dig -p${DNS_PORT} +short www.cloakedunregistered2.com @127.0.0.1 | grep -Eq '1.1.1.1|1.0.0.1' || fail
t || dig -p${DNS_PORT} +short www.dnscrypt-test @127.0.0.1 | grep -Fq '192.168.100.100' || fail
t || dig -p${DNS_PORT} a.www.dnscrypt-test @127.0.0.1 | grep -Fq 'NXDOMAIN' || fail
t || dig -p${DNS_PORT} +short ptr 101.100.168.192.in-addr.arpa. @127.0.0.1 | grep -Eq 'www.dnscrypt-test.com' || fail
t || dig -p${DNS_PORT} +short ptr 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.2.0.d.f.ip6.arpa. @127.0.0.1 | grep -Eq 'ipv6.dnscrypt-test.com' || fail
t || dig -p${DNS_PORT} +short cloakedunregistered.com @127.0.0.1 | grep -Eq '1.1.1.1|1.0.0.1' || fail $LINENO
t || dig -p${DNS_PORT} +short MX cloakedunregistered.com @127.0.0.1 | grep -Fq 'locally blocked' || fail $LINENO
t || dig -p${DNS_PORT} +short MX example.com @127.0.0.1 | grep -Fvq 'locally blocked' || fail $LINENO
t || dig -p${DNS_PORT} NS cloakedunregistered.com @127.0.0.1 | grep -Fiq 'gtld-servers.net' || fail $LINENO
t || dig -p${DNS_PORT} +short www.cloakedunregistered2.com @127.0.0.1 | grep -Eq '1.1.1.1|1.0.0.1' || fail $LINENO
t || dig -p${DNS_PORT} +short www.dnscrypt-test @127.0.0.1 | grep -Fq '192.168.100.100' || fail $LINENO
t || dig -p${DNS_PORT} a.www.dnscrypt-test @127.0.0.1 | grep -Fq 'NXDOMAIN' || fail $LINENO
t || dig -p${DNS_PORT} +short ptr 101.100.168.192.in-addr.arpa. @127.0.0.1 | grep -Eq 'www.dnscrypt-test.com' || fail $LINENO
t || dig -p${DNS_PORT} +short ptr 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.2.0.d.f.ip6.arpa. @127.0.0.1 | grep -Eq 'ipv6.dnscrypt-test.com' || fail $LINENO

section
t || dig -p${DNS_PORT} telemetry.example @127.0.0.1 | grep -Fq 'locally blocked' || fail
t || dig -p${DNS_PORT} telemetry.example @127.0.0.1 | grep -Fq 'locally blocked' || fail $LINENO

section
t || dig -p${DNS_PORT} dns.google @127.0.0.1 | grep -Fq 'locally blocked' || fail
t || dig -p${DNS_PORT} dns.google @127.0.0.1 | grep -Fq 'locally blocked' || fail $LINENO

section
t || dig -p${DNS_PORT} tracker.xdebian.org @127.0.0.1 | grep -Fq 'locally blocked' || fail
t || dig -p${DNS_PORT} tracker.debian.org @127.0.0.1 | grep -Fqv 'locally blocked' || fail
t || dig -p${DNS_PORT} tracker.xdebian.org @127.0.0.1 | grep -Fq 'locally blocked' || fail $LINENO
t || dig -p${DNS_PORT} tracker.debian.org @127.0.0.1 | grep -Fqv 'locally blocked' || fail $LINENO

section
t || curl --insecure -siL https://127.0.0.1:${HTTP_PORT}/ | grep -Fq 'HTTP/2 404' || fail
t || curl --insecure -sL https://127.0.0.1:${HTTP_PORT}/dns-query | grep -Fq 'dnscrypt-proxy local DoH server' || fail
t || curl --insecure -siL https://127.0.0.1:${HTTP_PORT}/ | grep -Fq 'HTTP/2 404' || fail $LINENO
t || curl --insecure -sL https://127.0.0.1:${HTTP_PORT}/dns-query | grep -Fq 'dnscrypt-proxy local DoH server' || fail $LINENO
t ||
echo yv4BAAABAAAAAAABAAACAAEAACkQAAAAgAAAAA== | base64 -d |
curl -H'Content-Type: application/dns-message' -H'Accept: application/dns-message' --data-binary @- -D - --insecure https://127.0.0.1:${HTTP_PORT}/dns-query 2>/dev/null |
grep -Fq application/dns-message || fail
grep -Fq application/dns-message || fail $LINENO

kill $(cat /tmp/dnscrypt-proxy.pidfile)

sleep 5

section
t || grep -Fq 'telemetry.example' blocked-names.log || fail
t || grep -Fq 'telemetry.*' blocked-names.log || fail
t || grep -Fq 'tracker.xdebian.org' blocked-names.log || fail
t || grep -Fq 'tracker.*' blocked-names.log || fail
t || grep -Fq 'telemetry.example' blocked-names.log || fail $LINENO
t || grep -Fq 'telemetry.*' blocked-names.log || fail $LINENO
t || grep -Fq 'tracker.xdebian.org' blocked-names.log || fail $LINENO
t || grep -Fq 'tracker.*' blocked-names.log || fail $LINENO

section
t || grep -Fq 'dns.google' blocked-ips.log || fail
t || grep -Fq '8.8.8.8' blocked-ips.log || fail
t || grep -Fq 'dns.google' blocked-ips.log || fail $LINENO
t || grep -Fq '8.8.8.8' blocked-ips.log || fail $LINENO

section
t || grep -Fq 'a.www.dnscrypt-test' nx.log || fail
t || grep -Fq 'a.www.dnscrypt-test' nx.log || fail $LINENO

section
t || grep -Fq 'a.www.dnscrypt-test' nx.log || fail
t || grep -Fq 'a.www.dnscrypt-test' nx.log || fail $LINENO

section
t || grep -Eq 'microsoft.com.*PASS.*[^-]$' query.log || fail
t || grep -Eq 'microsoft.com.*PASS.*-$' query.log || fail
t || grep -Eq 'ipv6.google.com.*SYNTH' query.log || fail
t || grep -Eq 'invalid.*SYNTH' query.log || fail
t || grep -Eq '168.192.in-addr.arpa.*SYNTH' query.log || fail
t || grep -Eq 'darpa.mil.*FORWARD' query.log || fail
t || grep -Eq 'www.darpa.mil.*FORWARD' query.log || fail
t || grep -Eq 'download.windowsupdate.com.*FORWARD' query.log || fail
t || grep -Eq 'cloakedunregistered.com.*CLOAK' query.log || fail
t || grep -Eq 'www.cloakedunregistered2.com.*CLOAK' query.log || fail
t || grep -Eq 'www.dnscrypt-test.*CLOAK' query.log || fail
t || grep -Eq 'a.www.dnscrypt-test.*NXDOMAIN' query.log || fail
t || grep -Eq 'telemetry.example.*REJECT' query.log || fail
t || grep -Eq 'dns.google.*REJECT' query.log || fail
t || grep -Eq 'tracker.xdebian.org.*REJECT' query.log || fail
t || grep -Eq 'tracker.debian.org.*PASS' query.log || fail
t || grep -Eq '[.].*NS.*PASS' query.log || fail
t || grep -Eq 'microsoft.com.*PASS.*ms.[a-zA-Z]' query.log || fail $LINENO
t || grep -Eq 'microsoft.com.*PASS.*ms.-.' query.log || fail $LINENO
t || grep -Eq 'ipv6.google.com.*SYNTH' query.log || fail $LINENO
t || grep -Eq 'invalid.*SYNTH' query.log || fail $LINENO
t || grep -Eq '168.192.in-addr.arpa.*SYNTH' query.log || fail $LINENO
t || grep -Eq 'darpa.mil.*FORWARD' query.log || fail $LINENO
t || grep -Eq 'www.darpa.mil.*FORWARD' query.log || fail $LINENO
t || grep -Eq 'download.windowsupdate.com.*FORWARD' query.log || fail $LINENO
t || grep -Eq 'cloakedunregistered.com.*CLOAK' query.log || fail $LINENO
t || grep -Eq 'www.cloakedunregistered2.com.*CLOAK' query.log || fail $LINENO
t || grep -Eq 'www.dnscrypt-test.*CLOAK' query.log || fail $LINENO
t || grep -Eq 'a.www.dnscrypt-test.*NXDOMAIN' query.log || fail $LINENO
t || grep -Eq 'telemetry.example.*REJECT' query.log || fail $LINENO
t || grep -Eq 'dns.google.*REJECT' query.log || fail $LINENO
t || grep -Eq 'tracker.xdebian.org.*REJECT' query.log || fail $LINENO
t || grep -Eq 'tracker.debian.org.*PASS' query.log || fail $LINENO
t || grep -Eq '[.].*NS.*PASS' query.log || fail $LINENO

section
t || grep -Fq 'tracker.debian.org' allowed-names.log || fail
t || grep -Fq '*.tracker.debian' allowed-names.log || fail
t || grep -Fq 'tracker.debian.org' allowed-names.log || fail $LINENO
t || grep -Fq '*.tracker.debian' allowed-names.log || fail $LINENO

section
../dnscrypt-proxy/dnscrypt-proxy -loglevel 3 -config test3-dnscrypt-proxy.toml -pidfile /tmp/dnscrypt-proxy.pidfile &
sleep 5

section
t || dig -p${DNS_PORT} A microsoft.com @127.0.0.1 | grep -Fq "NOERROR" || fail
t || dig -p${DNS_PORT} A MICROSOFT.COM @127.0.0.1 | grep -Fq "NOERROR" || fail
t || dig -p${DNS_PORT} A microsoft.com @127.0.0.1 | grep -Fq "NOERROR" || fail $LINENO
t || dig -p${DNS_PORT} A MICROSOFT.COM @127.0.0.1 | grep -Fq "NOERROR" || fail $LINENO

kill $(cat /tmp/dnscrypt-proxy.pidfile)
sleep 5
Expand All @@ -154,8 +154,8 @@ section
sleep 5

section
t || dig -p${DNS_PORT} A microsoft.com @127.0.0.1 | grep -Fq "NOERROR" || fail
t || dig -p${DNS_PORT} A cloudflare.com @127.0.0.1 | grep -Fq "NOERROR" || fail
t || dig -p${DNS_PORT} A microsoft.com @127.0.0.1 | grep -Fq "NOERROR" || fail $LINENO
t || dig -p${DNS_PORT} A cloudflare.com @127.0.0.1 | grep -Fq "NOERROR" || fail $LINENO

kill $(cat /tmp/odoh-proxied.pidfile)
sleep 5
Expand Down
62 changes: 27 additions & 35 deletions .github/ISSUE_TEMPLATE/bugs.md
Original file line number Diff line number Diff line change
@@ -1,65 +1,57 @@
---
name: "\U0001F41E Issues"
about: Bug reports
name: "Bug Report"
about: Report a bug you've encountered
title: ''
labels: ''
assignees: ''

---

THE TRACKER IS DEDICATED TO KEEPING TRACK OF *BUGS*,
preferably after they have been already discussed and confirmed to be reproducible.
Thanks for taking the time to report a bug! Before filing, please note:

FOR ASSISTANCE, PLEASE CLOSE THIS FORM AND USE THE DISCUSSIONS SECTION INSTEAD:
https://github.com/DNSCrypt/dnscrypt-proxy/discussions/categories/q-a
**Need help or have a question?** The issue tracker is for confirmed, reproducible bugs only. For installation help, configuration help, troubleshooting, or general questions, please read the [documentation](https://dnscrypt.info/doc) first. If you still need assistance, use our [Q&A Discussions](https://github.com/DNSCrypt/dnscrypt-proxy/discussions/categories/q-a) instead - you'll likely get a faster response there.

~~~
---

Reported bugs must reproducible in the context described in the "Context" section.
### Before submitting

Installation and configuration issues are not bugs, but individual assistance request.
Please make sure:

Context: the LATEST version of `dnscrypt-proxy` (precompiled binaries downloaded from this repository) is correctly installed and configured on your system, but something doesn't seem to produce the expected result.
- You've read the [documentation](https://dnscrypt.info/doc) and this is not answered there already
- You're running the **latest version** of `dnscrypt-proxy` (precompiled binaries from this repository)
- The software is correctly installed and configured
- You can reliably reproduce the issue

If the bug is not trivial to reproduce on any platform, please include ALL the steps required to reliably duplicate it, on a vanilla, generic install of macOS, Windows, OpenBSD or Ubuntu Linux system, in their most current version.
If the bug requires specific steps to reproduce, please include detailed instructions that would work on a fresh install of macOS, Windows, OpenBSD, or Ubuntu Linux.

If you don't have any clear understanding of the issue or can't enumerate the steps to reproduce it, open a discussion instead:
https://github.com/DNSCrypt/dnscrypt-proxy/discussions
Not sure if it's a bug? Start a [discussion](https://github.com/DNSCrypt/dnscrypt-proxy/discussions) first - we're happy to help figure it out.

---

## Output of the following commands:
## Diagnostic output

./dnscrypt-proxy -version
Please run these commands and paste the output:

```
./dnscrypt-proxy -version
./dnscrypt-proxy -check

./dnscrypt-proxy -resolve example.com
```


- [ ] I read the documentation and this is not answered there
- [ ] Initially raised as discussion #...

## What's happening?

## When does this occur?

## *What* is affected by this bug?



## *When* does this occur?



## *Where* does it happen?



## *How* do we replicate the issue?
<!-- Please list all the steps required to reliably replicate it, starting from a newly installed operating system -->


## Where does it happen?

## Expected behavior (i.e. solution)
## How do we replicate the issue?

<!-- Starting from a fresh OS install, what steps trigger this bug? -->

## Expected behavior

## Other Comments
## Additional context

33 changes: 26 additions & 7 deletions .github/ISSUE_TEMPLATE/suggestions.md
Original file line number Diff line number Diff line change
@@ -1,22 +1,41 @@
---
name: "🙋🏽 Planned changes"
about: List of planned changes
name: "Feature Request"
about: Suggest an idea or improvement
title: ''
labels: ''
assignees: ''

---

The starting point should be a discussion.
Got an idea for improving dnscrypt-proxy? We'd love to hear it!

https://github.com/DNSCrypt/dnscrypt-proxy/discussions/
Please read the [documentation](https://dnscrypt.info/doc) first in case the behavior already exists or is already documented.

Suggestions may be raised as an "Ideas" discussion.
### Start with a discussion

We can then determine if the discussion needs to be escalated into a "planned change" or not.
The best way to propose a new feature is to start in [Discussions](https://github.com/DNSCrypt/dnscrypt-proxy/discussions/) under the "Ideas" category. This lets us:

This will help us ensure that the issue tracker properly reflects ongoing or needed work on the project.
- Talk through the idea together
- Get feedback from other users
- Figure out the best approach

Once we've discussed and agreed on a direction, we can convert it into a tracked issue here.

This helps keep the issue tracker focused on work that's ready to be done.

---

- [ ] Initially raised as discussion #...

## Summary

<!-- Brief description of your idea -->

## Why would this be useful?

<!-- What problem does it solve? Who would benefit? -->

## Possible implementation

<!-- Optional: any thoughts on how this could work? -->

16 changes: 10 additions & 6 deletions .github/workflows/autocloser.yml
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
name: Autocloser
on: [issues]

permissions:
issues: write

jobs:
autoclose:
runs-on: ubuntu-latest
steps:
- name: Autoclose issues that did not follow issue template
uses: roots/issue-closer@v1.2
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
issue-close-message: "This issue was automatically closed because it did not follow the issue template. We use the issue tracker exclusively for bug reports and feature additions that have been previously discussed. However, this issue appears to be a support request. Please use the discussion forums for support requests."
issue-pattern: ".*(do we replicate the issue|Expected behavior|raised as discussion|# Impact).*"
- name: Autoclose issues that did not follow issue template
uses: roots/issue-closer@fec85f2a845cd6cf33eda6e6a4c93026e71f86d1 # v1.2
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
issue-close-message: "This issue was automatically closed because it did not follow the issue template. We use the issue tracker exclusively for bug reports and feature additions that have been previously discussed. However, this issue appears to be a support request. Please use the discussion forums for support requests."
issue-pattern: ".*(do we replicate the issue|Expected behavior|raised as discussion|# Impact).*"
Loading