110 lines
4.7 KiB
Go
110 lines
4.7 KiB
Go
package app
|
|
|
|
import "embed"
|
|
|
|
// EN: Centralized runtime configuration constants and embedded seed assets used
|
|
// EN: across the API server, route updater, VPN helpers, and background workers.
|
|
// RU: Централизованные runtime-константы и встроенные seed-ресурсы,
|
|
// RU: используемые API-сервером, апдейтером маршрутов, VPN-хелперами и воркерами.
|
|
|
|
// ---------------------------------------------------------------------
|
|
// runtime constants
|
|
// ---------------------------------------------------------------------
|
|
|
|
const (
|
|
stateDir = "/var/lib/selective-vpn"
|
|
statusFilePath = stateDir + "/status.json"
|
|
dnsModePath = stateDir + "/dns-mode.json"
|
|
trafficModePath = stateDir + "/traffic-mode.json"
|
|
|
|
traceLogPath = stateDir + "/trace.log"
|
|
smartdnsLogPath = stateDir + "/smartdns.log"
|
|
lastIPsPath = stateDir + "/last-ips.txt"
|
|
lastIPsMapPath = stateDir + "/last-ips-map.txt"
|
|
lastIPsDirect = stateDir + "/last-ips-direct.txt"
|
|
lastIPsDyn = stateDir + "/last-ips-dyn.txt"
|
|
lastIPsMapDirect = stateDir + "/last-ips-map-direct.txt"
|
|
lastIPsMapDyn = stateDir + "/last-ips-map-wildcard.txt"
|
|
routesCacheMeta = stateDir + "/routes-clear-cache.json"
|
|
routesCacheIPs = stateDir + "/routes-clear-cache-ips.txt"
|
|
routesCacheDyn = stateDir + "/routes-clear-cache-ips-dyn.txt"
|
|
routesCacheMap = stateDir + "/routes-clear-cache-ips-map.txt"
|
|
routesCacheRT = stateDir + "/routes-clear-cache-routes.txt"
|
|
|
|
autoloopLogPath = stateDir + "/adguard-autoloop.log"
|
|
loginStatePath = stateDir + "/adguard-login.json"
|
|
dnsUpstreamsPath = stateDir + "/dns-upstreams.json"
|
|
smartdnsWLPath = stateDir + "/smartdns-wildcards.json"
|
|
smartdnsRTPath = stateDir + "/smartdns-runtime.json"
|
|
desiredLocation = stateDir + "/adguard-location.txt"
|
|
|
|
adgvpnCLI = "/usr/local/bin/adguardvpn-cli-root"
|
|
|
|
// маршруты v2
|
|
routesServiceTemplate = "selective-vpn2@%s.service"
|
|
routesTimerTemplate = "selective-vpn2@%s.timer"
|
|
routesServiceEnv = "SELECTIVE_VPN_ROUTES_UNIT"
|
|
routesTimerEnv = "SELECTIVE_VPN_ROUTES_TIMER"
|
|
|
|
// юнит автоконнекта AdGuard VPN
|
|
adgvpnUnit = "adguardvpn-autoconnect.service"
|
|
|
|
// доменные файлы / пути
|
|
domainDir = "/etc/selective-vpn/domains"
|
|
dnsUpstreamsConf = "/etc/selective-vpn/dns-upstreams.conf"
|
|
smartdnsDomainsFile = "/etc/selective-vpn/smartdns.conf"
|
|
smartdnsMainConfig = "/opt/stack/adguardapp/smartdns.conf"
|
|
staticIPsFile = "/etc/selective-vpn/static-ips.txt"
|
|
heartbeatFile = stateDir + "/heartbeat"
|
|
lockFile = "/run/lock/selective-vpn.lock"
|
|
MARK = "0x66"
|
|
defaultDNS1 = "94.140.14.14"
|
|
defaultDNS2 = "94.140.15.15"
|
|
defaultMeta1 = "46.243.231.30"
|
|
defaultMeta2 = "46.243.231.41"
|
|
|
|
smartDNSDefaultAddr = "127.0.0.1#6053"
|
|
smartDNSAddrEnv = "SVPN_SMARTDNS_ADDR"
|
|
smartDNSForceEnv = "SVPN_SMARTDNS_FORCE"
|
|
|
|
policyRouteMTU = "1380"
|
|
defaultTraceTailMax = 800
|
|
|
|
defaultEventsCapacity = 512
|
|
defaultPollStatusMs = 2000
|
|
defaultPollLoginMs = 2500
|
|
defaultPollAutoloopMs = 2500
|
|
defaultPollSystemdMs = 3000
|
|
defaultPollTraceMs = 1500
|
|
defaultHeartbeatSeconds = 15
|
|
)
|
|
|
|
// ---------------------------------------------------------------------
|
|
// domain expansion lists
|
|
// ---------------------------------------------------------------------
|
|
|
|
// EN: Domain expansion lists used by routes update to build selective targets.
|
|
// RU: Списки доменов для расширения селективных целей при обновлении маршрутов.
|
|
var googleLikeDomains = []string{
|
|
"google.com", "googleapis.com", "gstatic.com", "googleusercontent.com",
|
|
"1e100.net", "gvt1.com", "gvt2.com", "gvt3.com",
|
|
}
|
|
|
|
// EN: Extra Twitter subdomains that should be forced through selective routing.
|
|
// RU: Дополнительные поддомены Twitter, которые принудительно идут через селективный маршрут.
|
|
var twitterSpecial = []string{
|
|
"ton", "pay", "caps", "sms", "cert", "tdweb", "p", "ma-0.twimg", "si0.twimg",
|
|
"syndication", "tweetdeck", "stream", "userstream", "sitestream", "betastream",
|
|
"music", "ms1", "ms3", "urls-real.api", "music-partner", "partner-stream",
|
|
}
|
|
|
|
// ---------------------------------------------------------------------
|
|
// embedded assets
|
|
// ---------------------------------------------------------------------
|
|
|
|
// EN: Embedded default domain files used as seed content when runtime files are absent.
|
|
// RU: Встроенные файлы доменов по умолчанию для первичного seed, если runtime-файлы отсутствуют.
|
|
//
|
|
//go:embed assets/domains/*
|
|
var embeddedDomains embed.FS
|