Files
elmprodvpn/selective-vpn-api/app/config.go
2026-02-15 20:56:57 +03:00

117 lines
5.2 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"
trafficAppMarksPath = stateDir + "/traffic-appmarks.json"
trafficAppProfilesPath = stateDir + "/traffic-app-profiles.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"
// EN: Extra marks reserved for per-app routing (systemd scope / cgroup-based).
// RU: Дополнительные метки для per-app маршрутизации (systemd scope / cgroup).
MARK_DIRECT = "0x67" // force direct (bypass VPN table even in full tunnel)
MARK_APP = "0x68" // force VPN for app-scoped traffic (works even in traffic-mode=direct)
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
defaultPollAppMarksMs = 15000
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