53 lines
1.7 KiB
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,
|
|
}
|
|
}
|