Compare commits
13 Commits
| Author | SHA256 | Date | |
|---|---|---|---|
|
|
c7cbd12e87 | ||
|
|
8a3a111eef | ||
| 1bc3a557e0 | |||
| 2714feb82c | |||
| 5e4aef68f2 | |||
| efaec3706a | |||
| 6bc5f49e37 | |||
| c0efb27bee | |||
| 75d530f522 | |||
| 923b984411 | |||
| 0722991231 | |||
| 65ed0e2bd8 | |||
| 3b0f5482c2 |
BIN
dnscrypt-proxy-2.1.15.tar.gz
LFS
Normal file
BIN
dnscrypt-proxy-2.1.15.tar.gz
LFS
Normal file
Binary file not shown.
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:044c4db9a3c7bdcf886ff8f83c4b137d2fd37a65477a92bfe86bf69587ea7355
|
|
||||||
size 4065395
|
|
||||||
@@ -1,3 +1,121 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Dec 23 12:00:00 UTC 2025 - cunix@mail.de
|
||||||
|
|
||||||
|
- Update to version 2.1.15
|
||||||
|
* Proxy hostnames (when using SOCKS/HTTP proxies) are now pre-resolved using
|
||||||
|
bootstrap resolvers if they are domain names
|
||||||
|
* Dynamically reduces timeouts as the connection limit is approached
|
||||||
|
* Fixed double-bracketing of IPv6 addresses in DoH stamps
|
||||||
|
* Cache statistics are now more accurate by only counting queries that
|
||||||
|
actually participate in caching
|
||||||
|
* Multiple IP addresses per hostname are now cached instead of randomly
|
||||||
|
selecting one
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Sep 4 12:00:00 UTC 2025 - cunix@mail.de
|
||||||
|
|
||||||
|
- Update to version 2.1.14
|
||||||
|
* Added support for client IP address encryption in logs
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Sun Aug 24 12:00:00 UTC 2025 - cunix@mail.de
|
||||||
|
|
||||||
|
- Update to version 2.1.13
|
||||||
|
* Manual configuration reload via SIGHUP is now supported regardless of the
|
||||||
|
hot-reload setting, providing more flexibility for system administrators
|
||||||
|
* Fixed a regression in IP prefix matching for allow/block lists that could
|
||||||
|
cause incorrect filtering behavior
|
||||||
|
* the generate-domains-blocklist script now handles poor network conditions
|
||||||
|
more gracefully
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu May 29 12:00:00 UTC 2025 - cunix@mail.de
|
||||||
|
|
||||||
|
- Update to version 2.1.12
|
||||||
|
* weighted Power of Two (WP2) load balancing strategy has been
|
||||||
|
implemented as the default
|
||||||
|
* optional Prometheus metrics endpoint has been added for monitoring
|
||||||
|
* additional records in queries are now properly removed before forwarding
|
||||||
|
* simple view UI has been removed
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed May 21 12:00:00 UTC 2025 - cunix@mail.de
|
||||||
|
|
||||||
|
- Update to version 2.1.11
|
||||||
|
* web-based monitoring user interface added
|
||||||
|
* configuration files hot-reloading implemented
|
||||||
|
* HTTP/3 probing
|
||||||
|
* added parallel downloading of block lists
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Mar 28 03:02:02 UTC 2025 - Gerald Chen <gerald_chen@foxmail.com>
|
||||||
|
|
||||||
|
- Updated to version 2.1.8
|
||||||
|
* Dependencies have been updated, notably the QUIC implementation, which could
|
||||||
|
be vulnerable to denial-of-service attacks.
|
||||||
|
* In forwarding rules, the target can now optionally include a non-standard
|
||||||
|
DNS port number. The port number is also now optional when using IPv6.
|
||||||
|
* An annoying log message related to permissions on Windows has been
|
||||||
|
suppressed.
|
||||||
|
* Resolver IP addresses can now be refreshed more frequently. Additionally,
|
||||||
|
jitter has been introduced to prevent all resolvers from being refreshed
|
||||||
|
simultaneously. Further changes have been implemented to mitigate issues
|
||||||
|
arising from multiple concurrent attempts to resolve a resolver's IP
|
||||||
|
address.
|
||||||
|
* An empty value for "tls_cipher_suite" is now equivalent to leaving the
|
||||||
|
property undefined. Previously, it disabled all TLS cipher suites, which had
|
||||||
|
little practical justification.
|
||||||
|
* In forwarding rules, an optional `*.` prefix is now accepted.
|
||||||
|
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Sat Jan 11 18:00:00 UTC 2025 - cunix@mail.de
|
||||||
|
|
||||||
|
- Update to version 2.1.7
|
||||||
|
* Reintroduces support for XSalsa20 enryption in DNSCrypt,
|
||||||
|
which was removed in 2.1.6. Unfortunately, a bunch of servers still
|
||||||
|
only support that encryption system.
|
||||||
|
* Added check for lying resolvers was added for DNSCrypt, similar to
|
||||||
|
the one that was already present for DoH and ODoH.
|
||||||
|
|
||||||
|
- Minimum golang version now at 1.23
|
||||||
|
|
||||||
|
- With vendored quic-go at 0.48.2 since update to 2.1.6
|
||||||
|
boo#1222473 and boo#1235156 should be fixed.
|
||||||
|
|
||||||
|
- Trimmed long lines in last changelog entry
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Sat Jan 11 02:44:22 UTC 2025 - Gerald Chen <gerald_chen@foxmail.com>
|
||||||
|
- Update to version 2.1.6
|
||||||
|
* Forwarding: in the list of servers for a zone, the `$BOOTSTRAP`
|
||||||
|
keyword can be included as a shortcut to forward to the bootstrap
|
||||||
|
servers. And the `$DHCP` keyword can be included to forward to the
|
||||||
|
DNS resolvers provided by the local DHCP server. Based on work by YX
|
||||||
|
Hao, thanks! DHCP forwarding should be considered experimental and my
|
||||||
|
not work on all operating systems. A rule for a zone can mix and
|
||||||
|
match multiple forwarder types, such as `10.0.0.1,10.0.0.254,$DHCP,
|
||||||
|
192.168.1.1,$BOOTSTRAP`. Note that this is not implemented for
|
||||||
|
captive portals yet.
|
||||||
|
* Lying resolvers are now skipped, instead of just printing an error.
|
||||||
|
This doesn't apply to captive portal and forwarding entries, which
|
||||||
|
are the only reasonable use case for lying resolvers.
|
||||||
|
* Support for XSalsa20 in DNSCrypt has been removed. This was not
|
||||||
|
documented, and was supserseded by XChaCha20 in 2016.
|
||||||
|
* Source files are now fetched with compression.
|
||||||
|
* DNS64: compatibility has been improved.
|
||||||
|
* Forwarding: the root domain (`.`) can now be forwarded.
|
||||||
|
* The ARC caching algorithm has been replaced by the SIEVE algorithm.
|
||||||
|
* Properties of multiple servers are now updated simultaneously. The
|
||||||
|
concurrency level can be adjusted with the new
|
||||||
|
`cert_refresh_concurrency` setting. Contributed by YX Hao.
|
||||||
|
* MSI packages for DNSCrypt can now easily be built.
|
||||||
|
* New command-line flag: `-include-relays` to include relays in `-list`
|
||||||
|
and `-list-all`.
|
||||||
|
* Support for DNS extended error codes has been added.
|
||||||
|
* Documentation updates, bug fixes, dependency updates.
|
||||||
|
- Drop quic-go.patch, for dnscrypt-proxy already pulls fixed quic-go v0.48.2
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Sun Apr 21 12:00:00 UTC 2024 - cunix@mail.de
|
Sun Apr 21 12:00:00 UTC 2024 - cunix@mail.de
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#
|
#
|
||||||
# spec file for package dnscrypt-proxy
|
# spec file for package dnscrypt-proxy
|
||||||
#
|
#
|
||||||
# Copyright (c) 2021 SUSE LLC
|
# Copyright (c) 2025 SUSE LLC
|
||||||
#
|
#
|
||||||
# All modifications and additions to the file contributed by third parties
|
# All modifications and additions to the file contributed by third parties
|
||||||
# remain the property of their copyright owners, unless otherwise agreed
|
# remain the property of their copyright owners, unless otherwise agreed
|
||||||
@@ -25,7 +25,7 @@
|
|||||||
%define services %{name}.socket %{name}.service %{name}-resolvconf.service
|
%define services %{name}.socket %{name}.service %{name}-resolvconf.service
|
||||||
|
|
||||||
Name: dnscrypt-proxy
|
Name: dnscrypt-proxy
|
||||||
Version: 2.1.5
|
Version: 2.1.15
|
||||||
Release: 0
|
Release: 0
|
||||||
Summary: A tool for securing communications between a client and a DNS resolver
|
Summary: A tool for securing communications between a client and a DNS resolver
|
||||||
License: ISC
|
License: ISC
|
||||||
@@ -43,15 +43,13 @@ Source5: README.openSUSE
|
|||||||
Source6: %{name}.socket.conf
|
Source6: %{name}.socket.conf
|
||||||
# dnscrypt user configuration
|
# dnscrypt user configuration
|
||||||
Source7: %{user_group}-user.conf
|
Source7: %{user_group}-user.conf
|
||||||
# can be dropped in next release with quic-go v0.42 included (boo#1222473)
|
|
||||||
Patch0: quic-go.patch
|
|
||||||
BuildRequires: golang-packaging
|
BuildRequires: golang-packaging
|
||||||
BuildRequires: pkgconfig
|
BuildRequires: pkgconfig
|
||||||
BuildRequires: systemd-rpm-macros
|
BuildRequires: systemd-rpm-macros
|
||||||
BuildRequires: sysuser-tools
|
BuildRequires: sysuser-tools
|
||||||
BuildRequires: golang(API) >= 1.20
|
|
||||||
BuildRequires: pkgconfig(libsystemd)
|
|
||||||
BuildRequires: vendored_licenses_packager
|
BuildRequires: vendored_licenses_packager
|
||||||
|
BuildRequires: golang(API) >= 1.24
|
||||||
|
BuildRequires: pkgconfig(libsystemd)
|
||||||
%sysusers_requires
|
%sysusers_requires
|
||||||
%{?systemd_requires}
|
%{?systemd_requires}
|
||||||
# For systemd pidfile solution.
|
# For systemd pidfile solution.
|
||||||
|
|||||||
@@ -2,8 +2,7 @@
|
|||||||
s/listen_addresses = \['127.0.0.1:53']/#listen_addresses = ['127.0.0.1:53']\nlisten_addresses = []/
|
s/listen_addresses = \['127.0.0.1:53']/#listen_addresses = ['127.0.0.1:53']\nlisten_addresses = []/
|
||||||
|
|
||||||
# point to shipped distro specific documentation
|
# point to shipped distro specific documentation
|
||||||
12c\\n##********************************************************************##\n## ##
|
12c\\n##********************************************************************##\n## ##\n## README.openSUSE in directory ##\n## \/usr\/share\/doc\/packages\/dnscrypt-proxy ##\n## might be useful to read. ##\n## ##\n##********************************************************************##\n\n
|
||||||
13c\## README.openSUSE in directory ##\n## \/usr\/share\/doc\/packages\/dnscrypt-proxy ##\n## might be useful to read. ##\n## ##\n##********************************************************************##
|
|
||||||
|
|
||||||
# absolute paths by default
|
# absolute paths by default
|
||||||
s/# log_file = 'dnscrypt-proxy.log'/# log_file = '\/var\/log\/dnscrypt-proxy\/dnscrypt-proxy.log'/
|
s/# log_file = 'dnscrypt-proxy.log'/# log_file = '\/var\/log\/dnscrypt-proxy\/dnscrypt-proxy.log'/
|
||||||
@@ -22,12 +21,13 @@ s/# allowed_names_file = 'allowed-names.txt'/# allowed_names_file = '\/etc\/dnsc
|
|||||||
s/# log_file = 'allowed-names.log'/# log_file = '\/var\/log\/dnscrypt-proxy\/allowed-names.log'/
|
s/# log_file = 'allowed-names.log'/# log_file = '\/var\/log\/dnscrypt-proxy\/allowed-names.log'/
|
||||||
s/# allowed_ips_file = 'allowed-ips.txt'/# allowed_ips_file = '\/etc\/dnscrypt-proxy\/allowed-ips.txt'/
|
s/# allowed_ips_file = 'allowed-ips.txt'/# allowed_ips_file = '\/etc\/dnscrypt-proxy\/allowed-ips.txt'/
|
||||||
s/# log_file = 'allowed-ips.log'/# log_file = '\/var\/log\/dnscrypt-proxy\/allowed-ips.log'/
|
s/# log_file = 'allowed-ips.log'/# log_file = '\/var\/log\/dnscrypt-proxy\/allowed-ips.log'/
|
||||||
s/ cache_file = 'public-resolvers.md'/ cache_file = '\/var\/lib\/dnscrypt-proxy\/public-resolvers.md'/
|
s/cache_file = 'public-resolvers.md'/cache_file = '\/var\/lib\/dnscrypt-proxy\/public-resolvers.md'/
|
||||||
s/ cache_file = 'relays.md'/ cache_file = '\/var\/lib\/dnscrypt-proxy\/relays.md'/
|
s/cache_file = 'relays.md'/cache_file = '\/var\/lib\/dnscrypt-proxy\/relays.md'/
|
||||||
s/ # cache_file = 'odoh-servers.md'/ # cache_file = '\/var\/lib\/dnscrypt-proxy\/odoh-servers.md'/
|
s/# cache_file = 'odoh-servers.md'/# cache_file = '\/var\/lib\/dnscrypt-proxy\/odoh-servers.md'/
|
||||||
s/ # cache_file = 'odoh-relays.md'/ # cache_file = '\/var\/lib\/dnscrypt-proxy\/odoh-relays.md'/
|
s/# cache_file = 'odoh-relays.md'/# cache_file = '\/var\/lib\/dnscrypt-proxy\/odoh-relays.md'/
|
||||||
s/ # cache_file = 'quad9-resolvers.md'/ # cache_file = '\/var\/lib\/dnscrypt-proxy\/quad9-resolvers.md'/
|
s/# cache_file = 'quad9-resolvers.md'/# cache_file = '\/var\/lib\/dnscrypt-proxy\/quad9-resolvers.md'/
|
||||||
s/ # cache_file = 'parental-control.md'/ # cache_file = '\/var\/lib\/dnscrypt-proxy\/parental-control.md'/
|
s/# cache_file = 'parental-control.md'/# cache_file = '\/var\/lib\/dnscrypt-proxy\/parental-control.md'/
|
||||||
|
s/# cache_file = "dnscry.pt-resolvers.md"/# cache_file = '\/var\/lib\/dnscrypt-proxy\/dnscry.pt-resolvers.md'/
|
||||||
|
|
||||||
# package directory instead of source code directory
|
# package directory instead of source code directory
|
||||||
s/## `utils\/generate-domains-blocklists` directory of the dnscrypt-proxy source code./## '\/usr\/share\/dnscrypt-proxy\/generate-domains-blocklists' directory./
|
s/## `utils\/generate-domains-blocklists` directory of the dnscrypt-proxy source code./## '\/usr\/share\/dnscrypt-proxy\/generate-domains-blocklists' directory./
|
||||||
|
|||||||
117
quic-go.patch
117
quic-go.patch
@@ -1,117 +0,0 @@
|
|||||||
From: cunix@mail.de
|
|
||||||
Date: 2024-04-21 12:00:00
|
|
||||||
Subject: Memory Exhaustion Attack against QUIC's Connection ID Mechanism
|
|
||||||
References: https://github.com/quic-go/quic-go/commit/4a99b816ae3ab03ae5449d15aac45147c85ed47a
|
|
||||||
https://github.com/quic-go/quic-go/security/advisories/GHSA-c33x-xqrf-c478
|
|
||||||
https://bugzilla.suse.com/show_bug.cgi?id=1222473
|
|
||||||
|
|
||||||
This tries to backport commit
|
|
||||||
https://github.com/quic-go/quic-go/commit/4a99b816ae3ab03ae5449d15aac45147c85ed47a.patch
|
|
||||||
from Marten Seemann <martenseemann@gmail.com>
|
|
||||||
to the vendored older version of quic-go.
|
|
||||||
|
|
||||||
dnscrypt-proxy upstream already vendors version 0.42 of quic-go with hack
|
|
||||||
included, but is not released.
|
|
||||||
|
|
||||||
Patch should be dropped with next release of dnscrypt-proxy.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
diff -r -U 5 a/vendor/github.com/quic-go/quic-go/connection.go b/vendor/github.com/quic-go/quic-go/connection.go
|
|
||||||
--- a/vendor/github.com/quic-go/quic-go/connection.go
|
|
||||||
+++ b/vendor/github.com/quic-go/quic-go/connection.go
|
|
||||||
@@ -516,11 +516,14 @@
|
|
||||||
|
|
||||||
var sendQueueAvailable <-chan struct{}
|
|
||||||
|
|
||||||
runLoop:
|
|
||||||
for {
|
|
||||||
- // Close immediately if requested
|
|
||||||
+ if s.framer.QueuedTooManyControlFrames() {
|
|
||||||
+ s.closeLocal(&qerr.TransportError{ErrorCode: InternalError})
|
|
||||||
+ }
|
|
||||||
+ // Close immediately if requested
|
|
||||||
select {
|
|
||||||
case closeErr = <-s.closeChan:
|
|
||||||
break runLoop
|
|
||||||
default:
|
|
||||||
}
|
|
||||||
diff -r -U 5 a/vendor/github.com/quic-go/quic-go/framer.go b/vendor/github.com/quic-go/quic-go/framer.go
|
|
||||||
--- a/vendor/github.com/quic-go/quic-go/framer.go
|
|
||||||
+++ b/vendor/github.com/quic-go/quic-go/framer.go
|
|
||||||
@@ -19,22 +19,32 @@
|
|
||||||
|
|
||||||
AddActiveStream(protocol.StreamID)
|
|
||||||
AppendStreamFrames([]ackhandler.StreamFrame, protocol.ByteCount, protocol.VersionNumber) ([]ackhandler.StreamFrame, protocol.ByteCount)
|
|
||||||
|
|
||||||
Handle0RTTRejection() error
|
|
||||||
+
|
|
||||||
+ // QueuedTooManyControlFrames says if the control frame queue exceeded its maximum queue length.
|
|
||||||
+ // This is a hack.
|
|
||||||
+ // It is easier to implement than propagating an error return value in QueueControlFrame.
|
|
||||||
+ // The correct solution would be to queue frames with their respective structs.
|
|
||||||
+ // See https://github.com/quic-go/quic-go/issues/4271 for the queueing of stream-related control frames.
|
|
||||||
+ QueuedTooManyControlFrames() bool
|
|
||||||
}
|
|
||||||
|
|
||||||
+const maxControlFrames = 16 << 10
|
|
||||||
+
|
|
||||||
type framerI struct {
|
|
||||||
mutex sync.Mutex
|
|
||||||
|
|
||||||
streamGetter streamGetter
|
|
||||||
|
|
||||||
activeStreams map[protocol.StreamID]struct{}
|
|
||||||
streamQueue ringbuffer.RingBuffer[protocol.StreamID]
|
|
||||||
|
|
||||||
controlFrameMutex sync.Mutex
|
|
||||||
controlFrames []wire.Frame
|
|
||||||
+ queuedTooManyControlFrames bool
|
|
||||||
}
|
|
||||||
|
|
||||||
var _ framer = &framerI{}
|
|
||||||
|
|
||||||
func newFramer(streamGetter streamGetter) framer {
|
|
||||||
@@ -56,11 +66,24 @@
|
|
||||||
f.controlFrameMutex.Unlock()
|
|
||||||
return hasData
|
|
||||||
}
|
|
||||||
|
|
||||||
func (f *framerI) QueueControlFrame(frame wire.Frame) {
|
|
||||||
+ var returnearly bool
|
|
||||||
f.controlFrameMutex.Lock()
|
|
||||||
+ // This is a hack.
|
|
||||||
+ if len(f.controlFrames) >= maxControlFrames {
|
|
||||||
+ returnearly = true
|
|
||||||
+ }
|
|
||||||
+ f.controlFrameMutex.Unlock()
|
|
||||||
+ if returnearly {
|
|
||||||
+ f.mutex.Lock()
|
|
||||||
+ f.queuedTooManyControlFrames = true
|
|
||||||
+ f.mutex.Unlock()
|
|
||||||
+ return
|
|
||||||
+ }
|
|
||||||
+ f.controlFrameMutex.Lock()
|
|
||||||
f.controlFrames = append(f.controlFrames, frame)
|
|
||||||
f.controlFrameMutex.Unlock()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (f *framerI) AppendControlFrames(frames []ackhandler.Frame, maxLen protocol.ByteCount, v protocol.VersionNumber) ([]ackhandler.Frame, protocol.ByteCount) {
|
|
||||||
@@ -78,10 +101,17 @@
|
|
||||||
}
|
|
||||||
f.controlFrameMutex.Unlock()
|
|
||||||
return frames, length
|
|
||||||
}
|
|
||||||
|
|
||||||
+func (f *framerI) QueuedTooManyControlFrames() bool {
|
|
||||||
+ f.mutex.Lock()
|
|
||||||
+ toomany := f.queuedTooManyControlFrames
|
|
||||||
+ f.mutex.Unlock()
|
|
||||||
+ return toomany
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
func (f *framerI) AddActiveStream(id protocol.StreamID) {
|
|
||||||
f.mutex.Lock()
|
|
||||||
if _, ok := f.activeStreams[id]; !ok {
|
|
||||||
f.streamQueue.PushBack(id)
|
|
||||||
f.activeStreams[id] = struct{}{}
|
|
||||||
Reference in New Issue
Block a user