Improve resolver and process docs

This commit is contained in:
Daniel 2021-03-10 17:10:15 +01:00
parent f0eb2e260c
commit 8a55b6a30d
4 changed files with 50 additions and 38 deletions

View file

@ -45,27 +45,10 @@ var (
// or the captive portal test IP. The default value should be overridden by the resolver package, // or the captive portal test IP. The default value should be overridden by the resolver package,
// which defines the custom internal domain name to use. // which defines the custom internal domain name to use.
SpecialCaptivePortalDomain = "captiveportal.invalid." SpecialCaptivePortalDomain = "captiveportal.invalid."
)
var ( // ConnectivityDomains holds all connectivity domains. This slice must not be modified.
parsedPortalTestURL *url.URL ConnectivityDomains = []string{
) SpecialCaptivePortalDomain,
func prepOnlineStatus() (err error) {
parsedPortalTestURL, err = url.Parse(PortalTestURL)
return err
}
// IsConnectivityDomain checks whether the given domain (fqdn) is used for any
// connectivity related network connections and should always be resolved using
// the network assigned DNS server.
func IsConnectivityDomain(domain string) bool {
if domain == "" {
return false
}
switch domain {
case SpecialCaptivePortalDomain,
"one.one.one.one.", // Internal DNS Check "one.one.one.one.", // Internal DNS Check
// Windows // Windows
@ -87,6 +70,7 @@ func IsConnectivityDomain(domain string) bool {
"connectivity-check.ubuntu.com.", // Ubuntu "connectivity-check.ubuntu.com.", // Ubuntu
"nmcheck.gnome.org.", // Gnome DE "nmcheck.gnome.org.", // Gnome DE
"network-test.debian.org.", // Debian "network-test.debian.org.", // Debian
"204.pop-os.org", // Pop OS
// There are probably a lot more domains for all the Linux Distro/DE Variants. Please raise issues and/or submit PRs! // There are probably a lot more domains for all the Linux Distro/DE Variants. Please raise issues and/or submit PRs!
// https://github.com/solus-project/budgie-desktop/issues/807 // https://github.com/solus-project/budgie-desktop/issues/807
// https://www.lguruprasad.in/blog/2015/07/21/enabling-captive-portal-detection-in-gnome-3-14-on-debian-jessie/ // https://www.lguruprasad.in/blog/2015/07/21/enabling-captive-portal-detection-in-gnome-3-14-on-debian-jessie/
@ -98,9 +82,29 @@ func IsConnectivityDomain(domain string) bool {
// Other // Other
"neverssl.com.", // Common Community Service "neverssl.com.", // Common Community Service
"detectportal.firefox.com.": // Firefox "detectportal.firefox.com.", // Firefox
}
return true parsedPortalTestURL *url.URL
)
func prepOnlineStatus() (err error) {
parsedPortalTestURL, err = url.Parse(PortalTestURL)
return err
}
// IsConnectivityDomain checks whether the given domain (fqdn) is used for any
// connectivity related network connections and should always be resolved using
// the network assigned DNS server.
func IsConnectivityDomain(domain string) bool {
if domain == "" {
return false
}
for _, connectivityDomain := range ConnectivityDomains {
if domain == connectivityDomain {
return true
}
} }
// Check for captive portal domain. // Check for captive portal domain.

View file

@ -17,7 +17,7 @@ func registerConfiguration() error {
err := config.Register(&config.Option{ err := config.Register(&config.Option{
Name: "Process Detection", Name: "Process Detection",
Key: CfgOptionEnableProcessDetectionKey, Key: CfgOptionEnableProcessDetectionKey,
Description: "This option enables the attribution of network traffic to processes. This should always be enabled, and effectively disables app profiles if disabled.", Description: "This option enables the attribution of network traffic to processes. This should always be enabled, and effectively disables app settings if disabled.",
OptType: config.OptTypeBool, OptType: config.OptTypeBool,
ExpertiseLevel: config.ExpertiseLevelDeveloper, ExpertiseLevel: config.ExpertiseLevelDeveloper,
DefaultValue: true, DefaultValue: true,

View file

@ -5,6 +5,7 @@ import (
"strings" "strings"
"github.com/safing/portbase/config" "github.com/safing/portbase/config"
"github.com/safing/portmaster/netenv"
"github.com/safing/portmaster/status" "github.com/safing/portmaster/status"
) )
@ -138,7 +139,7 @@ The format is: "protocol://ip:port?parameter=value&parameter=value"
}, },
}, },
{ {
Name: "Cloudflare", Name: "Cloudflare (with Malware Filter)",
Action: config.QuickReplace, Action: config.QuickReplace,
Value: []string{ Value: []string{
"dot://1.1.1.2:853?verify=cloudflare-dns.com&name=Cloudflare&blockedif=zeroip", "dot://1.1.1.2:853?verify=cloudflare-dns.com&name=Cloudflare&blockedif=zeroip",
@ -146,6 +147,8 @@ The format is: "protocol://ip:port?parameter=value&parameter=value"
}, },
}, },
}, },
"self:detail:internalSpecialUseDomains": internalSpecialUseDomains,
"self:detail:connectivityDomains": netenv.ConnectivityDomains,
}, },
}) })
if err != nil { if err != nil {
@ -175,16 +178,17 @@ The format is: "protocol://ip:port?parameter=value&parameter=value"
err = config.Register(&config.Option{ err = config.Register(&config.Option{
Name: "Ignore System/Network Servers", Name: "Ignore System/Network Servers",
Key: CfgOptionNoAssignedNameserversKey, Key: CfgOptionNoAssignedNameserversKey,
Description: "Ignore DNS servers configured in your system or network.", Description: "Ignore DNS servers configured in your system or network. This may break domains from your local network.",
OptType: config.OptTypeInt, OptType: config.OptTypeInt,
ExpertiseLevel: config.ExpertiseLevelExpert, ExpertiseLevel: config.ExpertiseLevelExpert,
ReleaseLevel: config.ReleaseLevelStable, ReleaseLevel: config.ReleaseLevelStable,
DefaultValue: status.SecurityLevelsHighAndExtreme, DefaultValue: status.SecurityLevelsHighAndExtreme,
PossibleValues: status.SecurityLevelValues, PossibleValues: status.SecurityLevelValues,
Annotations: config.Annotations{ Annotations: config.Annotations{
config.DisplayOrderAnnotation: cfgOptionNoAssignedNameserversOrder, config.DisplayOrderAnnotation: cfgOptionNoAssignedNameserversOrder,
config.DisplayHintAnnotation: status.DisplayHintSecurityLevel, config.DisplayHintAnnotation: status.DisplayHintSecurityLevel,
config.CategoryAnnotation: "Servers", config.CategoryAnnotation: "Servers",
"self:detail:specialUseDomains": specialUseDomains,
}, },
}) })
if err != nil { if err != nil {
@ -195,16 +199,17 @@ The format is: "protocol://ip:port?parameter=value&parameter=value"
err = config.Register(&config.Option{ err = config.Register(&config.Option{
Name: "Ignore Multicast DNS", Name: "Ignore Multicast DNS",
Key: CfgOptionNoMulticastDNSKey, Key: CfgOptionNoMulticastDNSKey,
Description: "Do not resolve using Multicast DNS. This may break certain Plug and Play devices or services.", Description: "Do not resolve using Multicast DNS. This may break certain Plug and Play devices and services.",
OptType: config.OptTypeInt, OptType: config.OptTypeInt,
ExpertiseLevel: config.ExpertiseLevelExpert, ExpertiseLevel: config.ExpertiseLevelExpert,
ReleaseLevel: config.ReleaseLevelStable, ReleaseLevel: config.ReleaseLevelStable,
DefaultValue: status.SecurityLevelsHighAndExtreme, DefaultValue: status.SecurityLevelsHighAndExtreme,
PossibleValues: status.SecurityLevelValues, PossibleValues: status.SecurityLevelValues,
Annotations: config.Annotations{ Annotations: config.Annotations{
config.DisplayOrderAnnotation: cfgOptionNoMulticastDNSOrder, config.DisplayOrderAnnotation: cfgOptionNoMulticastDNSOrder,
config.DisplayHintAnnotation: status.DisplayHintSecurityLevel, config.DisplayHintAnnotation: status.DisplayHintSecurityLevel,
config.CategoryAnnotation: "Resolving", config.CategoryAnnotation: "Resolving",
"self:detail:multicastDomains": multicastDomains,
}, },
}) })
if err != nil { if err != nil {
@ -236,7 +241,7 @@ The format is: "protocol://ip:port?parameter=value&parameter=value"
Name: "Block Unofficial TLDs", Name: "Block Unofficial TLDs",
Key: CfgOptionDontResolveSpecialDomainsKey, Key: CfgOptionDontResolveSpecialDomainsKey,
Description: fmt.Sprintf( Description: fmt.Sprintf(
"Block %s. Unofficial domains may pose a security risk. This does not affect .onion domains in the Tor Browser.", "Block %s. Unofficial domains may pose a security risk. This setting does not affect .onion domains in the Tor Browser.",
formatScopeList(specialServiceDomains), formatScopeList(specialServiceDomains),
), ),
OptType: config.OptTypeInt, OptType: config.OptTypeInt,
@ -245,9 +250,10 @@ The format is: "protocol://ip:port?parameter=value&parameter=value"
DefaultValue: status.SecurityLevelsAll, DefaultValue: status.SecurityLevelsAll,
PossibleValues: status.AllSecurityLevelValues, PossibleValues: status.AllSecurityLevelValues,
Annotations: config.Annotations{ Annotations: config.Annotations{
config.DisplayOrderAnnotation: cfgOptionDontResolveSpecialDomainsOrder, config.DisplayOrderAnnotation: cfgOptionDontResolveSpecialDomainsOrder,
config.DisplayHintAnnotation: status.DisplayHintSecurityLevel, config.DisplayHintAnnotation: status.DisplayHintSecurityLevel,
config.CategoryAnnotation: "Resolving", config.CategoryAnnotation: "Resolving",
"self:detail:specialServiceDomains": specialServiceDomains,
}, },
}) })
if err != nil { if err != nil {

View file

@ -25,7 +25,9 @@ var (
// Internal Special-Use Domain // Internal Special-Use Domain
// Used by Portmaster for special addressing. // Used by Portmaster for special addressing.
internalSpecialUseDomainScope = "." + internalSpecialUseDomain internalSpecialUseDomains = []string{
"." + internalSpecialUseDomain,
}
// Multicast DNS // Multicast DNS
// Handling: Send to nameservers with matching search scope, then MDNS // Handling: Send to nameservers with matching search scope, then MDNS
@ -112,7 +114,7 @@ func GetResolversInScope(ctx context.Context, q *Query) (selected []*Resolver, t
defer resolversLock.RUnlock() defer resolversLock.RUnlock()
// Internal use domains // Internal use domains
if strings.HasSuffix(q.dotPrefixedFQDN, internalSpecialUseDomainScope) { if domainInScope(q.dotPrefixedFQDN, internalSpecialUseDomains) {
return envResolvers, false return envResolvers, false
} }