safing-portmaster/desktop/angular/src/app/shared/config/subsystems.ts
Alexandr Stelnykovych ee8cde31f6 feat: Add Split Tunnel feature (Windows PoC)
Implement initial proof-of-concept for split tunnel functionality on Windows,
allowing applications to route traffic through a designated network interface
while bypassing default system routing.

Features:
- Split tunnel module with TCP/UDP proxy infrastructure
- Firewall integration with split tunnel verdict handling
- SplitTunneling context attached to connections
- Configuration options: enable toggle, interface selection, and policy rules
- UI display of split tunnel connection details in connection info panel
- Subsystem configuration for user-level access

Windows-specific implementation:
- Uses proxy-based interface routing on Windows
- Automatic or manual interface detection and binding
- Support for IPv4 and IPv6 traffic

Note: Linux implementation is under development. SPN takes precedence over
split tunnel when both are enabled, ensuring SPN connections bypass this feature.
2026-04-24 18:04:01 +03:00

297 lines
5.7 KiB
TypeScript

import { ExpertiseLevelNumber } from "@safing/portmaster-api";
import { Subsystem } from "src/app/services/status.types";
export interface SubsystemWithExpertise extends Subsystem {
minimumExpertise: ExpertiseLevelNumber;
isDisabled: boolean;
hasUserDefinedValues: boolean;
}
export const subsystems : SubsystemWithExpertise[] = [
{
minimumExpertise: ExpertiseLevelNumber.developer,
isDisabled: false,
hasUserDefinedValues: false,
ID: "core",
Name: "Core",
Description: "Base Structure and System Integration",
Modules: [
{
Name: "core",
Enabled: true
},
{
Name: "subsystems",
Enabled: true
},
{
Name: "runtime",
Enabled: true
},
{
Name: "status",
Enabled: true
},
{
Name: "ui",
Enabled: true
},
{
Name: "compat",
Enabled: true
},
{
Name: "broadcasts",
Enabled: true
},
{
Name: "sync",
Enabled: true
}
],
ToggleOptionKey: "",
ExpertiseLevel: "user",
ReleaseLevel: 0,
ConfigKeySpace: "config:core/",
_meta: {
Created: 0,
Modified: 0,
Expires: 0,
Deleted: 0,
Key: "runtime:subsystems/core"
}
},
{
minimumExpertise: ExpertiseLevelNumber.developer,
isDisabled: false,
hasUserDefinedValues: false,
ID: "dns",
Name: "Secure DNS",
Description: "DNS resolver with scoping and DNS-over-TLS",
Modules: [
{
Name: "nameserver",
Enabled: true
},
{
Name: "resolver",
Enabled: true
}
],
ToggleOptionKey: "",
ExpertiseLevel: "user",
ReleaseLevel: 0,
ConfigKeySpace: "config:dns/",
_meta: {
Created: 0,
Modified: 0,
Expires: 0,
Deleted: 0,
Key: "runtime:subsystems/dns"
}
},
{
minimumExpertise: ExpertiseLevelNumber.developer,
isDisabled: false,
hasUserDefinedValues: false,
ID: "filter",
Name: "Privacy Filter",
Description: "DNS and Network Filter",
Modules: [
{
Name: "filter",
Enabled: true
},
{
Name: "interception",
Enabled: true
},
{
Name: "base",
Enabled: true
},
{
Name: "database",
Enabled: true
},
{
Name: "config",
Enabled: true
},
{
Name: "rng",
Enabled: true
},
{
Name: "metrics",
Enabled: true
},
{
Name: "api",
Enabled: true
},
{
Name: "updates",
Enabled: true
},
{
Name: "network",
Enabled: true
},
{
Name: "netenv",
Enabled: true
},
{
Name: "processes",
Enabled: true
},
{
Name: "profiles",
Enabled: true
},
{
Name: "notifications",
Enabled: true
},
{
Name: "intel",
Enabled: true
},
{
Name: "geoip",
Enabled: true
},
{
Name: "filterlists",
Enabled: true
},
{
Name: "customlists",
Enabled: true
}
],
ToggleOptionKey: "",
ExpertiseLevel: "user",
ReleaseLevel: 0,
ConfigKeySpace: "config:filter/",
_meta: {
Created: 0,
Modified: 0,
Expires: 0,
Deleted: 0,
Key: "runtime:subsystems/filter"
}
},
{
minimumExpertise: ExpertiseLevelNumber.developer,
isDisabled: false,
hasUserDefinedValues: false,
ID: "history",
Name: "Network History",
Description: "Keep Network History Data",
Modules: [
{
Name: "netquery",
Enabled: true
}
],
ToggleOptionKey: "",
ExpertiseLevel: "user",
ReleaseLevel: 0,
ConfigKeySpace: "config:history/",
_meta: {
Created: 0,
Modified: 0,
Expires: 0,
Deleted: 0,
Key: "runtime:subsystems/history"
}
},
{
minimumExpertise: ExpertiseLevelNumber.developer,
isDisabled: false,
hasUserDefinedValues: false,
ID: "spn",
Name: "SPN",
Description: "Safing Privacy Network",
Modules: [
{
Name: "captain",
Enabled: false
},
{
Name: "terminal",
Enabled: false
},
{
Name: "cabin",
Enabled: false
},
{
Name: "ships",
Enabled: false
},
{
Name: "docks",
Enabled: false
},
{
Name: "access",
Enabled: false
},
{
Name: "crew",
Enabled: false
},
{
Name: "navigator",
Enabled: false
},
{
Name: "sluice",
Enabled: false
},
{
Name: "patrol",
Enabled: false
}
],
ToggleOptionKey: "spn/enable",
ExpertiseLevel: "user",
ReleaseLevel: 0,
ConfigKeySpace: "config:spn/",
_meta: {
Created: 0,
Modified: 0,
Expires: 0,
Deleted: 0,
Key: "runtime:subsystems/spn"
}
},
{
minimumExpertise: ExpertiseLevelNumber.user, // User level since UI is user-facing
isDisabled: false,
hasUserDefinedValues: false,
ID: "splittun",
Name: "Split Tunnel",
Description: "Route traffic through specified interface to bypass default routing",
Modules: [
{
Name: "splittun",
Enabled: true
}
],
ToggleOptionKey: "splittun/use", // Links to the boolean enable/disable option
ExpertiseLevel: "user",
ReleaseLevel: 0,
ConfigKeySpace: "config:splittun/",
_meta: {
Created: 0,
Modified: 0,
Expires: 0,
Deleted: 0,
Key: "runtime:subsystems/splittun"
}
}
];