Files
elmprodvpn/selective-vpn-api/app/smartdns_runtime.go

53 lines
1.7 KiB
Go

package app
import (
"fmt"
)
// ---------------------------------------------------------------------
// smartdns runtime accelerator (nftset -> agvpn_dyn4)
// ---------------------------------------------------------------------
// EN: Runtime accelerator state is persisted separately from DNS mode.
// EN: This allows enabling/disabling SmartDNS nftset hook without changing
// EN: resolver primary behavior.
// RU: Состояние runtime-ускорителя хранится отдельно от DNS mode.
// RU: Это позволяет включать/выключать SmartDNS nftset-hook независимо от
// RU: основного пути через резолвер.
const (
smartdnsRuntimeDomainSetLine = "domain-set -name agvpn_wild -file /etc/selective-vpn/smartdns.conf"
smartdnsRuntimeNftsetLine = "nftset /domain-set:agvpn_wild/#4:inet#agvpn#agvpn_dyn4"
smartdnsRuntimeStateVersion = 1
)
type smartDNSRuntimeState struct {
Version int `json:"version"`
Enabled bool `json:"enabled"`
UpdatedAt string `json:"updated_at"`
}
func wildcardFillSource(runtimeEnabled bool) string {
if runtimeEnabled {
return "both"
}
return "resolver"
}
func smartDNSRuntimeSnapshot() SmartDNSRuntimeStatusResponse {
st := loadSmartDNSRuntimeState(nil)
appliedEnabled, err := smartDNSRuntimeEnabledFromConfig()
msg := ""
if err != nil {
msg = fmt.Sprintf("config read error: %v", err)
}
return SmartDNSRuntimeStatusResponse{
Enabled: st.Enabled,
AppliedEnable: appliedEnabled,
WildcardSource: wildcardFillSource(st.Enabled),
UnitState: smartdnsUnitState(),
ConfigPath: smartdnsMainConfig,
Message: msg,
}
}