Refactored DNS provider data structures
This commit is contained in:
@@ -1,6 +1,8 @@
|
|||||||
package constants
|
package constants
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"net"
|
||||||
|
|
||||||
"github.com/qdm12/private-internet-access-docker/internal/models"
|
"github.com/qdm12/private-internet-access-docker/internal/models"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -21,28 +23,46 @@ const (
|
|||||||
LibreDNS models.DNSProvider = "libredns"
|
LibreDNS models.DNSProvider = "libredns"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
// DNSProviderMapping returns a constant mapping of dns provider name
|
||||||
CloudflareAddress1 models.DNSForwardAddress = "1.1.1.1@853#cloudflare-dns.com"
|
// to their data such as IP addresses or TLS host name.
|
||||||
CloudflareAddress2 models.DNSForwardAddress = "1.0.0.1@853#cloudflare-dns.com"
|
func DNSProviderMapping() map[models.DNSProvider]models.DNSProviderData {
|
||||||
GoogleAddress1 models.DNSForwardAddress = "8.8.8.8@853#dns.google"
|
return map[models.DNSProvider]models.DNSProviderData{
|
||||||
GoogleAddress2 models.DNSForwardAddress = "8.8.4.4@853#dns.google"
|
Cloudflare: models.DNSProviderData{
|
||||||
Quad9Address1 models.DNSForwardAddress = "9.9.9.9@853#dns.quad9.net"
|
IPs: []net.IP{{1, 1, 1, 1}, {1, 0, 0, 1}},
|
||||||
Quad9Address2 models.DNSForwardAddress = "149.112.112.112@853#dns.quad9.net"
|
SupportsTLS: true,
|
||||||
QuadrantAddress models.DNSForwardAddress = "12.159.2.159@853#dns-tls.qis.io"
|
Host: models.DNSHost("cloudflare-dns.com"),
|
||||||
CleanBrowsingAddress1 models.DNSForwardAddress = "185.228.168.9@853#security-filter-dns.cleanbrowsing.org"
|
},
|
||||||
CleanBrowsingAddress2 models.DNSForwardAddress = "185.228.169.9@853#security-filter-dns.cleanbrowsing.org"
|
Google: models.DNSProviderData{
|
||||||
SecureDNSAddress models.DNSForwardAddress = "146.185.167.43@853#dot.securedns.eu"
|
IPs: []net.IP{{8, 8, 8, 8}, {8, 8, 4, 4}},
|
||||||
LibreDNSAddress models.DNSForwardAddress = "116.203.115.192@853#dot.libredns.gr"
|
SupportsTLS: true,
|
||||||
)
|
Host: models.DNSHost("dns.google"),
|
||||||
|
},
|
||||||
var DNSAddressesMapping = map[models.DNSProvider][]models.DNSForwardAddress{
|
Quad9: models.DNSProviderData{
|
||||||
Cloudflare: []models.DNSForwardAddress{CloudflareAddress1, CloudflareAddress2},
|
IPs: []net.IP{{9, 9, 9, 9}, {149, 112, 112, 112}},
|
||||||
Google: []models.DNSForwardAddress{GoogleAddress1, GoogleAddress2},
|
SupportsTLS: true,
|
||||||
Quad9: []models.DNSForwardAddress{Quad9Address1, Quad9Address2},
|
Host: models.DNSHost("dns.quad9.net"),
|
||||||
Quadrant: []models.DNSForwardAddress{QuadrantAddress},
|
},
|
||||||
CleanBrowsing: []models.DNSForwardAddress{CleanBrowsingAddress1, CleanBrowsingAddress2},
|
Quadrant: models.DNSProviderData{
|
||||||
SecureDNS: []models.DNSForwardAddress{SecureDNSAddress},
|
IPs: []net.IP{{12, 159, 2, 159}},
|
||||||
LibreDNS: []models.DNSForwardAddress{LibreDNSAddress},
|
SupportsTLS: true,
|
||||||
|
Host: models.DNSHost("dns-tls.qis.io"),
|
||||||
|
},
|
||||||
|
CleanBrowsing: models.DNSProviderData{
|
||||||
|
IPs: []net.IP{{185, 228, 168, 9}, {185, 228, 169, 9}},
|
||||||
|
SupportsTLS: true,
|
||||||
|
Host: models.DNSHost("security-filter-dns.cleanbrowsing.org"),
|
||||||
|
},
|
||||||
|
SecureDNS: models.DNSProviderData{
|
||||||
|
IPs: []net.IP{{146, 185, 167, 43}},
|
||||||
|
SupportsTLS: true,
|
||||||
|
Host: models.DNSHost("dot.securedns.eu"),
|
||||||
|
},
|
||||||
|
LibreDNS: models.DNSProviderData{
|
||||||
|
IPs: []net.IP{{116, 203, 115, 192}},
|
||||||
|
SupportsTLS: true,
|
||||||
|
Host: models.DNSHost("dot.libredns.gr"),
|
||||||
|
},
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Block lists URLs
|
// Block lists URLs
|
||||||
|
|||||||
@@ -108,12 +108,15 @@ func generateUnboundConf(settings settings.DNS, client network.Client, logger lo
|
|||||||
return forwardZoneLines[i] < forwardZoneLines[j]
|
return forwardZoneLines[i] < forwardZoneLines[j]
|
||||||
})
|
})
|
||||||
for _, provider := range settings.Providers {
|
for _, provider := range settings.Providers {
|
||||||
forwardAddresses, ok := constants.DNSAddressesMapping[provider]
|
providerData, ok := constants.DNSProviderMapping()[provider]
|
||||||
if !ok || len(forwardAddresses) == 0 {
|
if !ok {
|
||||||
return nil, warnings, fmt.Errorf("DNS provider %q does not have any matching forward addresses", provider)
|
return nil, warnings, fmt.Errorf("DNS provider %q does not have associated data", provider)
|
||||||
|
} else if !providerData.SupportsTLS {
|
||||||
|
return nil, warnings, fmt.Errorf("DNS provider %q does not support DNS over TLS", provider)
|
||||||
}
|
}
|
||||||
for _, forwardAddress := range forwardAddresses {
|
for _, IP := range providerData.IPs {
|
||||||
forwardZoneLines = append(forwardZoneLines, fmt.Sprintf(" forward-addr: %s", forwardAddress))
|
forwardZoneLines = append(forwardZoneLines,
|
||||||
|
fmt.Sprintf(" forward-addr: %s@853#%s", IP.String(), providerData.Host))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
lines = append(lines, forwardZoneLines...)
|
lines = append(lines, forwardZoneLines...)
|
||||||
|
|||||||
@@ -5,8 +5,8 @@ type (
|
|||||||
VPNDevice string
|
VPNDevice string
|
||||||
// DNSProvider is a DNS over TLS server provider name
|
// DNSProvider is a DNS over TLS server provider name
|
||||||
DNSProvider string
|
DNSProvider string
|
||||||
// DNSForwardAddress is the Unbound formatted forward address
|
// DNSHost is the DNS host to use for TLS validation
|
||||||
DNSForwardAddress string
|
DNSHost string
|
||||||
// PIAEncryption defines the level of encryption for communication with PIA servers
|
// PIAEncryption defines the level of encryption for communication with PIA servers
|
||||||
PIAEncryption string
|
PIAEncryption string
|
||||||
// PIARegion contains the list of regions available for PIA
|
// PIARegion contains the list of regions available for PIA
|
||||||
|
|||||||
10
internal/models/dns.go
Normal file
10
internal/models/dns.go
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
package models
|
||||||
|
|
||||||
|
import "net"
|
||||||
|
|
||||||
|
// DNSProviderData contains information for a DNS provider
|
||||||
|
type DNSProviderData struct {
|
||||||
|
IPs []net.IP
|
||||||
|
SupportsTLS bool
|
||||||
|
Host DNSHost
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user