Skip to content

Commit 320197a

Browse files
committed
Accept relay names in routes, improve documentation
1 parent 535bce3 commit 320197a

4 files changed

Lines changed: 60 additions & 16 deletions

File tree

dnscrypt-proxy/config.go

Lines changed: 30 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -485,9 +485,22 @@ func ConfigLoad(proxy *Proxy, svcFlag *string) error {
485485
os.Exit(0)
486486
}
487487
if proxy.routes != nil && len(*proxy.routes) > 0 {
488+
hasSpecificRoutes := false
488489
for _, server := range proxy.registeredServers {
489490
if via, ok := (*proxy.routes)[server.name]; ok {
490-
dlog.Noticef("Anonymized DNS: routing [%v] via %v", server.name, via)
491+
if server.stamp.Proto != stamps.StampProtoTypeDNSCrypt {
492+
dlog.Errorf("DNS anonymization is only supported with the DNSCrypt protocol - Connections to [%v] cannot be anonymized", server.name)
493+
} else {
494+
dlog.Noticef("Anonymized DNS: routing [%v] via %v", server.name, via)
495+
}
496+
hasSpecificRoutes = true
497+
}
498+
}
499+
if via, ok := (*proxy.routes)["*"]; ok {
500+
if hasSpecificRoutes {
501+
dlog.Noticef("Anonymized DNS: routing everything else via %v", via)
502+
} else {
503+
dlog.Noticef("Anonymized DNS: routing everything via %v", via)
491504
}
492505
}
493506
}
@@ -617,12 +630,14 @@ func (config *Config) loadSource(proxy *Proxy, requiredProps stamps.ServerInform
617630
dlog.Warnf("Error in source [%s]: [%s] -- Continuing with reduced server count [%d]", cfgSourceName, err, len(registeredServers))
618631
}
619632
for _, registeredServer := range registeredServers {
620-
if len(config.ServerNames) > 0 {
621-
if !includesName(config.ServerNames, registeredServer.name) {
633+
if registeredServer.stamp.Proto != stamps.StampProtoTypeDNSCryptRelay {
634+
if len(config.ServerNames) > 0 {
635+
if !includesName(config.ServerNames, registeredServer.name) {
636+
continue
637+
}
638+
} else if registeredServer.stamp.Props&requiredProps != requiredProps {
622639
continue
623640
}
624-
} else if registeredServer.stamp.Props&requiredProps != requiredProps {
625-
continue
626641
}
627642
if includesName(config.DisabledServerNames, registeredServer.name) {
628643
continue
@@ -639,12 +654,17 @@ func (config *Config) loadSource(proxy *Proxy, requiredProps stamps.ServerInform
639654
continue
640655
}
641656
}
642-
if !((config.SourceDNSCrypt && registeredServer.stamp.Proto == stamps.StampProtoTypeDNSCrypt) ||
643-
(config.SourceDoH && registeredServer.stamp.Proto == stamps.StampProtoTypeDoH)) {
644-
continue
657+
if registeredServer.stamp.Proto == stamps.StampProtoTypeDNSCryptRelay {
658+
dlog.Debugf("Adding [%s] to the set of available relays", registeredServer.name)
659+
proxy.registeredRelays = append(proxy.registeredRelays, registeredServer)
660+
} else {
661+
if !((config.SourceDNSCrypt && registeredServer.stamp.Proto == stamps.StampProtoTypeDNSCrypt) ||
662+
(config.SourceDoH && registeredServer.stamp.Proto == stamps.StampProtoTypeDoH)) {
663+
continue
664+
}
665+
dlog.Debugf("Adding [%s] to the set of wanted resolvers", registeredServer.name)
666+
proxy.registeredServers = append(proxy.registeredServers, registeredServer)
645667
}
646-
dlog.Debugf("Adding [%s] to the set of wanted resolvers", registeredServer.name)
647-
proxy.registeredServers = append(proxy.registeredServers, registeredServer)
648668
}
649669
return nil
650670
}

dnscrypt-proxy/example-dnscrypt-proxy.toml

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -561,14 +561,28 @@ cache_neg_max_ttl = 600
561561

562562
[anonymized_dns]
563563

564-
## Define one or more routes, i.e. indirect ways to reach servers.
565-
## A set of possible relay servers is assigned to each DNS resolver.
564+
## Routes are indirect ways to reach DNSCrypt servers.
565+
##
566+
## A route maps a server name ("server_name") to one or more relays that will be
567+
## used to connect to that server.
568+
##
566569
## A relay can be specified as a DNS Stamp (either a relay stamp, or a
567-
## DNSCrypt stamp), an IP:port, a hostname:port, or a server name, if
568-
## the server is in the servers_list.
570+
## DNSCrypt stamp), an IP:port, a hostname:port, or a server name.
571+
##
572+
## The following example routes "comodo-02" via `anon-kama` or `anon-ibksturm`,
573+
## and "quad9-dnscrypt-ip4-nofilter-pri" via the relay whose relay DNS stamp
574+
## is "sdns://gRIxMzcuNzQuMjIzLjIzNDo0NDM".
575+
## These are just example routes. Review the list of available relays from the
576+
## "relays.md` file, and, for each server you want to use, define the relays you
577+
## want connections to go through.
578+
##
579+
## Carefully choose relays and servers so that the are run by different entities.
580+
##
581+
## "server_name" can also be set to "*" to define a default route, but this is not
582+
## recommended. if you do so, keep "server_names" short and distinct from relays.
569583

570584
# routes = [
571-
# { server_name='comodo-02', via=['sdns://gRIxMzcuNzQuMjIzLjIzNDo0NDM'] },
585+
# { server_name='comodo-02', via=['anon-kama', 'anon-ibksturm'] },
572586
# { server_name='quad9-dnscrypt-ip4-nofilter-pri', via=['sdns://gRIxMzcuNzQuMjIzLjIzNDo0NDM'] }
573587
# ]
574588

dnscrypt-proxy/proxy.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ type Proxy struct {
3333
listenAddresses []string
3434
daemonize bool
3535
registeredServers []RegisteredServer
36+
registeredRelays []RegisteredServer
3637
pluginBlockIPv6 bool
3738
cache bool
3839
cacheSize int

dnscrypt-proxy/serversInfo.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,9 @@ func route(proxy *Proxy, name string) (*net.UDPAddr, *net.TCPAddr, error) {
231231
return nil, nil, nil
232232
}
233233
relayNames, ok := (*routes)[name]
234+
if !ok {
235+
relayNames, ok = (*routes)["*"]
236+
}
234237
if !ok {
235238
return nil, nil, nil
236239
}
@@ -250,9 +253,16 @@ func route(proxy *Proxy, name string) (*net.UDPAddr, *net.TCPAddr, error) {
250253
Proto: stamps.StampProtoTypeDNSCryptRelay,
251254
}
252255
} else {
256+
for _, registeredServer := range proxy.registeredRelays {
257+
if registeredServer.name == relayName {
258+
relayCandidateStamp = &registeredServer.stamp
259+
break
260+
}
261+
}
253262
for _, registeredServer := range proxy.registeredServers {
254263
if registeredServer.name == relayName {
255264
relayCandidateStamp = &registeredServer.stamp
265+
break
256266
}
257267
}
258268
}
@@ -285,7 +295,6 @@ func fetchDNSCryptServerInfo(proxy *Proxy, name string, stamp stamps.ServerStamp
285295
}
286296
relayUDPAddr, relayTCPAddr, err := route(proxy, name)
287297
if err != nil {
288-
dlog.Error(err)
289298
return ServerInfo{}, err
290299
}
291300
certInfo, rtt, err := FetchCurrentDNSCryptCert(proxy, &name, proxy.mainProto, stamp.ServerPk, stamp.ServerAddrStr, stamp.ProviderName, isNew, relayUDPAddr, relayTCPAddr)

0 commit comments

Comments
 (0)