mirror of
https://github.com/safing/portmaster
synced 2025-09-04 11:39:29 +00:00
Improve resolver and process docs
This commit is contained in:
parent
f0eb2e260c
commit
8a55b6a30d
4 changed files with 50 additions and 38 deletions
|
@ -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.
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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¶meter=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¶meter=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¶meter=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¶meter=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¶meter=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¶meter=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 {
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue